diff options
author | Jukka Jokiniva <jukka.jokiniva@qt.io> | 2021-03-18 12:20:09 +0200 |
---|---|---|
committer | Jukka Jokiniva <jukka.jokiniva@qt.io> | 2021-03-19 12:33:15 +0000 |
commit | 87ffa9478d23274a801eef7e248bd8125d3fcb3f (patch) | |
tree | 33259f90088f773e5be757c2511d8f8ae89e940d | |
parent | 86d40779ff1d8f45cadeb747213c8eebffcf6d2b (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>
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); |