]> source.dussan.org Git - gitblit.git/commitdiff
Gracefully handle missing integration branch in ticket page 12/212/1
authorJames Moger <james.moger@gitblit.com>
Fri, 31 Oct 2014 13:08:37 +0000 (09:08 -0400)
committerJames Moger <james.moger@gitblit.com>
Fri, 31 Oct 2014 13:08:37 +0000 (09:08 -0400)
releases.moxie
src/main/java/com/gitblit/utils/JGitUtils.java
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
src/main/java/com/gitblit/wicket/pages/TicketPage.html
src/main/java/com/gitblit/wicket/pages/TicketPage.java

index 145ea77f514f8073cce4b86f67978c89bdb6f5e0..5fead38dec8be12aaa371d7f7576ed0887870a8f 100644 (file)
@@ -14,7 +14,8 @@ r27: {
           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 @@ r27: {
     - Alex Lewis
     - Florian Zschocke
     - Paul Martin
+    - razzard
 }
 
 #
index da51ea98695e6bea4e88e02d444987000a390a09..68c62ead110acb8e39f6e88538acdaca209288cf 100644 (file)
@@ -2270,7 +2270,7 @@ public class JGitUtils {
        }
 
        public static enum MergeStatus {
-               NOT_MERGEABLE, FAILED, ALREADY_MERGED, MERGEABLE, MERGED;
+               MISSING_INTEGRATION_BRANCH, MISSING_SRC_BRANCH, NOT_MERGEABLE, FAILED, ALREADY_MERGED, MERGEABLE, MERGED;
        }
 
        /**
@@ -2285,9 +2285,17 @@ public class JGitUtils {
        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;
@@ -2300,6 +2308,8 @@ public class JGitUtils {
                        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
index 5326042a42416a003d884b942ad4e01b145a4cee..ce7b52290ad5d101b63240a48330e4c8ff43290a 100644 (file)
@@ -749,3 +749,4 @@ gb.sortHighestPriority = highest priority
 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
index f3c6b2a8f1e58794edf276c330b3cbc5e464cac7..5ae005ebbfec3d8ef707834a89da75d41f4f5298 100644 (file)
@@ -557,7 +557,6 @@ pt push</pre>
        </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
index b140bfca718b4516606cfb893ab48fb2b76cec39..4890874ac050c270640799f65fbf43c7208c2120 100644 (file)
@@ -519,10 +519,10 @@ public class TicketPage extends RepositoryPage {
                 * 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
@@ -531,8 +531,8 @@ public class TicketPage extends RepositoryPage {
                        String safeTopic = app().xssFilter().relaxed(topic);\r
                        add(new Label("ticketTopic", safeTopic).setEscapeModelStrings(false));\r
                }\r
-               \r
-               \r
+\r
+\r
 \r
 \r
                /*\r
@@ -1431,6 +1431,12 @@ public class TicketPage extends RepositoryPage {
                                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