]> source.dussan.org Git - jgit.git/commitdiff
CommitCommand: Use original author on amend if author is not set 77/8077/2
authorRobin Stocker <robin@nibor.org>
Sun, 7 Oct 2012 15:18:58 +0000 (17:18 +0200)
committerRobin Stocker <robin@nibor.org>
Sun, 7 Oct 2012 22:31:27 +0000 (00:31 +0200)
This way, callers don't have to parse author ident of HEAD themselves.

Bug: 362391
Change-Id: I383a817e6ed4707d637c52c007bc7b57728e6c85

org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java
org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java

index 3729387f32ed289535f39886527923bdc81a9827..3e73c7598e8545717fea9d9655492b2446dee79b 100644 (file)
@@ -48,7 +48,9 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
+import java.util.Date;
 import java.util.List;
+import java.util.TimeZone;
 
 import org.eclipse.jgit.api.errors.WrongRepositoryStateException;
 import org.eclipse.jgit.diff.DiffEntry;
@@ -57,6 +59,7 @@ import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.FileMode;
 import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.lib.RefUpdate;
 import org.eclipse.jgit.lib.RefUpdate.Result;
 import org.eclipse.jgit.lib.Repository;
@@ -427,4 +430,45 @@ public class CommitCommandTest extends RepositoryTestCase {
                Git git = new Git(db);
                git.commit().setAmend(true).setMessage("initial commit").call();
        }
+
+       @Test
+       public void commitAmendWithoutAuthorShouldSetOriginalAuthorAndAuthorTime()
+                       throws Exception {
+               Git git = new Git(db);
+
+               writeTrashFile("file1", "file1");
+               git.add().addFilepattern("file1").call();
+
+               final String authorName = "First Author";
+               final String authorEmail = "author@example.org";
+               final Date authorDate = new Date(1349621117000L);
+               PersonIdent firstAuthor = new PersonIdent(authorName, authorEmail,
+                               authorDate, TimeZone.getTimeZone("UTC"));
+               git.commit().setMessage("initial commit").setAuthor(firstAuthor).call();
+
+               RevCommit amended = git.commit().setAmend(true)
+                               .setMessage("amend commit").call();
+
+               PersonIdent amendedAuthor = amended.getAuthorIdent();
+               assertEquals(authorName, amendedAuthor.getName());
+               assertEquals(authorEmail, amendedAuthor.getEmailAddress());
+               assertEquals(authorDate.getTime(), amendedAuthor.getWhen().getTime());
+       }
+
+       @Test
+       public void commitAmendWithAuthorShouldUseIt() throws Exception {
+               Git git = new Git(db);
+
+               writeTrashFile("file1", "file1");
+               git.add().addFilepattern("file1").call();
+               git.commit().setMessage("initial commit").call();
+
+               RevCommit amended = git.commit().setAmend(true)
+                               .setAuthor("New Author", "newauthor@example.org")
+                               .setMessage("amend commit").call();
+
+               PersonIdent amendedAuthor = amended.getAuthorIdent();
+               assertEquals("New Author", amendedAuthor.getName());
+               assertEquals("newauthor@example.org", amendedAuthor.getEmailAddress());
+       }
 }
index 87c282d11047cc426f182a8953177a009e442944..a166790a4042662f94f4d21e29a87d8d6e3cc23f 100644 (file)
@@ -187,6 +187,8 @@ public class CommitCommand extends GitCommand<RevCommit> {
                                        RevCommit[] p = previousCommit.getParents();
                                        for (int i = 0; i < p.length; i++)
                                                parents.add(0, p[i].getId());
+                                       if (author == null)
+                                               author = previousCommit.getAuthorIdent();
                                } else {
                                        parents.add(0, headId);
                                }
@@ -471,7 +473,7 @@ public class CommitCommand extends GitCommand<RevCommit> {
        private void processOptions(RepositoryState state) throws NoMessageException {
                if (committer == null)
                        committer = new PersonIdent(repo);
-               if (author == null)
+               if (author == null && !amend)
                        author = committer;
 
                // when doing a merge commit parse MERGE_HEAD and MERGE_MSG files
@@ -574,7 +576,8 @@ public class CommitCommand extends GitCommand<RevCommit> {
        /**
         * Sets the author for this {@code commit}. If no author is explicitly
         * specified because this method is never called or called with {@code null}
-        * value then the author will be set to the committer.
+        * value then the author will be set to the committer or to the original
+        * author when amending.
         *
         * @param author
         *            the author used for the {@code commit}
@@ -589,7 +592,8 @@ public class CommitCommand extends GitCommand<RevCommit> {
        /**
         * Sets the author for this {@code commit}. If no author is explicitly
         * specified because this method is never called or called with {@code null}
-        * value then the author will be set to the committer.
+        * value then the author will be set to the committer or to the original
+        * author when amending.
         *
         * @param name
         *            the name of the author used for the {@code commit}