summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Halstrick <christian.halstrick@sap.com>2016-04-08 16:04:17 +0200
committerChristian Halstrick <christian.halstrick@sap.com>2016-04-11 08:58:48 +0200
commit36a53d1a3cdd66c40b6db241a75a28293f22f5e1 (patch)
treeee5d8db745d6153399b0c63eb608155a2ccdb473
parent2708b11b6c6f0e6a1ecd4a6e430756501a783bc6 (diff)
downloadjgit-36a53d1a3cdd66c40b6db241a75a28293f22f5e1.tar.gz
jgit-36a53d1a3cdd66c40b6db241a75a28293f22f5e1.zip
Fix CommitCommand to be able to skip writing to RefLog
CommitCommand already provided a method to set the comment which should be written into the reflog. The underlying RefUpdate class supported to skip writing a reflog entry. But through the CommitCommand API it was not possible to prevent writing a reflog entry. Fix this and allow creating commits which don't occur in the reflog. Change-Id: I193c53de71fb5958ea749c4bfa8360a51acc9b58
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java31
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java7
2 files changed, 37 insertions, 1 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 9d87f0c29c..8a07118f84 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
@@ -68,6 +68,7 @@ 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.ReflogEntry;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.revwalk.RevCommit;
@@ -436,6 +437,36 @@ public class CommitCommandTest extends RepositoryTestCase {
}
}
+ @Test
+ public void testReflogs() throws Exception {
+ try (Git git = new Git(db)) {
+ writeTrashFile("f", "1");
+ git.add().addFilepattern("f").call();
+ git.commit().setMessage("c1").call();
+ writeTrashFile("f", "2");
+ git.commit().setMessage("c2").setAll(true).setReflogComment(null)
+ .call();
+ writeTrashFile("f", "3");
+ git.commit().setMessage("c3").setAll(true)
+ .setReflogComment("testRl").call();
+
+ db.getReflogReader(Constants.HEAD).getReverseEntries();
+
+ assertEquals("testRl;commit (initial): c1;", reflogComments(
+ db.getReflogReader(Constants.HEAD).getReverseEntries()));
+ assertEquals("testRl;commit (initial): c1;", reflogComments(
+ db.getReflogReader(db.getBranch()).getReverseEntries()));
+ }
+ }
+
+ private static String reflogComments(List<ReflogEntry> entries) {
+ StringBuffer b = new StringBuffer();
+ for (ReflogEntry e : entries) {
+ b.append(e.getComment()).append(";");
+ }
+ return b.toString();
+ }
+
@Test(expected = WrongRepositoryStateException.class)
public void commitAmendOnInitialShouldFail() throws Exception {
try (Git git = new Git(db)) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java
index 0abb8ba4ec..e54169adec 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java
@@ -124,6 +124,8 @@ public class CommitCommand extends GitCommand<RevCommit> {
private String reflogComment;
+ private boolean useDefaultReflogMessage = true;
+
/**
* Setting this option bypasses the pre-commit and commit-msg hooks.
*/
@@ -258,7 +260,7 @@ public class CommitCommand extends GitCommand<RevCommit> {
RevCommit revCommit = rw.parseCommit(commitId);
RefUpdate ru = repo.updateRef(Constants.HEAD);
ru.setNewObjectId(commitId);
- if (reflogComment != null) {
+ if (!useDefaultReflogMessage) {
ru.setRefLogMessage(reflogComment, false);
} else {
String prefix = amend ? "commit (amend): " //$NON-NLS-1$
@@ -790,10 +792,13 @@ public class CommitCommand extends GitCommand<RevCommit> {
* Override the message written to the reflog
*
* @param reflogComment
+ * the comment to be written into the reflog or <code>null</code>
+ * to specify that no reflog should be written
* @return {@code this}
*/
public CommitCommand setReflogComment(String reflogComment) {
this.reflogComment = reflogComment;
+ useDefaultReflogMessage = false;
return this;
}