diff options
author | Thomas Wolf <thomas.wolf@paranor.ch> | 2022-02-03 20:24:53 +0100 |
---|---|---|
committer | Thomas Wolf <thomas.wolf@paranor.ch> | 2022-02-04 13:42:12 +0100 |
commit | 7e752364a6000259b2ec3fc66e0314ba12e6c0d4 (patch) | |
tree | 311a5031dfe939c1306e5ebe4eb8b4b3b685ccec | |
parent | d0553759a0cc3fa0e6a727bf817b5376cc79c971 (diff) | |
download | jgit-7e752364a6000259b2ec3fc66e0314ba12e6c0d4.tar.gz jgit-7e752364a6000259b2ec3fc66e0314ba12e6c0d4.zip |
[rebase] InteractiveHandler2: handle Gerrit Change-Ids
Add a way for the handler to tell whether the commit should generate a
Gerrit Change-Id. Augment the ModifyResult interface, and set the flag
on the CommitCommand.
This enables users to have a Change-ID be generated when squashing or
rewording commits. A possibly already existing Change-Id will remain
unchanged.
Bug: 440211
Change-Id: I66a72e0646876d162a7011235cca969e20acf060
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java index 037dd3be30..2b0d8ce1c9 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java @@ -448,10 +448,15 @@ public class RebaseCommand extends GitCommand<RebaseResult> { case REWORD: String oldMessage = commitToPick.getFullMessage(); CleanupMode mode = commitConfig.resolve(CleanupMode.DEFAULT, true); - String newMessage = editCommitMessage(oldMessage, mode); + boolean[] doChangeId = { false }; + String newMessage = editCommitMessage(doChangeId, oldMessage, mode); try (Git git = new Git(repo)) { - newHead = git.commit().setMessage(newMessage).setAmend(true) - .setNoVerify(true).call(); + newHead = git.commit() + .setMessage(newMessage) + .setAmend(true) + .setNoVerify(true) + .setInsertChangeId(doChangeId[0]) + .call(); } return null; case EDIT: @@ -488,7 +493,7 @@ public class RebaseCommand extends GitCommand<RebaseResult> { return null; } - private String editCommitMessage(String message, + private String editCommitMessage(boolean[] doChangeId, String message, @NonNull CleanupMode mode) { String newMessage; CommitConfig.CleanupMode cleanup; @@ -500,9 +505,11 @@ public class RebaseCommand extends GitCommand<RebaseResult> { if (CleanupMode.DEFAULT.equals(cleanup)) { cleanup = mode; } + doChangeId[0] = modification.shouldAddChangeId(); } else { newMessage = interactiveHandler.modifyCommitMessage(message); cleanup = CommitConfig.CleanupMode.STRIP; + doChangeId[0] = false; } return CommitConfig.cleanText(newMessage, cleanup, '#'); } @@ -799,13 +806,17 @@ public class RebaseCommand extends GitCommand<RebaseResult> { } try (Git git = new Git(repo)) { if (isLast) { + boolean[] doChangeId = { false }; if (sequenceContainsSquash) { - commitMessage = editCommitMessage(commitMessage, + commitMessage = editCommitMessage(doChangeId, commitMessage, CleanupMode.STRIP); } retNewHead = git.commit() .setMessage(commitMessage) - .setAmend(true).setNoVerify(true).call(); + .setAmend(true) + .setNoVerify(true) + .setInsertChangeId(doChangeId[0]) + .call(); rebaseState.getFile(MESSAGE_SQUASH).delete(); rebaseState.getFile(MESSAGE_FIXUP).delete(); } else { @@ -1730,6 +1741,16 @@ public class RebaseCommand extends GitCommand<RebaseResult> { */ @NonNull CleanupMode getCleanupMode(); + + /** + * Tells whether a Gerrit Change-Id should be computed and added to + * the commit message, as with + * {@link CommitCommand#setInsertChangeId(boolean)}. + * + * @return {@code true} if a Change-Id should be handled, + * {@code false} otherwise + */ + boolean shouldAddChangeId(); } } |