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: I193c53de71fb5958ea749c4bfa8360a51acc9b58tags/v4.4.0.201605041135-m1
@@ -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)) { |
@@ -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; | |||
} | |||