Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDariusz Luksza2012-06-12 13:16:59 +0000
committerMatthias Sohn2012-06-12 13:16:59 +0000
commit95a23af59bb8edbc3e20dcf65dd4b1b0e9103132 (patch)
treef8dca1e8c86c0bd205fe9d8ed3bb88a8e3dd9059
parentf1e40cf062f90590862543f47dd71d76627d59ce (diff)
downloadegit-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.java5
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/synchronize/WorkingTreeChangeCache.java10
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>();

Back to the top