design.
''
security: ~
- fixes: ~
+ fixes:
+ - Fix exception when viewing a ticket with a patchset where the integration branch does not exist (issue-521, ticket-212)
changes:
- Replaced Dagger with Guice (ticket-80)
- Use release name as root directory in Gitblit GO artifacts (ticket-109)
- Alex Lewis
- Florian Zschocke
- Paul Martin
+ - razzard
}
#
}
public static enum MergeStatus {
- NOT_MERGEABLE, FAILED, ALREADY_MERGED, MERGEABLE, MERGED;
+ MISSING_INTEGRATION_BRANCH, MISSING_SRC_BRANCH, NOT_MERGEABLE, FAILED, ALREADY_MERGED, MERGEABLE, MERGED;
}
/**
public static MergeStatus canMerge(Repository repository, String src, String toBranch) {
RevWalk revWalk = null;
try {
- revWalk = new RevWalk(repository);
- RevCommit branchTip = revWalk.lookupCommit(repository.resolve(toBranch));
- RevCommit srcTip = revWalk.lookupCommit(repository.resolve(src));
+ revWalk = new RevWalk(repository);\r
+ ObjectId branchId = repository.resolve(toBranch);\r
+ if (branchId == null) {\r
+ return MergeStatus.MISSING_INTEGRATION_BRANCH;\r
+ }\r
+ ObjectId srcId = repository.resolve(src);\r
+ if (srcId == null) {\r
+ return MergeStatus.MISSING_SRC_BRANCH;\r
+ }\r
+ RevCommit branchTip = revWalk.lookupCommit(branchId);
+ RevCommit srcTip = revWalk.lookupCommit(srcId);
if (revWalk.isMergedInto(srcTip, branchTip)) {
// already merged
return MergeStatus.ALREADY_MERGED;
if (canMerge) {
return MergeStatus.MERGEABLE;
}
+ } catch (NullPointerException e) {\r
+ LOGGER.error("Failed to determine canMerge", e);\r
} catch (IOException e) {
LOGGER.error("Failed to determine canMerge", e);
} finally {\r
gb.sortLowestPriority = lowest priority
gb.sortHighestSeverity = highest severity
gb.sortLowestSeverity = lowest severity
+gb.missingIntegrationBranchMore = The target integration branch does not exist in the repository!
\ No newline at end of file
</div>\r
</wicket:fragment>\r
\r
-\r
<!-- VETOED PATCHSET FRAGMENT -->\r
<wicket:fragment wicket:id="vetoedFragment">\r
<div class="alert alert-error submit-info" style="padding:4px;">\r
* TICKET METADATA\r
*/\r
add(new Label("ticketType", ticket.type.toString()));\r
- \r
+\r
add(new Label("priority", ticket.priority.toString()));\r
add(new Label("severity", ticket.severity.toString()));\r
- \r
+\r
if (StringUtils.isEmpty(ticket.topic)) {\r
add(new Label("ticketTopic").setVisible(false));\r
} else {\r
String safeTopic = app().xssFilter().relaxed(topic);\r
add(new Label("ticketTopic", safeTopic).setEscapeModelStrings(false));\r
}\r
- \r
- \r
+\r
+\r
\r
\r
/*\r
Fragment mergePanel = new Fragment("mergePanel", "alreadyMergedFragment", this);\r
mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetAlreadyMerged"), ticket.mergeTo)));\r
return mergePanel;\r
+ } else if (MergeStatus.MISSING_INTEGRATION_BRANCH == mergeStatus) {\r
+ // target/integration branch is missing\r
+ Fragment mergePanel = new Fragment("mergePanel", "notMergeableFragment", this);\r
+ mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetNotMergeable"), ticket.mergeTo)));\r
+ mergePanel.add(new Label("mergeMore", MessageFormat.format(getString("gb.missingIntegrationBranchMore"), ticket.mergeTo)));\r
+ return mergePanel;\r
} else {\r
// patchset can not be cleanly merged\r
Fragment mergePanel = new Fragment("mergePanel", "notMergeableFragment", this);\r