summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorRobin Rosenberg <robin.rosenberg@dewire.com>2013-01-01 15:50:15 +0100
committerChris Aniszczyk <zx@twitter.com>2013-01-03 19:02:59 -0600
commit5c49b93191837633fddccb23acfadfe639338643 (patch)
treee84e0abacb787f70f15969602a2cffb567d1a4de /org.eclipse.jgit
parentc8c258169f8c46ef8ea959cd6d5b705237876ba8 (diff)
downloadjgit-5c49b93191837633fddccb23acfadfe639338643.tar.gz
jgit-5c49b93191837633fddccb23acfadfe639338643.zip
Ignore removed files with an assume-valid index entry
Bug: 347067 Change-Id: I5472e69dc77e26b5f248a4a04295775cf5051215 Signed-off-by: Chris Aniszczyk <zx@twitter.com>
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/IndexDiffFilter.java16
1 files changed, 12 insertions, 4 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/IndexDiffFilter.java b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/IndexDiffFilter.java
index 4e44a76c99..1b231cce9d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/IndexDiffFilter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/IndexDiffFilter.java
@@ -48,6 +48,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Set;
+import org.eclipse.jgit.dircache.DirCacheEntry;
import org.eclipse.jgit.dircache.DirCacheIterator;
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.MissingObjectException;
@@ -133,6 +134,14 @@ public class IndexDiffFilter extends TreeFilter {
final int wm = tw.getRawMode(workingTree);
String path = tw.getPathString();
+ DirCacheIterator di = tw.getTree(dirCache, DirCacheIterator.class);
+ if (di != null) {
+ DirCacheEntry dce = di.getDirCacheEntry();
+ if (dce != null)
+ if (dce.isAssumeValid())
+ return false;
+ }
+
if (!tw.isPostOrderTraversal()) {
// detect untracked Folders
// Whenever we enter a folder in the workingtree assume it will
@@ -153,7 +162,7 @@ public class IndexDiffFilter extends TreeFilter {
// it.
for (int i = 0; i < cnt; i++) {
int rmode = tw.getRawMode(i);
- if (i != workingTree && rmode != 0
+ if (i != workingTree && rmode != FileMode.TYPE_MISSING
&& FileMode.TREE.equals(rmode)) {
untrackedParentFolders.clear();
break;
@@ -171,14 +180,14 @@ public class IndexDiffFilter extends TreeFilter {
// other tree.
final int dm = tw.getRawMode(dirCache);
WorkingTreeIterator wi = workingTree(tw);
- if (dm == 0) {
+ if (dm == FileMode.TYPE_MISSING) {
if (honorIgnores && wi.isEntryIgnored()) {
ignoredPaths.add(wi.getEntryPathString());
int i = 0;
for (; i < cnt; i++) {
if (i == dirCache || i == workingTree)
continue;
- if (tw.getRawMode(i) != 0)
+ if (tw.getRawMode(i) != FileMode.TYPE_MISSING)
break;
}
@@ -209,7 +218,6 @@ public class IndexDiffFilter extends TreeFilter {
// Only one chance left to detect a diff: between index and working
// tree. Make use of the WorkingTreeIterator#isModified() method to
// avoid computing SHA1 on filesystem content if not really needed.
- DirCacheIterator di = tw.getTree(dirCache, DirCacheIterator.class);
return wi.isModified(di.getDirCacheEntry(), true);
}