diff options
author | Thomas Wolf <twolf@apache.org> | 2023-09-08 22:27:19 +0200 |
---|---|---|
committer | Thomas Wolf <twolf@apache.org> | 2023-09-08 22:58:02 +0200 |
commit | 82c6638c72cd9525bab94b02438c167747132be9 (patch) | |
tree | 0ceade87265f43ff6d2b06a6025fa159c9e8d55a | |
parent | 7e502953c16353cb4437d396692ace7f8b968509 (diff) | |
download | jgit-82c6638c72cd9525bab94b02438c167747132be9.tar.gz jgit-82c6638c72cd9525bab94b02438c167747132be9.zip |
RevertCommand: support for inserting a Gerrit change ID
Add a setter for the flag to be passed through to the CommitCommand.
Bug: 342790
Change-Id: I87548d7c2742af8af5ef6105115e3ab9c58d1d9f
Signed-off-by: Thomas Wolf <twolf@apache.org>
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RevertCommandTest.java | 37 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/api/RevertCommand.java | 19 |
2 files changed, 55 insertions, 1 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RevertCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RevertCommandTest.java index 1c7b8d13a8..4ebe994ef7 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RevertCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RevertCommandTest.java @@ -39,6 +39,7 @@ import org.junit.Test; * Test revert command */ public class RevertCommandTest extends RepositoryTestCase { + @Test public void testRevert() throws IOException, JGitInternalException, GitAPIException { @@ -90,7 +91,43 @@ public class RevertCommandTest extends RepositoryTestCase { assertTrue(reader.getLastEntry().getComment() .startsWith("revert: Revert \"")); } + } + + @Test + public void testRevertWithChangeId() + throws IOException, JGitInternalException, GitAPIException { + try (Git git = new Git(db)) { + writeTrashFile("a", "first line\nthird line\n"); + git.add().addFilepattern("a").call(); + git.commit().setMessage("create a").call(); + + writeTrashFile("a", "first line\nsecond line\nthird line\n"); + git.add().addFilepattern("a").call(); + RevCommit second = git.commit().setMessage("changed a").call(); + + writeTrashFile("a", + "first line\nsecond line\nthird line\nfourth line\n"); + git.add().addFilepattern("a").call(); + git.commit().setMessage("changed a again").call(); + + git.revert().include(second).setInsertChangeId(true).call(); + assertEquals(RepositoryState.SAFE, db.getRepositoryState()); + + checkFile(new File(db.getWorkTree(), "a"), + "first line\nthird line\nfourth line\n"); + Iterator<RevCommit> history = git.log().call().iterator(); + RevCommit revertCommit = history.next(); + String expectedMessage = "Revert \"changed a\"\n\n" + + "This reverts commit " + second.getId().getName() + ".\n"; + String commitMessage = revertCommit.getFullMessage(); + assertTrue(commitMessage.matches("^\\Q" + expectedMessage + + "\\E\nChange-Id: I[a-fA-F0-9]{40}\n$")); + assertEquals("changed a again", history.next().getFullMessage()); + assertEquals("changed a", history.next().getFullMessage()); + assertEquals("create a", history.next().getFullMessage()); + assertFalse(history.hasNext()); + } } @Test diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/RevertCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/RevertCommand.java index 513f579b67..5231d4a327 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/RevertCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/RevertCommand.java @@ -62,6 +62,8 @@ public class RevertCommand extends GitCommand<RevCommit> { private String ourCommitName = null; + private boolean insertChangeId; + private List<Ref> revertedRefs = new LinkedList<>(); private MergeResult failingResult; @@ -132,7 +134,7 @@ public class RevertCommand extends GitCommand<RevCommit> { String ourName = calculateOurName(headRef); String revertName = srcCommit.getId() - .abbreviate(OBJECT_ID_ABBREV_STRING_LENGTH).name() + " " //$NON-NLS-1$ + .abbreviate(OBJECT_ID_ABBREV_STRING_LENGTH).name() + ' ' + srcCommit.getShortMessage(); ResolveMerger merger = (ResolveMerger) strategy.newMerger(repo); @@ -162,6 +164,7 @@ public class RevertCommand extends GitCommand<RevCommit> { dco.checkout(); try (Git git = new Git(getRepository())) { newHead = git.commit().setMessage(newMessage) + .setInsertChangeId(insertChangeId) .setReflogComment("revert: " + shortMessage) //$NON-NLS-1$ .call(); } @@ -327,4 +330,18 @@ public class RevertCommand extends GitCommand<RevCommit> { this.monitor = monitor; return this; } + + /** + * Defines whether to add a Gerrit change ID to each revert commit message. + * + * @param insertChangeId + * whether to insert a change ID + * @return {@code this} + * @since 6.8 + */ + public RevertCommand setInsertChangeId(boolean insertChangeId) { + this.insertChangeId = insertChangeId; + return this; + } + } |