Merged #212 "Gracefully handle missing integration branch in ticket page"
| | |
| | | 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);
|
| | | ObjectId branchId = repository.resolve(toBranch);
|
| | | if (branchId == null) {
|
| | | return MergeStatus.MISSING_INTEGRATION_BRANCH;
|
| | | }
|
| | | ObjectId srcId = repository.resolve(src);
|
| | | if (srcId == null) {
|
| | | return MergeStatus.MISSING_SRC_BRANCH;
|
| | | }
|
| | | 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) {
|
| | | LOGGER.error("Failed to determine canMerge", e);
|
| | | } catch (IOException e) { |
| | | LOGGER.error("Failed to determine canMerge", e); |
| | | } finally {
|
| | |
| | | gb.sortLowestPriority = lowest priority |
| | | gb.sortHighestSeverity = highest severity |
| | | gb.sortLowestSeverity = lowest severity |
| | | gb.missingIntegrationBranchMore = The target integration branch does not exist in the repository! |
| | |
| | | </div>
|
| | | </wicket:fragment>
|
| | |
|
| | |
|
| | | <!-- VETOED PATCHSET FRAGMENT -->
|
| | | <wicket:fragment wicket:id="vetoedFragment">
|
| | | <div class="alert alert-error submit-info" style="padding:4px;">
|
| | |
| | | * TICKET METADATA
|
| | | */
|
| | | add(new Label("ticketType", ticket.type.toString()));
|
| | | |
| | |
|
| | | add(new Label("priority", ticket.priority.toString()));
|
| | | add(new Label("severity", ticket.severity.toString()));
|
| | | |
| | |
|
| | | if (StringUtils.isEmpty(ticket.topic)) {
|
| | | add(new Label("ticketTopic").setVisible(false));
|
| | | } else {
|
| | |
| | | String safeTopic = app().xssFilter().relaxed(topic);
|
| | | add(new Label("ticketTopic", safeTopic).setEscapeModelStrings(false));
|
| | | }
|
| | | |
| | | |
| | |
|
| | |
|
| | |
|
| | |
|
| | | /*
|
| | |
| | | Fragment mergePanel = new Fragment("mergePanel", "alreadyMergedFragment", this);
|
| | | mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetAlreadyMerged"), ticket.mergeTo)));
|
| | | return mergePanel;
|
| | | } else if (MergeStatus.MISSING_INTEGRATION_BRANCH == mergeStatus) {
|
| | | // target/integration branch is missing
|
| | | Fragment mergePanel = new Fragment("mergePanel", "notMergeableFragment", this);
|
| | | mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetNotMergeable"), ticket.mergeTo)));
|
| | | mergePanel.add(new Label("mergeMore", MessageFormat.format(getString("gb.missingIntegrationBranchMore"), ticket.mergeTo)));
|
| | | return mergePanel;
|
| | | } else {
|
| | | // patchset can not be cleanly merged
|
| | | Fragment mergePanel = new Fragment("mergePanel", "notMergeableFragment", this);
|