]> source.dussan.org Git - jgit.git/commitdiff
IndexDiff: support state [removed, untracked] 67/1867/2
authorJens Baumgart <jens.baumgart@sap.com>
Mon, 8 Nov 2010 15:18:57 +0000 (16:18 +0100)
committerShawn O. Pearce <spearce@spearce.org>
Mon, 8 Nov 2010 23:32:03 +0000 (15:32 -0800)
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>
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java
org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java

index 3d19576758d376242eb1487902882d93e486a73b..c73764a990140f92534009f5a40382c0037759ce 100644 (file)
@@ -48,6 +48,9 @@ package org.eclipse.jgit.lib;
 import java.io.File;
 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;
 
 public class IndexDiffTest extends RepositoryTestCase {
@@ -210,4 +213,32 @@ public class IndexDiffTest extends RepositoryTestCase {
                        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");
+       }
 }
index 4319fedd63e3cae0b5c00c0ccb2493eea4cb0706..f5aaa5e8f8cca3b0b481cdeb1f52c9e0938c4e36 100644 (file)
@@ -203,6 +203,9 @@ public class IndexDiff {
                                        if (!fileModeTree.equals(FileMode.TYPE_TREE)) {
                                                removed.add(treeIterator.getEntryPathString());
                                                changesExist = true;
+                                               if (workingTreeIterator != null)
+                                                       untracked.add(workingTreeIterator
+                                                                       .getEntryPathString());
                                        }
                                }
                        } else {