Browse Source

IndexDiff: support state [removed, untracked]

IndexDiff was extended to detect files which are both removed from the
index and untracked.  Before this change these files were only added
to the removed collection.

Change-Id: I971d8261d2e8932039fce462b59c12e143f79f90
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
stable-0.10
Jens Baumgart 14 years ago committed by Shawn O. Pearce
parent
commit
2dc2dd8b1b
  1. 31
      org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java
  2. 3
      org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java

31
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java

@ -48,6 +48,9 @@ package org.eclipse.jgit.lib;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheEditor;
import org.eclipse.jgit.treewalk.FileTreeIterator; import org.eclipse.jgit.treewalk.FileTreeIterator;
public class IndexDiffTest extends RepositoryTestCase { public class IndexDiffTest extends RepositoryTestCase {
@ -210,4 +213,32 @@ public class IndexDiffTest extends RepositoryTestCase {
oi.release(); oi.release();
} }
} }
/**
* A file is removed from the index but stays in the working directory. It
* is checked if IndexDiff detects this file as removed and untracked.
*
* @throws Exception
*/
public void testRemovedUntracked() throws Exception{
Git git = new Git(db);
String path = "file";
writeTrashFile(path, "content");
git.add().addFilepattern(path).call();
git.commit().setMessage("commit").call();
removeFromIndex(path);
FileTreeIterator iterator = new FileTreeIterator(db);
IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator);
diff.diff();
assertTrue(diff.getRemoved().contains(path));
assertTrue(diff.getUntracked().contains(path));
}
private void removeFromIndex(String path) throws IOException {
final DirCache dirc = db.lockDirCache();
final DirCacheEditor edit = dirc.editor();
edit.add(new DirCacheEditor.DeletePath(path));
if (!edit.commit())
throw new IOException("could not commit");
}
} }

3
org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java

@ -203,6 +203,9 @@ public class IndexDiff {
if (!fileModeTree.equals(FileMode.TYPE_TREE)) { if (!fileModeTree.equals(FileMode.TYPE_TREE)) {
removed.add(treeIterator.getEntryPathString()); removed.add(treeIterator.getEntryPathString());
changesExist = true; changesExist = true;
if (workingTreeIterator != null)
untracked.add(workingTreeIterator
.getEntryPathString());
} }
} }
} else { } else {

Loading…
Cancel
Save