diff options
author | Robin Rosenberg <robin.rosenberg@dewire.com> | 2013-01-01 15:50:15 +0100 |
---|---|---|
committer | Chris Aniszczyk <zx@twitter.com> | 2013-01-03 19:02:59 -0600 |
commit | 5c49b93191837633fddccb23acfadfe639338643 (patch) | |
tree | e84e0abacb787f70f15969602a2cffb567d1a4de /org.eclipse.jgit | |
parent | c8c258169f8c46ef8ea959cd6d5b705237876ba8 (diff) | |
download | jgit-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.java | 16 |
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); } |