]> source.dussan.org Git - jgit.git/commitdiff
Do not add ignored files in Add command 63/1163/1
authorStefan Lay <stefan.lay@sap.com>
Thu, 22 Jul 2010 09:26:04 +0000 (11:26 +0200)
committerStefan Lay <stefan.lay@sap.com>
Thu, 22 Jul 2010 09:26:04 +0000 (11:26 +0200)
Signed-off-by: Stefan Lay <stefan.lay@sap.com>
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
org.eclipse.jgit/src/org/eclipse/jgit/api/AddCommand.java

index 5eec1eb48d255f6e250990cf2630675f8d7d5b8d..00e39ebe3861d4f49adfecf53ce0ea5e036623c4 100644 (file)
@@ -310,6 +310,34 @@ public class AddCommandTest extends RepositoryTestCase {
                assertEquals(0, dc.getEntry("sub/b.txt").getStage());
        }
 
+       public void testAddIgnoredFile() throws Exception  {
+               new File(db.getWorkDir(), "sub").mkdir();
+               File file = new File(db.getWorkDir(), "sub/a.txt");
+               file.createNewFile();
+               PrintWriter writer = new PrintWriter(file);
+               writer.print("content");
+               writer.close();
+
+               File ignoreFile = new File(db.getWorkDir(), ".gitignore");
+               ignoreFile.createNewFile();
+               writer = new PrintWriter(ignoreFile);
+               writer.print("sub/b.txt");
+               writer.close();
+
+               File file2 = new File(db.getWorkDir(), "sub/b.txt");
+               file2.createNewFile();
+               writer = new PrintWriter(file2);
+               writer.print("content b");
+               writer.close();
+
+               Git git = new Git(db);
+               DirCache dc = git.add().addFilepattern("sub").call();
+               assertEquals("sub/a.txt", dc.getEntry("sub/a.txt").getPathString());
+               assertNull(dc.getEntry("sub/b.txt"));
+               assertNotNull(dc.getEntry("sub/a.txt").getObjectId());
+               assertEquals(0, dc.getEntry("sub/a.txt").getStage());
+       }
+
        private DirCacheEntry addEntryToBuilder(String path, File file,
                        ObjectWriter ow, DirCacheBuilder builder, int stage)
                        throws IOException {
index 23e30ca68ba18a9c5be59e4004b01cc01f34f415..50db1ffc146368d74c1915ec1ef04f394e23dbaf 100644 (file)
@@ -130,12 +130,16 @@ public class AddCommand extends GitCommand<DirCache> {
                                String path = tw.getPathString();
 
                                final File file = new File(repo.getWorkDir(), path);
+                               FileTreeIterator f = tw.getTree(1, FileTreeIterator.class);
+                               if (tw.getTree(0, DirCacheIterator.class) == null &&
+                                               f != null && f.isEntryIgnored()) {
+                                       // file is not in index but is ignored, do nothing
+                               }
                                // In case of an existing merge conflict the
                                // DirCacheBuildIterator iterates over all stages of
                                // this path, we however want to add only one
                                // new DirCacheEntry per path.
-                               if (!(path.equals(lastAddedFile))) {
-                                        FileTreeIterator f = tw.getTree(1, FileTreeIterator.class);
+                               else if (!(path.equals(lastAddedFile))) {
                                         if (f != null) { // the file exists
                                                DirCacheEntry entry = new DirCacheEntry(path);
                                                entry.setLength((int)f.getEntryLength());