Skip to content

Commit 0b30443

Browse files
authored
Merge pull request #9304 from OndroMih/ondromih-git-commit-dlg-optimization
StatusCommand: Optimize git status by deferring getObjectId() calls
2 parents 2b92f87 + d98f086 commit 0b30443

1 file changed

Lines changed: 12 additions & 9 deletions

File tree

ide/libs.git/src/org/netbeans/libs/git/jgit/commands/StatusCommand.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.List;
3434
import java.util.Map;
3535
import java.util.Set;
36+
import java.util.function.Supplier;
3637
import java.util.logging.Level;
3738
import java.util.logging.Logger;
3839
import org.eclipse.jgit.diff.DiffEntry;
@@ -47,7 +48,9 @@
4748
import org.eclipse.jgit.lib.ObjectReader;
4849
import org.eclipse.jgit.lib.Repository;
4950
import org.eclipse.jgit.revwalk.RevWalk;
50-
import org.eclipse.jgit.treewalk.*;
51+
import org.eclipse.jgit.treewalk.EmptyTreeIterator;
52+
import org.eclipse.jgit.treewalk.FileTreeIterator;
53+
import org.eclipse.jgit.treewalk.TreeWalk;
5154
import org.eclipse.jgit.treewalk.filter.AndTreeFilter;
5255
import org.eclipse.jgit.treewalk.filter.NotTreeFilter;
5356
import org.eclipse.jgit.treewalk.filter.OrTreeFilter;
@@ -189,7 +192,7 @@ protected void run () throws GitException {
189192
Collection<TreeFilter> subTreeFilters = getSubtreeFilters(pathFilters, path);
190193
if (!subTreeFilters.isEmpty()) {
191194
// caller requested a status for a file under an ignored folder
192-
treeWalk.setFilter(AndTreeFilter.create(treeWalk.getFilter(), OrTreeFilter.create(NotTreeFilter.create(PathFilter.create(path)),
195+
treeWalk.setFilter(AndTreeFilter.create(treeWalk.getFilter(), OrTreeFilter.create(NotTreeFilter.create(PathFilter.create(path)),
193196
subTreeFilters.size() > 1 ? OrTreeFilter.create(subTreeFilters) : subTreeFilters.iterator().next())));
194197
treeWalk.enterSubtree();
195198
}
@@ -217,11 +220,11 @@ protected void run () throws GitException {
217220
} else {
218221
statusIndexWC = GitStatus.Status.STATUS_ADDED;
219222
}
220-
} else if (!isExistingSymlink(mIndex, mWorking) && (differ(mIndex, mWorking, checkExecutable)
223+
} else if (!isExistingSymlink(mIndex, mWorking) && (differ(mIndex, mWorking, checkExecutable)
221224
|| (mWorking != 0 && mWorking != FileMode.TREE.getBits() && fti.isModified(indexEntry, true, od)))
222225
|| GitStatus.Status.STATUS_MODIFIED == getGitlinkStatus(
223-
mWorking, treeWalk.getObjectId(T_WORKSPACE),
224-
mIndex, treeWalk.getObjectId(T_INDEX))) {
226+
mWorking, () -> treeWalk.getObjectId(T_WORKSPACE),
227+
mIndex, () -> treeWalk.getObjectId(T_INDEX))) {
225228
statusIndexWC = GitStatus.Status.STATUS_MODIFIED;
226229
} else {
227230
statusIndexWC = GitStatus.Status.STATUS_NORMAL;
@@ -237,8 +240,8 @@ protected void run () throws GitException {
237240
&& (statusIndexWC != GitStatus.Status.STATUS_NORMAL || statusHeadIndex != GitStatus.Status.STATUS_NORMAL)
238241
&& !treeWalk.getObjectId(T_COMMIT).equals(fti.getEntryObjectId())))
239242
|| GitStatus.Status.STATUS_MODIFIED == getGitlinkStatus(
240-
mHead, treeWalk.getObjectId(T_WORKSPACE),
241-
mHead, treeWalk.getObjectId(T_COMMIT))) {
243+
mHead, () -> treeWalk.getObjectId(T_WORKSPACE),
244+
mHead, () -> treeWalk.getObjectId(T_COMMIT))) {
242245
statusHeadWC = GitStatus.Status.STATUS_MODIFIED;
243246
} else {
244247
statusHeadWC = GitStatus.Status.STATUS_NORMAL;
@@ -444,13 +447,13 @@ private void handleSymlink (List<GitStatus> symLinks, String workTreePath) {
444447
}
445448
}
446449

447-
private GitStatus.Status getGitlinkStatus (int mode1, ObjectId id1, int mode2, ObjectId id2) {
450+
private GitStatus.Status getGitlinkStatus (int mode1, Supplier<ObjectId> id1, int mode2, Supplier<ObjectId> id2) {
448451
if (mode1 == FileMode.TYPE_GITLINK || mode2 == FileMode.TYPE_GITLINK) {
449452
if (mode1 == FileMode.TYPE_MISSING) {
450453
return GitStatus.Status.STATUS_REMOVED;
451454
} else if (mode2 == FileMode.TYPE_MISSING) {
452455
return GitStatus.Status.STATUS_ADDED;
453-
} else if (!id1.equals(id2)) {
456+
} else if (!id1.get().equals(id2.get())) {
454457
return GitStatus.Status.STATUS_MODIFIED;
455458
}
456459
}

0 commit comments

Comments
 (0)