Skip to content

Commit

Permalink
Add original description on cascading MR (#28)
Browse files Browse the repository at this point in the history
* If only 1 assignee (in case of community edition) use withAssigneeId

* Add previous description

* Fix tests

* Spotless

* Add debug log

* Manage case when mr could be null

* Add new line

* Add only original desc and not cascading

* Fix tests

* fancy desc

* replace iterator().next() with get(0) for list

* update documentation images to feature the new description style

---------

Co-authored-by: Fábio Pereira <[email protected]>
  • Loading branch information
kakawait and fbpe authored May 28, 2024
1 parent a216a79 commit 12999d4
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 7 deletions.
Binary file modified _documentation/src/docs/images/mr_error-case.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified _documentation/src/docs/images/mr_happy-case.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
57 changes: 50 additions & 7 deletions src/main/java/service/GitLabService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import java.util.Comparator;
import java.util.Deque;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.TreeMap;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -294,23 +296,60 @@ private MergeRequest createAutoMergeRequest(String gitlabEventUUID, Long project
}

private String buildDescription(String gitlabEventUUID, Long project, String sourceBranch, String targetBranch) {
StringBuilder descriptionBuilder = new StringBuilder("Automatic cascade merge request: ");
Deque<String> cascadedBranches = getCascadedBranches(gitlabEventUUID, project, sourceBranch, targetBranch);
StringBuilder descriptionBuilder = new StringBuilder(":twisted_rightwards_arrows: _Automatic cascade merge request_: ");
Long prevMergeRequestNumber = getPrevMergeRequestNumber(sourceBranch);
TreeMap<Long, MergeRequest> cascadedMrs = getCascadedMrs(gitlabEventUUID, project, prevMergeRequestNumber);
Deque<String> cascadedBranches = getCascadedBranches(gitlabEventUUID, project, sourceBranch, targetBranch, prevMergeRequestNumber, cascadedMrs);
for (String branch : cascadedBranches) {
descriptionBuilder.append(String.format("%s", branch));
}
if (!cascadedMrs.isEmpty()) {
descriptionBuilder.append("\n");
descriptionBuilder.append("\n");
descriptionBuilder.append("---");
descriptionBuilder.append("\n");
descriptionBuilder.append("\n");
descriptionBuilder.append("<details>");
descriptionBuilder.append("<summary>");
descriptionBuilder.append("<strong>");
descriptionBuilder.append(":notepad_spiral: Original description");
descriptionBuilder.append("</strong>");
descriptionBuilder.append("</summary>");
String prevDescription = cascadedMrs.firstEntry().getValue().getDescription();
descriptionBuilder.append(prevDescription);
descriptionBuilder.append("</details>");
}
return descriptionBuilder.toString();
}

private Deque<String> getCascadedBranches(String gitlabEventUUID, Long project, String sourceBranch, String targetBranch) {
private TreeMap<Long, MergeRequest> getCascadedMrs(String gitlabEventUUID, Long project, Long prevMergeRequestNumber) {
TreeMap<Long, MergeRequest> cascadedMrs = new TreeMap<>();
Long pastMrNumber = null;
Long currMrNumber = prevMergeRequestNumber;
while (currMrNumber != null && !currMrNumber.equals(pastMrNumber)) {
MergeRequest currMr = getMr(gitlabEventUUID, project, currMrNumber);
if (currMr != null) {
pastMrNumber = currMrNumber;
cascadedMrs.put(currMrNumber, currMr);
currMrNumber = getPrevMergeRequestNumber(currMr.getSourceBranch());
}
}

return cascadedMrs;
}

private Deque<String> getCascadedBranches(String gitlabEventUUID, Long project, String sourceBranch, String targetBranch, Long prevMergeRequestNumber, Map<Long, MergeRequest> cascadedMrs) {
Deque<String> cascadedBranches = new ArrayDeque<>();
final String separator = "-->";
final String separator = "";
cascadedBranches.push(formatCascadeElement(null, null, targetBranch));
Long pastMrNumber = null;
Long currMrNumber = getPrevMergeRequestNumber(sourceBranch);
Long currMrNumber = prevMergeRequestNumber;
cascadedBranches.push(formatCascadeElement(separator, null, sourceBranch));
while (currMrNumber != null && !currMrNumber.equals(pastMrNumber)) {
MergeRequest currMr = getMr(gitlabEventUUID, project, currMrNumber);
MergeRequest currMr = cascadedMrs.get(currMrNumber);
if (currMr == null) {
currMr = getMr(gitlabEventUUID, project, currMrNumber);
}
if (currMr != null) {
pastMrNumber = currMrNumber;
String itBranch = currMr.getSourceBranch();
Expand Down Expand Up @@ -431,7 +470,11 @@ private MergeRequest assignMrToCascadeResponsible(String gitlabEventUUID, MergeR
Log.infof("GitlabEvent: '%s' | Assigning MR '!%d' to cascade responsible(s) with id(s): '%s'", gitlabEventUUID, mrNumber, cascadeResponsibleIds);
try {
MergeRequestParams mrParams = new MergeRequestParams();
mrParams.withAssigneeIds(cascadeResponsibleIds);
if (cascadeResponsibleIds.size() > 1) {
mrParams.withAssigneeIds(cascadeResponsibleIds);
} else {
mrParams.withAssigneeId(cascadeResponsibleIds.get(0));
}
mr = gitlab.getMergeRequestApi().updateMergeRequest(project, mrNumber, mrParams);
} catch (GitLabApiException e) {
Log.warnf(e, "GitlabEvent: '%s' | MR '!%d' cannot change the assignee to user %d", gitlabEventUUID, mrNumber, cascadeResponsibleIds);
Expand Down

0 comments on commit 12999d4

Please sign in to comment.