Browse Source

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
tags/v4.4.0.201605041135-m1
Christian Halstrick 8 years ago
parent
commit
36a53d1a3c

+ 31
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java View File

@@ -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)) {

+ 6
- 1
org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java View File

@@ -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;
}


Loading…
Cancel
Save