Add ability to detect cross-project patches dependency
This patch adds ability to detect cross-project patches dependency
based on 'Depends-On: https://gerrit_address/_CHANGE_NUMBER_' key
phrase in commit message.
Change-Id: I5e65aae893a60b1c35d1c34046e9c478f330a1c4
Related-bug: PROD-23448
diff --git a/src/com/mirantis/mk/Gerrit.groovy b/src/com/mirantis/mk/Gerrit.groovy
index 7087118..e69c189 100644
--- a/src/com/mirantis/mk/Gerrit.groovy
+++ b/src/com/mirantis/mk/Gerrit.groovy
@@ -280,3 +280,34 @@
ssh.ensureKnownHosts(gerritHost)
ssh.agentSh(String.format("ssh -p 29418 %s@%s gerrit review %s,%s -m \"'%s'\" --code-review 0", gerritName, gerritHost, gerritChangeNumber, gerritPatchSetNumber, message))
}
+
+/**
+ * Return map of dependent patches info for current patch set
+ * based on commit message hints: Depends-On: https://gerrit_address/_CHANGE_NUMBER_
+ * @param changeInfo Map Info about current patch set, such as:
+ * gerritName Gerrit user name (usually GERRIT_NAME property)
+ * gerritHost Gerrit host (usually GERRIT_HOST property)
+ * gerritChangeNumber Gerrit change number (usually GERRIT_CHANGE_NUMBER property)
+ * credentialsId Jenkins credentials id for gerrit
+ * @return map of dependent patches info
+ */
+LinkedHashMap getDependentPatches(LinkedHashMap changeInfo) {
+ def dependentPatches = [:]
+ def currentChange = getGerritChange(changeInfo.gerritName, changeInfo.gerritHost, changeInfo.gerritChangeNumber, changeInfo.credentialsId, true)
+ def dependentCommits = currentChange.commitMessage.tokenize('\n').findAll { it ==~ /Depends-On: \b[^ ]+\b/ }
+ if (dependentCommits) {
+ dependentCommits.each { commit ->
+ def patchLink = commit.tokenize(' ')[1]
+ def changeNumber = patchLink.tokenize('/')[-1].trim()
+ def dependentCommit = getGerritChange(changeInfo.gerritName, changeInfo.gerritHost, changeNumber, changeInfo.credentialsId, true)
+ if (dependentCommit.status == "NEW") {
+ dependentPatches[dependentCommit.project] = [
+ 'number': dependentCommit.number,
+ 'ref': dependentCommit.currentPatchSet.ref,
+ 'branch': dependentCommit.branch,
+ ]
+ }
+ }
+ }
+ return dependentPatches
+}