Merge "PutMessage: automatically add Change-Id if requireChangeId is set"
This commit is contained in:
@@ -849,8 +849,10 @@ returned that describes the resulting change.
|
|||||||
Creates a new patch set with a new commit message.
|
Creates a new patch set with a new commit message.
|
||||||
|
|
||||||
The new commit message must be provided in the request body inside a
|
The new commit message must be provided in the request body inside a
|
||||||
link:#commit-message-input[CommitMessageInput] entity and contain the change ID footer if
|
link:#commit-message-input[CommitMessageInput] entity. If a Change-Id
|
||||||
link:project-configuration.html#require-change-id[Require Change-Id] was specified.
|
footer is specified, it must match the current Change-Id footer. If
|
||||||
|
the Change-Id footer is absent, the current Change-Id is added to the
|
||||||
|
message.
|
||||||
|
|
||||||
.Request
|
.Request
|
||||||
----
|
----
|
||||||
|
|||||||
@@ -111,8 +111,11 @@ public class PutMessage
|
|||||||
String sanitizedCommitMessage = CommitMessageUtil.checkAndSanitizeCommitMessage(input.message);
|
String sanitizedCommitMessage = CommitMessageUtil.checkAndSanitizeCommitMessage(input.message);
|
||||||
|
|
||||||
ensureCanEditCommitMessage(resource.getNotes());
|
ensureCanEditCommitMessage(resource.getNotes());
|
||||||
|
sanitizedCommitMessage =
|
||||||
ensureChangeIdIsCorrect(
|
ensureChangeIdIsCorrect(
|
||||||
projectCache.checkedGet(resource.getProject()).is(BooleanProjectConfig.REQUIRE_CHANGE_ID),
|
projectCache
|
||||||
|
.checkedGet(resource.getProject())
|
||||||
|
.is(BooleanProjectConfig.REQUIRE_CHANGE_ID),
|
||||||
resource.getChange().getKey().get(),
|
resource.getChange().getKey().get(),
|
||||||
sanitizedCommitMessage);
|
sanitizedCommitMessage);
|
||||||
|
|
||||||
@@ -193,7 +196,7 @@ public class PutMessage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ensureChangeIdIsCorrect(
|
private static String ensureChangeIdIsCorrect(
|
||||||
boolean requireChangeId, String currentChangeId, String newCommitMessage)
|
boolean requireChangeId, String currentChangeId, String newCommitMessage)
|
||||||
throws ResourceConflictException, BadRequestException {
|
throws ResourceConflictException, BadRequestException {
|
||||||
RevCommit revCommit =
|
RevCommit revCommit =
|
||||||
@@ -204,14 +207,21 @@ public class PutMessage
|
|||||||
CommitMessageUtil.checkAndSanitizeCommitMessage(revCommit.getShortMessage());
|
CommitMessageUtil.checkAndSanitizeCommitMessage(revCommit.getShortMessage());
|
||||||
|
|
||||||
List<String> changeIdFooters = revCommit.getFooterLines(FooterConstants.CHANGE_ID);
|
List<String> changeIdFooters = revCommit.getFooterLines(FooterConstants.CHANGE_ID);
|
||||||
if (requireChangeId && changeIdFooters.isEmpty()) {
|
|
||||||
throw new ResourceConflictException("missing Change-Id footer");
|
|
||||||
}
|
|
||||||
if (!changeIdFooters.isEmpty() && !changeIdFooters.get(0).equals(currentChangeId)) {
|
if (!changeIdFooters.isEmpty() && !changeIdFooters.get(0).equals(currentChangeId)) {
|
||||||
throw new ResourceConflictException("wrong Change-Id footer");
|
throw new ResourceConflictException("wrong Change-Id footer");
|
||||||
}
|
}
|
||||||
if (changeIdFooters.size() > 1) {
|
|
||||||
|
if (requireChangeId && revCommit.getFooterLines().isEmpty()) {
|
||||||
|
// sanitization always adds '\n' at the end.
|
||||||
|
newCommitMessage += "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requireChangeId && changeIdFooters.isEmpty()) {
|
||||||
|
newCommitMessage += FooterConstants.CHANGE_ID.getName() + ": " + currentChangeId + "\n";
|
||||||
|
} else if (changeIdFooters.size() > 1) {
|
||||||
throw new ResourceConflictException("multiple Change-Id footers");
|
throw new ResourceConflictException("multiple Change-Id footers");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return newCommitMessage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3861,15 +3861,13 @@ public class ChangeIT extends AbstractDaemonTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void changeCommitMessageWithNoChangeIdFails() throws Exception {
|
public void changeCommitMessageWithNoChangeIdRetainsChangeID() throws Exception {
|
||||||
PushOneCommit.Result r = createChange();
|
PushOneCommit.Result r = createChange();
|
||||||
assertThat(getCommitMessage(r.getChangeId()))
|
assertThat(getCommitMessage(r.getChangeId()))
|
||||||
.isEqualTo("test commit\n\nChange-Id: " + r.getChangeId() + "\n");
|
.isEqualTo("test commit\n\nChange-Id: " + r.getChangeId() + "\n");
|
||||||
ResourceConflictException thrown =
|
gApi.changes().id(r.getChangeId()).setMessage("modified commit\n");
|
||||||
assertThrows(
|
assertThat(getCommitMessage(r.getChangeId()))
|
||||||
ResourceConflictException.class,
|
.isEqualTo("modified commit\n\nChange-Id: " + r.getChangeId() + "\n");
|
||||||
() -> gApi.changes().id(r.getChangeId()).setMessage("modified commit\n"));
|
|
||||||
assertThat(thrown).hasMessageThat().contains("missing Change-Id footer");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user