diff options
author | Dariusz Luksza | 2012-06-12 13:16:59 +0000 |
---|---|---|
committer | Matthias Sohn | 2012-06-12 13:16:59 +0000 |
commit | 95a23af59bb8edbc3e20dcf65dd4b1b0e9103132 (patch) | |
tree | f8dca1e8c86c0bd205fe9d8ed3bb88a8e3dd9059 | |
parent | f1e40cf062f90590862543f47dd71d76627d59ce (diff) | |
download | egit-95a23af59bb8edbc3e20dcf65dd4b1b0e9103132.tar.gz egit-95a23af59bb8edbc3e20dcf65dd4b1b0e9103132.tar.xz egit-95a23af59bb8edbc3e20dcf65dd4b1b0e9103132.zip |
[sync] Use IndexDiffFilter instead of ANY_DIFF
ANY_DIFF filter used in WorkingTreeChangeCache doesn't consider
core.filemode option which leads to different results comparing to
native git status command. Replacing it with IndexDiffFilter solves
this issue.
Bug: 334248
Change-Id: I733b66be1fe8f308f94622fb6fee3ed03236e919
Signed-off-by: Dariusz Luksza <dariusz@luksza.org>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r-- | org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/GitCommitsModelCache.java | 5 | ||||
-rw-r--r-- | org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/WorkingTreeChangeCache.java | 10 |
2 files changed, 7 insertions, 8 deletions
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/GitCommitsModelCache.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/GitCommitsModelCache.java index 601ff14a61..d9af95c862 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/GitCommitsModelCache.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/GitCommitsModelCache.java @@ -9,6 +9,7 @@ package org.eclipse.egit.core.synchronize; import static org.eclipse.jgit.lib.ObjectId.zeroId; +import static org.eclipse.jgit.treewalk.filter.TreeFilter.ANY_DIFF; import java.io.IOException; import java.util.ArrayList; @@ -390,9 +391,9 @@ public class GitCommitsModelCache { tw.setRecursive(true); if (pathFilter == null) - tw.setFilter(TreeFilter.ANY_DIFF); + tw.setFilter(ANY_DIFF); else - tw.setFilter(AndTreeFilter.create(TreeFilter.ANY_DIFF, pathFilter)); + tw.setFilter(AndTreeFilter.create(ANY_DIFF, pathFilter)); final int localTreeId = direction == LEFT ? 1 : 0; final int remoteTreeId = direction == LEFT ? 0 : 1; diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/WorkingTreeChangeCache.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/WorkingTreeChangeCache.java index 45135b1fe1..5bc3169987 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/WorkingTreeChangeCache.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/WorkingTreeChangeCache.java @@ -10,7 +10,6 @@ package org.eclipse.egit.core.synchronize; import static org.eclipse.egit.core.synchronize.GitCommitsModelCache.RIGHT; import static org.eclipse.egit.core.synchronize.GitCommitsModelCache.calculateAndSetChangeKind; -import static org.eclipse.jgit.treewalk.filter.TreeFilter.ANY_DIFF; import java.io.IOException; import java.util.HashMap; @@ -24,8 +23,7 @@ import org.eclipse.jgit.lib.MutableObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.treewalk.FileTreeIterator; import org.eclipse.jgit.treewalk.TreeWalk; -import org.eclipse.jgit.treewalk.filter.AndTreeFilter; -import org.eclipse.jgit.treewalk.filter.NotIgnoredFilter; +import org.eclipse.jgit.treewalk.filter.IndexDiffFilter; /** * Builds list of working tree changes. @@ -40,9 +38,9 @@ public class WorkingTreeChangeCache { public static Map<String, Change> build(Repository repo) { TreeWalk tw = new TreeWalk(repo); try { - tw.addTree(new FileTreeIterator(repo)); - tw.addTree(new DirCacheIterator(repo.readDirCache())); - tw.setFilter(AndTreeFilter.create(new NotIgnoredFilter(0), ANY_DIFF)); + int fileNth = tw.addTree(new FileTreeIterator(repo)); + int cacheNth = tw.addTree(new DirCacheIterator(repo.readDirCache())); + tw.setFilter(new IndexDiffFilter(cacheNth, fileNth)); tw.setRecursive(true); Map<String, Change> result = new HashMap<String, Change>(); |