diff options
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java index 3e73c7598e..45f312f38c 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java @@ -55,6 +55,8 @@ import java.util.TimeZone; import org.eclipse.jgit.api.errors.WrongRepositoryStateException; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.dircache.DirCache; +import org.eclipse.jgit.dircache.DirCacheBuilder; +import org.eclipse.jgit.dircache.DirCacheEntry; import org.eclipse.jgit.lib.ConfigConstants; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.FileMode; @@ -471,4 +473,56 @@ public class CommitCommandTest extends RepositoryTestCase { assertEquals("New Author", amendedAuthor.getName()); assertEquals("newauthor@example.org", amendedAuthor.getEmailAddress()); } + + @Test + public void commitOnlyShouldCommitUnmergedPathAndNotAffectOthers() + throws Exception { + DirCache index = db.lockDirCache(); + DirCacheBuilder builder = index.builder(); + addUnmergedEntry("unmerged1", builder); + addUnmergedEntry("unmerged2", builder); + DirCacheEntry other = new DirCacheEntry("other"); + other.setFileMode(FileMode.REGULAR_FILE); + builder.add(other); + builder.commit(); + + writeTrashFile("unmerged1", "unmerged1 data"); + writeTrashFile("unmerged2", "unmerged2 data"); + writeTrashFile("other", "other data"); + + assertEquals("[other, mode:100644]" + + "[unmerged1, mode:100644, stage:1]" + + "[unmerged1, mode:100644, stage:2]" + + "[unmerged1, mode:100644, stage:3]" + + "[unmerged2, mode:100644, stage:1]" + + "[unmerged2, mode:100644, stage:2]" + + "[unmerged2, mode:100644, stage:3]", + indexState(0)); + + Git git = new Git(db); + RevCommit commit = git.commit().setOnly("unmerged1") + .setMessage("Only one file").call(); + + assertEquals("[other, mode:100644]" + "[unmerged1, mode:100644]" + + "[unmerged2, mode:100644, stage:1]" + + "[unmerged2, mode:100644, stage:2]" + + "[unmerged2, mode:100644, stage:3]", + indexState(0)); + + TreeWalk walk = TreeWalk.forPath(db, "unmerged1", commit.getTree()); + assertEquals(FileMode.REGULAR_FILE, walk.getFileMode(0)); + walk.release(); + } + + private static void addUnmergedEntry(String file, DirCacheBuilder builder) { + DirCacheEntry stage1 = new DirCacheEntry(file, DirCacheEntry.STAGE_1); + DirCacheEntry stage2 = new DirCacheEntry(file, DirCacheEntry.STAGE_2); + DirCacheEntry stage3 = new DirCacheEntry(file, DirCacheEntry.STAGE_3); + stage1.setFileMode(FileMode.REGULAR_FILE); + stage2.setFileMode(FileMode.REGULAR_FILE); + stage3.setFileMode(FileMode.REGULAR_FILE); + builder.add(stage1); + builder.add(stage2); + builder.add(stage3); + } } |