Fix CommitCommand.setOnly()

When CommitCommand.setOnly(path) is used a temporary index has to be
created containing only modifications for the specified pathes. The
process to fill this temporary index was broken because filling the
index was stopped when we reached the first untracked file. Instead the
process to fill the temporary index should continue until we processed
all pathes.

Bug: 451465
Change-Id: I22af50d70bd3b81e7c056358724956122b0d158d
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
Christian Halstrick 2015-05-18 12:48:08 +02:00 committed by Matthias Sohn
parent b10259f44b
commit 6d09c486ed
2 changed files with 12 additions and 1 deletions

View File

@ -514,6 +514,17 @@ public void commitOnlyShouldCommitUnmergedPathAndNotAffectOthers()
}
}
@Test
public void commitOnlyShouldHandleIgnored() throws Exception {
try (Git git = new Git(db)) {
writeTrashFile("subdir/foo", "Hello World");
writeTrashFile("subdir/bar", "Hello World");
writeTrashFile(".gitignore", "bar");
git.add().addFilepattern("subdir").call();
git.commit().setOnly("subdir").setMessage("first commit").call();
}
}
private static void addUnmergedEntry(String file, DirCacheBuilder builder) {
DirCacheEntry stage1 = new DirCacheEntry(file, DirCacheEntry.STAGE_1);
DirCacheEntry stage2 = new DirCacheEntry(file, DirCacheEntry.STAGE_2);

View File

@ -358,7 +358,7 @@ private DirCache createTemporaryIndex(ObjectId headId, DirCache index,
// check if entry refers to a tracked file
boolean tracked = dcTree != null || hTree != null;
if (!tracked)
break;
continue;
// for an unmerged path, DirCacheBuildIterator will yield 3
// entries, we only want to add one