aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJukka Jokiniva <jukka.jokiniva@qt.io>2021-03-18 12:20:09 +0200
committerJukka Jokiniva <jukka.jokiniva@qt.io>2021-03-19 12:33:15 +0000
commit87ffa9478d23274a801eef7e248bd8125d3fcb3f (patch)
tree33259f90088f773e5be757c2511d8f8ae89e940d
parent86d40779ff1d8f45cadeb747213c8eebffcf6d2b (diff)
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ø <tor.arne.vestbo@qt.io>
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCherryPickPatch.java5
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApprove.java6
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtUtil.java35
-rw-r--r--src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApproveIT.java24
4 files changed, 50 insertions, 20 deletions
diff --git a/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCherryPickPatch.java b/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCherryPickPatch.java
index 35407f1..9cc158e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCherryPickPatch.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCherryPickPatch.java
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2019 The Qt Company
+// Copyright (C) 2021 The Qt Company
//
package com.googlesource.gerrit.plugins.qtcodereview;
@@ -120,7 +120,8 @@ public class QtCherryPickPatch {
} else {
logger.atInfo().log("qtcodereview: merge of merge created");
RevCommit commit =
- QtUtil.merge(committerIdent, git, oi, revWalk, commitToCherryPick, baseCommit, true);
+ QtUtil.merge(committerIdent, git, oi, revWalk, commitToCherryPick,
+ baseCommit, null, true);
cherryPickCommit = revWalk.parseCommit(commit);
logger.atInfo().log("qtcodereview: %s merged as %s", commitToCherryPick, cherryPickCommit);
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApprove.java b/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApprove.java
index 73d5b7c..f06bd58 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApprove.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApprove.java
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2020 The Qt Company
+// Copyright (C) 2021 The Qt Company
//
package com.googlesource.gerrit.plugins.qtcodereview;
@@ -237,8 +237,8 @@ class QtCommandBuildApprove extends SshCommand {
ObjectId oldId = git.resolve(destBranchKey.branch());
- Result result =
- QtUtil.mergeBranches(user.asIdentifiedUser(), git, buildBranchKey, destBranchKey);
+ Result result = QtUtil.mergeBranches(user.asIdentifiedUser(), git, buildBranchKey,
+ destBranchKey, "Merge integration " + buildBranch);
if (result != Result.FAST_FORWARD) {
message = "Unable to merge this integration because another integration parallel to this one "
diff --git a/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtUtil.java b/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtUtil.java
index 459c345..2fab2ce 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtUtil.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/qtcodereview/QtUtil.java
@@ -1,6 +1,6 @@
// Copyright (C) 2011 The Android Open Source Project
// Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
-// Copyright (C) 2020 The Qt Company
+// Copyright (C) 2021 The Qt Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -288,7 +288,7 @@ public class QtUtil {
return result;
}
- private String getChangeId(RevCommit commit) {
+ private static String getChangeId(RevCommit commit) {
List<String> changeIds = commit.getFooterLines(FooterConstants.CHANGE_ID);
String changeId = null;
if (!changeIds.isEmpty()) changeId = changeIds.get(0);
@@ -541,6 +541,7 @@ public class QtUtil {
RevWalk revWalk,
RevCommit toMerge,
RevCommit mergeTip,
+ String customCommitMessage,
boolean mergeAlways)
throws NoSuchRefException, IOException, MergeConflictException {
@@ -561,18 +562,20 @@ public class QtUtil {
return toMerge;
}
- String message;
- try {
- message = revWalk.parseCommit(toMerge).getShortMessage();
- } catch (Exception e) {
- message = toMerge.toString();
+ String message = customCommitMessage;
+ if (message == null) {
+ try {
+ message = revWalk.parseCommit(toMerge).getShortMessage();
+ } catch (Exception e) {
+ message = toMerge.toString();
+ }
+ message = "Merge \"" + toMerge.toString() + "\"";
}
- message = "Merge \"" + message + "\"";
final CommitBuilder mergeCommit = new CommitBuilder();
mergeCommit.setTreeId(merger.getResultTreeId());
mergeCommit.setParentIds(mergeTip, toMerge); // important: mergeTip must be parent index 0
- mergeCommit.setAuthor(toMerge.getAuthorIdent());
+ mergeCommit.setAuthor(committerIdent);
mergeCommit.setCommitter(committerIdent);
mergeCommit.setMessage(message);
@@ -585,17 +588,22 @@ public class QtUtil {
IdentifiedUser user,
Repository git,
final BranchNameKey branch,
- final BranchNameKey destination)
+ final BranchNameKey destination,
+ String customCommitMessage)
throws NoSuchRefException, IOException, MergeConflictException {
ObjectId srcId = git.resolve(branch.branch());
if (srcId == null) throw new NoSuchRefException("Invalid Revision: " + branch);
- return mergeObjectToBranch(user, git, srcId, destination);
+ return mergeObjectToBranch(user, git, srcId, destination, customCommitMessage);
}
private static RefUpdate.Result mergeObjectToBranch(
- IdentifiedUser user, Repository git, ObjectId srcId, final BranchNameKey destination)
+ IdentifiedUser user,
+ Repository git,
+ ObjectId srcId,
+ final BranchNameKey destination,
+ String customCommitMessage)
throws NoSuchRefException, IOException, MergeConflictException {
Ref destRef = git.getRefDatabase().getRef(destination.branch());
@@ -613,7 +621,8 @@ public class QtUtil {
PersonIdent committer =
user.newCommitterIdent(new Timestamp(System.currentTimeMillis()), TimeZone.getDefault());
- RevCommit mergeCommit = merge(committer, git, objInserter, revWalk, toMerge, mergeTip, false);
+ RevCommit mergeCommit = merge(committer, git, objInserter, revWalk, toMerge,
+ mergeTip, customCommitMessage, false);
logger.atInfo().log("qtcodereview: merge commit for %s added to %s", srcId, destination);
RefUpdate refUpdate = git.updateRef(destination.branch());
diff --git a/src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApproveIT.java b/src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApproveIT.java
index 29f09da..c95fc6f 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApproveIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtCommandBuildApproveIT.java
@@ -1,4 +1,4 @@
-// Copyright (C) 2019 The Qt Company
+// Copyright (C) 2021 The Qt Company
package com.googlesource.gerrit.plugins.qtcodereview;
@@ -168,16 +168,32 @@ public class QtCommandBuildApproveIT extends QtCodeReviewIT {
testRepo.reset(initialHead);
PushOneCommit.Result c3 = pushCommit("master", "commitmsg3", "file3", "content3");
approve(c3.getChangeId());
+ PushOneCommit.Result c4 = pushCommit("master", "commitmsg4", "file4", "content4");
+ approve(c4.getChangeId());
+ PushOneCommit.Result c5 = pushCommit("master", "commitmsg5", "file5", "content5");
+ approve(c5.getChangeId());
QtStage(c3);
+ QtStage(c4);
+ QtStage(c5);
QtNewBuild("master", "test-build-parallel-3");
RevCommit updatedHead = qtApproveBuild("master", "test-build-parallel-1", c1, false);
+ String commitMessage = updatedHead.getFullMessage();
+ assertThat(commitMessage).doesNotContain("Merge");
+
updatedHead = qtApproveBuild("master", "test-build-parallel-2", c2, true);
- updatedHead = qtApproveBuild("master", "test-build-parallel-3", c3, true);
+ commitMessage = updatedHead.getFullMessage();
+ assertThat(commitMessage).contains("Merge integration test-build-parallel-2");
+
+ updatedHead = qtApproveBuild("master", "test-build-parallel-3", c5, true);
+ commitMessage = updatedHead.getFullMessage();
+ assertThat(commitMessage).contains("Merge integration test-build-parallel-3");
assertStatusMerged(c1.getChange().change());
assertStatusMerged(c2.getChange().change());
assertStatusMerged(c3.getChange().change());
+ assertStatusMerged(c4.getChange().change());
+ assertStatusMerged(c5.getChange().change());
}
@Test
@@ -459,8 +475,12 @@ public class QtCommandBuildApproveIT extends QtCodeReviewIT {
if (expectMerge) {
assertThat(updatedHead.getParentCount()).isEqualTo(2);
assertCherryPick(updatedHead.getParent(1), expectedContent.getCommit(), null);
+ assertThat(updatedHead.getAuthorIdent().getEmailAddress()).isEqualTo(admin.email());
+ assertThat(updatedHead.getCommitterIdent().getEmailAddress()).isEqualTo(admin.email());
} else {
assertCherryPick(updatedHead, expectedContent.getCommit(), null);
+ assertThat(updatedHead.getAuthorIdent().getEmailAddress()).isEqualTo(user.email());
+ assertThat(updatedHead.getCommitterIdent().getEmailAddress()).isEqualTo(user.email());
}
RevCommit stagingHead = getRemoteRefHead(project, stagingRef);