From 36a53d1a3cdd66c40b6db241a75a28293f22f5e1 Mon Sep 17 00:00:00 2001 From: Christian Halstrick Date: Fri, 8 Apr 2016 16:04:17 +0200 Subject: [PATCH] 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 --- .../eclipse/jgit/api/CommitCommandTest.java | 31 +++++++++++++++++++ .../org/eclipse/jgit/api/CommitCommand.java | 7 ++++- 2 files changed, 37 insertions(+), 1 deletion(-) 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 9d87f0c29..8a07118f8 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 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 0abb8ba4e..e54169ade 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 { 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 = 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 { * Override the message written to the reflog * * @param reflogComment + * the comment to be written into the reflog or null + * to specify that no reflog should be written * @return {@code this} */ public CommitCommand setReflogComment(String reflogComment) { this.reflogComment = reflogComment; + useDefaultReflogMessage = false; return this; }