diff options
author | Dave Borowitz <dborowitz@google.com> | 2015-03-18 10:46:41 -0700 |
---|---|---|
committer | Dave Borowitz <dborowitz@google.com> | 2015-03-23 13:03:31 -0700 |
commit | f1a15f7eb09183124ea645a8bfc16a03d58fd385 (patch) | |
tree | 8583a1146018ef0534912f7709154804f6bb1b54 /org.eclipse.jgit.test | |
parent | dd453f4185c8e7e9608605a35abd4ac4eaadba76 (diff) | |
download | jgit-f1a15f7eb09183124ea645a8bfc16a03d58fd385.tar.gz jgit-f1a15f7eb09183124ea645a8bfc16a03d58fd385.zip |
TestRepository: Add a cherryPick method
CherryPickCommand only works on a non-bare repository, as it must
modify the working tree and index in case of a merge conflict. In
tests, being able to recover from a merge conflict is less important,
as the caller should be able to control the full contents of files in
advance of the cherry-pick.
Change-Id: Ic332e44df1308b9336e884666b08c1f6db64513d
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java | 80 |
1 files changed, 79 insertions, 1 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java index cefc779a27..fbb9eecdff 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java @@ -46,6 +46,7 @@ package org.eclipse.jgit.junit; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; @@ -55,9 +56,9 @@ import java.util.regex.Pattern; import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription; import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository; -import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.AnyObjectId; import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectLoader; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Ref; @@ -296,6 +297,83 @@ public class TestRepositoryTest { assertEquals("refs/heads/master", ref.getTarget().getName()); } + @Test + public void cherryPick() throws Exception { + repo.updateRef("HEAD").link("refs/heads/master"); + RevCommit head = tr.branch("master").commit() + .add("foo", "foo contents\n") + .create(); + rw.parseBody(head); + RevCommit toPick = tr.commit() + .parent(tr.commit().create()) // Can't cherry-pick root. + .author(new PersonIdent("Cherrypick Author", "cpa@example.com", + tr.getClock(), tr.getTimeZone())) + .author(new PersonIdent("Cherrypick Committer", "cpc@example.com", + tr.getClock(), tr.getTimeZone())) + .message("message to cherry-pick") + .add("bar", "bar contents\n") + .create(); + RevCommit result = tr.cherryPick(toPick); + rw.parseBody(result); + + Ref headRef = tr.getRepository().getRef("HEAD"); + assertEquals(result, headRef.getObjectId()); + assertTrue(headRef.isSymbolic()); + assertEquals("refs/heads/master", headRef.getLeaf().getName()); + + assertEquals(1, result.getParentCount()); + assertEquals(head, result.getParent(0)); + assertEquals(toPick.getAuthorIdent(), result.getAuthorIdent()); + + // Committer name/email matches default, and time was incremented. + assertEquals(new PersonIdent(head.getCommitterIdent(), new Date(0)), + new PersonIdent(result.getCommitterIdent(), new Date(0))); + assertTrue(toPick.getCommitTime() < result.getCommitTime()); + + assertEquals("message to cherry-pick", result.getFullMessage()); + assertEquals("foo contents\n", blobAsString(result, "foo")); + assertEquals("bar contents\n", blobAsString(result, "bar")); + } + + @Test + public void cherryPickWithContentMerge() throws Exception { + RevCommit base = tr.branch("HEAD").commit() + .add("foo", "foo contents\n\n") + .create(); + tr.branch("HEAD").commit() + .add("foo", "foo contents\n\nlast line\n") + .create(); + RevCommit toPick = tr.commit() + .message("message to cherry-pick") + .parent(base) + .add("foo", "changed foo contents\n\n") + .create(); + RevCommit result = tr.cherryPick(toPick); + rw.parseBody(result); + + assertEquals("message to cherry-pick", result.getFullMessage()); + assertEquals("changed foo contents\n\nlast line\n", + blobAsString(result, "foo")); + } + + @Test + public void cherryPickWithIdenticalContents() throws Exception { + RevCommit base = tr.branch("HEAD").commit().add("foo", "foo contents\n") + .create(); + RevCommit head = tr.branch("HEAD").commit() + .parent(base) + .add("bar", "bar contents\n") + .create(); + RevCommit toPick = tr.commit() + .parent(base) + .message("message to cherry-pick") + .add("bar", "bar contents\n") + .create(); + assertNotEquals(head, toPick); + assertNull(tr.cherryPick(toPick)); + assertEquals(head, repo.getRef("HEAD").getObjectId()); + } + private String blobAsString(AnyObjectId treeish, String path) throws Exception { RevObject obj = tr.get(rw.parseTree(treeish), path); |