From aa86cfc33960938a62a8d0b300a153749bedfc64 Mon Sep 17 00:00:00 2001 From: Stefan Lay Date: Thu, 22 Jul 2010 11:26:04 +0200 Subject: [PATCH] Do not add ignored files in Add command Signed-off-by: Stefan Lay --- .../org/eclipse/jgit/api/AddCommandTest.java | 28 +++++++++++++++++++ .../src/org/eclipse/jgit/api/AddCommand.java | 8 ++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java index 5eec1eb48..00e39ebe3 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java @@ -310,6 +310,34 @@ public void testAddFolder() throws Exception { 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 { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/AddCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/AddCommand.java index 23e30ca68..50db1ffc1 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/AddCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/AddCommand.java @@ -130,12 +130,16 @@ public DirCache call() throws NoFilepatternException { 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());