Skip to content

Commit 87ffa94

Browse files
committed
Fix integration merge commit message and author
Merges initiated from parallel builds now generate a proper commit message reflecting that it's an integration of possibly several commits. Also author of the merge commit will be the ci bot, which is initiating the merge. Fixes: QTQAINFRA-4346 Change-Id: I69d507979c58cc49bd0117e3d57f49b9e834601a Reviewed-by: Tor Arne Vestbø <[email protected]>
1 parent 86d4077 commit 87ffa94

File tree

4 files changed

+50
-20
lines changed

4 files changed

+50
-20
lines changed

src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCherryPickPatch.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// Copyright (C) 2019 The Qt Company
2+
// Copyright (C) 2021 The Qt Company
33
//
44

55
package com.googlesource.gerrit.plugins.qtcodereview;
@@ -120,7 +120,8 @@ public CodeReviewCommit cherryPickPatch(
120120
} else {
121121
logger.atInfo().log("qtcodereview: merge of merge created");
122122
RevCommit commit =
123-
QtUtil.merge(committerIdent, git, oi, revWalk, commitToCherryPick, baseCommit, true);
123+
QtUtil.merge(committerIdent, git, oi, revWalk, commitToCherryPick,
124+
baseCommit, null, true);
124125
cherryPickCommit = revWalk.parseCommit(commit);
125126
logger.atInfo().log("qtcodereview: %s merged as %s", commitToCherryPick, cherryPickCommit);
126127
}

src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApprove.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// Copyright (C) 2020 The Qt Company
2+
// Copyright (C) 2021 The Qt Company
33
//
44

55
package com.googlesource.gerrit.plugins.qtcodereview;
@@ -237,8 +237,8 @@ private void approveBuildChanges()
237237

238238
ObjectId oldId = git.resolve(destBranchKey.branch());
239239

240-
Result result =
241-
QtUtil.mergeBranches(user.asIdentifiedUser(), git, buildBranchKey, destBranchKey);
240+
Result result = QtUtil.mergeBranches(user.asIdentifiedUser(), git, buildBranchKey,
241+
destBranchKey, "Merge integration " + buildBranch);
242242

243243
if (result != Result.FAST_FORWARD) {
244244
message = "Unable to merge this integration because another integration parallel to this one "

src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtUtil.java

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Copyright (C) 2011 The Android Open Source Project
22
// Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
3-
// Copyright (C) 2020 The Qt Company
3+
// Copyright (C) 2021 The Qt Company
44
//
55
// Licensed under the Apache License, Version 2.0 (the "License");
66
// you may not use this file except in compliance with the License.
@@ -288,7 +288,7 @@ public static Result updateRef(
288288
return result;
289289
}
290290

291-
private String getChangeId(RevCommit commit) {
291+
private static String getChangeId(RevCommit commit) {
292292
List<String> changeIds = commit.getFooterLines(FooterConstants.CHANGE_ID);
293293
String changeId = null;
294294
if (!changeIds.isEmpty()) changeId = changeIds.get(0);
@@ -541,6 +541,7 @@ public static RevCommit merge(
541541
RevWalk revWalk,
542542
RevCommit toMerge,
543543
RevCommit mergeTip,
544+
String customCommitMessage,
544545
boolean mergeAlways)
545546
throws NoSuchRefException, IOException, MergeConflictException {
546547

@@ -561,18 +562,20 @@ public static RevCommit merge(
561562
return toMerge;
562563
}
563564

564-
String message;
565-
try {
566-
message = revWalk.parseCommit(toMerge).getShortMessage();
567-
} catch (Exception e) {
568-
message = toMerge.toString();
565+
String message = customCommitMessage;
566+
if (message == null) {
567+
try {
568+
message = revWalk.parseCommit(toMerge).getShortMessage();
569+
} catch (Exception e) {
570+
message = toMerge.toString();
571+
}
572+
message = "Merge \"" + toMerge.toString() + "\"";
569573
}
570-
message = "Merge \"" + message + "\"";
571574

572575
final CommitBuilder mergeCommit = new CommitBuilder();
573576
mergeCommit.setTreeId(merger.getResultTreeId());
574577
mergeCommit.setParentIds(mergeTip, toMerge); // important: mergeTip must be parent index 0
575-
mergeCommit.setAuthor(toMerge.getAuthorIdent());
578+
mergeCommit.setAuthor(committerIdent);
576579
mergeCommit.setCommitter(committerIdent);
577580
mergeCommit.setMessage(message);
578581

@@ -585,17 +588,22 @@ public static RefUpdate.Result mergeBranches(
585588
IdentifiedUser user,
586589
Repository git,
587590
final BranchNameKey branch,
588-
final BranchNameKey destination)
591+
final BranchNameKey destination,
592+
String customCommitMessage)
589593
throws NoSuchRefException, IOException, MergeConflictException {
590594

591595
ObjectId srcId = git.resolve(branch.branch());
592596
if (srcId == null) throw new NoSuchRefException("Invalid Revision: " + branch);
593597

594-
return mergeObjectToBranch(user, git, srcId, destination);
598+
return mergeObjectToBranch(user, git, srcId, destination, customCommitMessage);
595599
}
596600

597601
private static RefUpdate.Result mergeObjectToBranch(
598-
IdentifiedUser user, Repository git, ObjectId srcId, final BranchNameKey destination)
602+
IdentifiedUser user,
603+
Repository git,
604+
ObjectId srcId,
605+
final BranchNameKey destination,
606+
String customCommitMessage)
599607
throws NoSuchRefException, IOException, MergeConflictException {
600608

601609
Ref destRef = git.getRefDatabase().getRef(destination.branch());
@@ -613,7 +621,8 @@ private static RefUpdate.Result mergeObjectToBranch(
613621
PersonIdent committer =
614622
user.newCommitterIdent(new Timestamp(System.currentTimeMillis()), TimeZone.getDefault());
615623

616-
RevCommit mergeCommit = merge(committer, git, objInserter, revWalk, toMerge, mergeTip, false);
624+
RevCommit mergeCommit = merge(committer, git, objInserter, revWalk, toMerge,
625+
mergeTip, customCommitMessage, false);
617626
logger.atInfo().log("qtcodereview: merge commit for %s added to %s", srcId, destination);
618627

619628
RefUpdate refUpdate = git.updateRef(destination.branch());

src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApproveIT.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2019 The Qt Company
1+
// Copyright (C) 2021 The Qt Company
22

33
package com.googlesource.gerrit.plugins.qtcodereview;
44

@@ -168,16 +168,32 @@ public void parallelBuilds_MergeCommitVerify() throws Exception {
168168
testRepo.reset(initialHead);
169169
PushOneCommit.Result c3 = pushCommit("master", "commitmsg3", "file3", "content3");
170170
approve(c3.getChangeId());
171+
PushOneCommit.Result c4 = pushCommit("master", "commitmsg4", "file4", "content4");
172+
approve(c4.getChangeId());
173+
PushOneCommit.Result c5 = pushCommit("master", "commitmsg5", "file5", "content5");
174+
approve(c5.getChangeId());
171175
QtStage(c3);
176+
QtStage(c4);
177+
QtStage(c5);
172178
QtNewBuild("master", "test-build-parallel-3");
173179

174180
RevCommit updatedHead = qtApproveBuild("master", "test-build-parallel-1", c1, false);
181+
String commitMessage = updatedHead.getFullMessage();
182+
assertThat(commitMessage).doesNotContain("Merge");
183+
175184
updatedHead = qtApproveBuild("master", "test-build-parallel-2", c2, true);
176-
updatedHead = qtApproveBuild("master", "test-build-parallel-3", c3, true);
185+
commitMessage = updatedHead.getFullMessage();
186+
assertThat(commitMessage).contains("Merge integration test-build-parallel-2");
187+
188+
updatedHead = qtApproveBuild("master", "test-build-parallel-3", c5, true);
189+
commitMessage = updatedHead.getFullMessage();
190+
assertThat(commitMessage).contains("Merge integration test-build-parallel-3");
177191

178192
assertStatusMerged(c1.getChange().change());
179193
assertStatusMerged(c2.getChange().change());
180194
assertStatusMerged(c3.getChange().change());
195+
assertStatusMerged(c4.getChange().change());
196+
assertStatusMerged(c5.getChange().change());
181197
}
182198

183199
@Test
@@ -459,8 +475,12 @@ private RevCommit qtApproveBuild(
459475
if (expectMerge) {
460476
assertThat(updatedHead.getParentCount()).isEqualTo(2);
461477
assertCherryPick(updatedHead.getParent(1), expectedContent.getCommit(), null);
478+
assertThat(updatedHead.getAuthorIdent().getEmailAddress()).isEqualTo(admin.email());
479+
assertThat(updatedHead.getCommitterIdent().getEmailAddress()).isEqualTo(admin.email());
462480
} else {
463481
assertCherryPick(updatedHead, expectedContent.getCommit(), null);
482+
assertThat(updatedHead.getAuthorIdent().getEmailAddress()).isEqualTo(user.email());
483+
assertThat(updatedHead.getCommitterIdent().getEmailAddress()).isEqualTo(user.email());
464484
}
465485

466486
RevCommit stagingHead = getRemoteRefHead(project, stagingRef);

0 commit comments

Comments
 (0)