[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>
This commit is contained in:
parent
d0553759a0
commit
7e752364a6
|
@ -448,10 +448,15 @@ private RebaseResult processStep(RebaseTodoLine step, boolean shouldPick)
|
||||||
case REWORD:
|
case REWORD:
|
||||||
String oldMessage = commitToPick.getFullMessage();
|
String oldMessage = commitToPick.getFullMessage();
|
||||||
CleanupMode mode = commitConfig.resolve(CleanupMode.DEFAULT, true);
|
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)) {
|
try (Git git = new Git(repo)) {
|
||||||
newHead = git.commit().setMessage(newMessage).setAmend(true)
|
newHead = git.commit()
|
||||||
.setNoVerify(true).call();
|
.setMessage(newMessage)
|
||||||
|
.setAmend(true)
|
||||||
|
.setNoVerify(true)
|
||||||
|
.setInsertChangeId(doChangeId[0])
|
||||||
|
.call();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
case EDIT:
|
case EDIT:
|
||||||
|
@ -488,7 +493,7 @@ private RebaseResult processStep(RebaseTodoLine step, boolean shouldPick)
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String editCommitMessage(String message,
|
private String editCommitMessage(boolean[] doChangeId, String message,
|
||||||
@NonNull CleanupMode mode) {
|
@NonNull CleanupMode mode) {
|
||||||
String newMessage;
|
String newMessage;
|
||||||
CommitConfig.CleanupMode cleanup;
|
CommitConfig.CleanupMode cleanup;
|
||||||
|
@ -500,9 +505,11 @@ private String editCommitMessage(String message,
|
||||||
if (CleanupMode.DEFAULT.equals(cleanup)) {
|
if (CleanupMode.DEFAULT.equals(cleanup)) {
|
||||||
cleanup = mode;
|
cleanup = mode;
|
||||||
}
|
}
|
||||||
|
doChangeId[0] = modification.shouldAddChangeId();
|
||||||
} else {
|
} else {
|
||||||
newMessage = interactiveHandler.modifyCommitMessage(message);
|
newMessage = interactiveHandler.modifyCommitMessage(message);
|
||||||
cleanup = CommitConfig.CleanupMode.STRIP;
|
cleanup = CommitConfig.CleanupMode.STRIP;
|
||||||
|
doChangeId[0] = false;
|
||||||
}
|
}
|
||||||
return CommitConfig.cleanText(newMessage, cleanup, '#');
|
return CommitConfig.cleanText(newMessage, cleanup, '#');
|
||||||
}
|
}
|
||||||
|
@ -799,13 +806,17 @@ private RevCommit squashIntoPrevious(boolean sequenceContainsSquash,
|
||||||
}
|
}
|
||||||
try (Git git = new Git(repo)) {
|
try (Git git = new Git(repo)) {
|
||||||
if (isLast) {
|
if (isLast) {
|
||||||
|
boolean[] doChangeId = { false };
|
||||||
if (sequenceContainsSquash) {
|
if (sequenceContainsSquash) {
|
||||||
commitMessage = editCommitMessage(commitMessage,
|
commitMessage = editCommitMessage(doChangeId, commitMessage,
|
||||||
CleanupMode.STRIP);
|
CleanupMode.STRIP);
|
||||||
}
|
}
|
||||||
retNewHead = git.commit()
|
retNewHead = git.commit()
|
||||||
.setMessage(commitMessage)
|
.setMessage(commitMessage)
|
||||||
.setAmend(true).setNoVerify(true).call();
|
.setAmend(true)
|
||||||
|
.setNoVerify(true)
|
||||||
|
.setInsertChangeId(doChangeId[0])
|
||||||
|
.call();
|
||||||
rebaseState.getFile(MESSAGE_SQUASH).delete();
|
rebaseState.getFile(MESSAGE_SQUASH).delete();
|
||||||
rebaseState.getFile(MESSAGE_FIXUP).delete();
|
rebaseState.getFile(MESSAGE_FIXUP).delete();
|
||||||
} else {
|
} else {
|
||||||
|
@ -1730,6 +1741,16 @@ interface ModifyResult {
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
CleanupMode getCleanupMode();
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue