diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2015-04-13 01:01:13 +0200 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2015-05-10 23:17:36 +0200 |
commit | 8b9623511f216027294b0cf4d2ecb7710915238a (patch) | |
tree | 1bf4b9b98eac4b9565e60002d1964cc33f317875 | |
parent | 4ac7cf003b802b66d085451a5b3dc4912c56e230 (diff) | |
download | jgit-8b9623511f216027294b0cf4d2ecb7710915238a.tar.gz jgit-8b9623511f216027294b0cf4d2ecb7710915238a.zip |
Use ANY_DIFF filter in ResolveMerger only for bare repositories
As Chris pointed out change I822721c76c64e614f87a080ced2457941f53adcd
slowed down merge since ANY_DIFF filter is much less efficient than the
manual detection of diffs done in ResolveMerger.processEntry() since it
avoids unnecessary filesystem calls using the git index. Hence only set
the ANY_DIFF filter on bare repositories which don't have a working tree
to scan.
To test performance I used the setup described in Chris' comment on
change I822721c76c64e614f87a080ced2457941f53adcd and modified
ResolveMerger.mergeTrees() to not add the working tree in order to
simulate merging in a bare repository.
At least on Mac I couldn't detect a speedup, with and without the
ANY_DIFF filter merge test takes an average 0.67sec.
Change-Id: I17b3a06f369cee009490f54ad1a2deb6c145c7cf
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java b/org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java index 953d3a2cd2..3654ffd1e8 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java @@ -90,6 +90,7 @@ import org.eclipse.jgit.treewalk.CanonicalTreeParser; import org.eclipse.jgit.treewalk.NameConflictTreeWalk; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.WorkingTreeIterator; +import org.eclipse.jgit.treewalk.filter.TreeFilter; import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.TemporaryBuffer; @@ -1012,8 +1013,11 @@ public class ResolveMerger extends ThreeWayMerger { tw.addTree(headTree); tw.addTree(mergeTree); tw.addTree(buildIt); - if (workingTreeIterator != null) + if (workingTreeIterator != null) { tw.addTree(workingTreeIterator); + } else { + tw.setFilter(TreeFilter.ANY_DIFF); + } if (!mergeTreeWalk(tw, ignoreConflicts)) { return false; |