Allow a different conflict message for manifest. Stuff like "repo download" that might work on most projects doesn't work on manifest projects, so adding the option for a different message on conflict so different instructions can be posted to users. Change-Id: Icca4099a5ae875d254ab229d6231b1814a6d928e
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java index a3c5e18..41c1bf5 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java +++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
@@ -165,6 +165,20 @@ } /** + * Returns a string to append to the end of the merge conflict message for the manifest project. + * + * @return The message string, or the empty string if nothing is specified. + * @throws ConfigInvalidException + */ + public String getManifestConflictMessage() throws ConfigInvalidException { + String conflictMessage = getConfig().getString("global", null, "manifestConflictMessage"); + if (Strings.isNullOrEmpty(conflictMessage)) { + conflictMessage = getConflictMessage(); + } + return conflictMessage; + } + + /** * Get the projects that should be merged for the given pair of branches. * * @param fromBranch Branch we are merging from. @@ -293,6 +307,19 @@ return user.get().getAccountId(); } + /** + * Returns overriden manifest config if specified, default if not + * @return The string name of the manifest project. + * @throws ConfigInvalidException + */ + public String getManifestProject() throws ConfigInvalidException { + String manifestProject = getConfig().getString("global", null, "manifestProject"); + if (manifestProject == null) { + throw new ConfigInvalidException("manifestProject not specified."); + } + return manifestProject; + } + // Returns overriden manifest config if specified, default if not private String getManifestFile() throws ConfigInvalidException { String manifestFile = getConfig().getString("global", null, "manifestFile"); @@ -302,15 +329,6 @@ return manifestFile; } - // Returns overriden manifest config if specified, default if not - private String getManifestProject() throws ConfigInvalidException { - String manifestProject = getConfig().getString("global", null, "manifestProject"); - if (manifestProject == null) { - throw new ConfigInvalidException("manifestProject not specified."); - } - return manifestProject; - } - // Returns contents of manifest file for the given branch pair // If manifest does not exist, return empty set. private Set<String> getManifestProjects(String fromBranch, String toBranch)
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java index 070b9b7..d2b29c9 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java +++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
@@ -412,6 +412,10 @@ } if (!failedMergeBranchMap.isEmpty()) { + String conflictMessage = config.getConflictMessage(); + if (mdsMergeInput.project.equals(config.getManifestProject())) { + conflictMessage = config.getManifestConflictMessage(); + } throw new FailedMergeException( failedMergeBranchMap, mdsMergeInput.currentRevision, @@ -419,7 +423,7 @@ mdsMergeInput.project, mdsMergeInput.changeNumber, mdsMergeInput.patchsetNumber, - config.getConflictMessage(), + conflictMessage, mdsMergeInput.topic); } }
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md index a1752b1..6e629b3 100644 --- a/src/main/resources/Documentation/config.md +++ b/src/main/resources/Documentation/config.md
@@ -10,6 +10,7 @@ hostName = https://hostname.example.com conflictMessage = Merge conflict found on ${branch}\n\ " # Example of multiline conflict message" + manifestConflictMessage = Conflict found on platform/manifest manifestProject = platform/manifest manifestFile = default.xml alwaysBlankMerge = .*SKIP ME ALWAYS.* @@ -71,6 +72,12 @@ conflictMessage = Conflict message ${conflict} found on branch ${branch} ``` +global.manifestConflictMessage +: Like conflictMessage, but only applies to the manifestProject. + + Some messages on normal projects don't apply to manifest projects. This + provides users the option to have a different message for manifest projects. + global.manifestProject : Project to look for a [repo manifest][1] in.
diff --git a/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java b/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java index d20f878..0235cd8 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/automerger/ConfigLoaderIT.java
@@ -222,6 +222,20 @@ } @Test + public void getDefaultManifestConflictMessageTest() throws Exception { + defaultSetup("automerger.config"); + assertThat(configLoader.getManifestConflictMessage()) + .isEqualTo("Merge conflict found on ${branch}"); + } + + @Test + public void getMultilineManifestConflictMessageTest() throws Exception { + defaultSetup("alternate.config"); + assertThat(configLoader.getManifestConflictMessage()) + .isEqualTo("mline1\n" + "mline2\n" + "mline3 ${branch}\n" + "mline4"); + } + + @Test public void getMinAutomergeVoteTest() throws Exception { defaultSetup("alternate.config"); assertThat(configLoader.getMinAutomergeVote()).isEqualTo(-3);
diff --git a/src/test/resources/com/googlesource/gerrit/plugins/automerger/alternate.config b/src/test/resources/com/googlesource/gerrit/plugins/automerger/alternate.config index 19d69c1..80b7bb6 100644 --- a/src/test/resources/com/googlesource/gerrit/plugins/automerger/alternate.config +++ b/src/test/resources/com/googlesource/gerrit/plugins/automerger/alternate.config
@@ -18,4 +18,8 @@ line2\n\ line3 ${branch}\n\ line4 + manifestConflictMessage = mline1\n\ +mline2\n\ +mline3 ${branch}\n\ +mline4 missingDownstreamsMessage = there is no ${missingDownstreams} \ No newline at end of file