James Moger
2014-10-31 4a2fb11479c9b53ffe4e2e1cca82205ca122753b
Gracefully handle missing integration branch in ticket page
5 files modified
28 ■■■■ changed files
releases.moxie 4 ●●● patch | view | raw | blame | history
src/main/java/com/gitblit/utils/JGitUtils.java 16 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties 1 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/TicketPage.html 1 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/TicketPage.java 6 ●●●●● patch | view | raw | blame | history
releases.moxie
@@ -14,7 +14,8 @@
          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)
@@ -37,6 +38,7 @@
    - Alex Lewis
    - Florian Zschocke
    - Paul Martin
    - razzard
}
#
src/main/java/com/gitblit/utils/JGitUtils.java
@@ -2270,7 +2270,7 @@
    }
    public static enum MergeStatus {
        NOT_MERGEABLE, FAILED, ALREADY_MERGED, MERGEABLE, MERGED;
        MISSING_INTEGRATION_BRANCH, MISSING_SRC_BRANCH, NOT_MERGEABLE, FAILED, ALREADY_MERGED, MERGEABLE, MERGED;
    }
    /**
@@ -2286,8 +2286,16 @@
        RevWalk revWalk = null;
        try {
            revWalk = new RevWalk(repository);
            RevCommit branchTip = revWalk.lookupCommit(repository.resolve(toBranch));
            RevCommit srcTip = revWalk.lookupCommit(repository.resolve(src));
            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;
@@ -2300,6 +2308,8 @@
            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 {
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
@@ -749,3 +749,4 @@
gb.sortLowestPriority = lowest priority
gb.sortHighestSeverity = highest severity
gb.sortLowestSeverity = lowest severity
gb.missingIntegrationBranchMore = The target integration branch does not exist in the repository!
src/main/java/com/gitblit/wicket/pages/TicketPage.html
@@ -557,7 +557,6 @@
    </div>
</wicket:fragment>
<!-- VETOED PATCHSET FRAGMENT -->
<wicket:fragment wicket:id="vetoedFragment">
    <div class="alert alert-error submit-info" style="padding:4px;">
src/main/java/com/gitblit/wicket/pages/TicketPage.java
@@ -1430,6 +1430,12 @@
                // patchset already merged
                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