diff options
author | Robin Stocker <robin@nibor.org> | 2012-10-20 22:00:13 +0200 |
---|---|---|
committer | Robin Stocker <robin@nibor.org> | 2012-11-12 22:51:18 +0100 |
commit | 0f88d7b72ff09297954930cbe2a23cf8feff9382 (patch) | |
tree | ef4358f7897c96fff2215f4b8c3e58dfac92920a /org.eclipse.jgit.test | |
parent | 106e8b87625cd1ad6b2cec14d676c23174422352 (diff) | |
download | jgit-0f88d7b72ff09297954930cbe2a23cf8feff9382.tar.gz jgit-0f88d7b72ff09297954930cbe2a23cf8feff9382.zip |
CommitCommand: Ensure unmerged paths are added correctly with setOnly
With bug 391855, PathEdit will be changed to apply an edit for each
stage. With that, CommitCommand would no longer work correctly when
committing an unmerged path.
This changes it to use a DirCacheBuilder which allows us to correctly
replace the entries for the three stages with one, which is not possible
with PathEdit.
Bug: 391859
Change-Id: I6dc180aec7e2cbf8d1e91f50482c95bc420f79de
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); + } } |