changeset 4786:5d5d8ec14aa7

pullrequests: show graph next to changesets available for update
author Mads Kiilerich <madski@unity3d.com>
date Wed, 21 Jan 2015 17:35:11 +0100
parents 6262ca7ed934
children fab4e18432ba
files kallithea/controllers/pullrequests.py kallithea/templates/pullrequests/pullrequest_show.html
diffstat 2 files changed, 24 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/pullrequests.py	Wed Jan 21 17:35:11 2015 +0100
+++ b/kallithea/controllers/pullrequests.py	Wed Jan 21 17:35:11 2015 +0100
@@ -552,7 +552,8 @@
         revs = [ctx.revision for ctx in reversed(c.cs_ranges)]
         c.jsdata = json.dumps(graph_data(org_scm_instance, revs))
 
-        arevs = []
+        avail_revs = set()
+        avail_show = []
         c.cs_branch_name = c.cs_ref_name
         other_scm_instance = c.a_repo.scm_instance
         c.update_msg = ""
@@ -574,24 +575,29 @@
             elif c.pull_request.is_closed():
                 c.update_msg = _('This pull request has been closed and can not be updated.')
             else: # look for descendants of PR head on source branch in org repo
-                arevs = org_scm_instance._repo.revs('%s:: & branch(%s) - %s',
-                                                    revs[0], c.cs_branch_name, revs[0])
-                if arevs:
-                    arevs = sorted(arevs, reverse=True)
+                avail_revs = org_scm_instance._repo.revs('%s:: & branch(%s)',
+                                                         revs[0], c.cs_branch_name)
+                if len(avail_revs) > 1: # more than just revs[0]
+                    show = set(avail_revs)
                     c.update_msg = _('This pull request can be updated with changes on %s:') % c.cs_branch_name
                 else:
+                    show = set()
                     c.update_msg = _('No changesets found for updating this pull request.')
 
                 # TODO: handle branch heads that not are tip-most
-                brevs = org_scm_instance._repo.revs('%s - %d - %ld', c.cs_branch_name, revs[0], arevs)
+                brevs = org_scm_instance._repo.revs('%s - %ld', c.cs_branch_name, avail_revs)
                 if brevs:
                     c.update_msg_other = _('Note: Branch %s has another head: %s.') % (c.cs_branch_name,
                         h.short_id(org_scm_instance.get_changeset((max(brevs))).raw_id))
 
+                avail_show = sorted(show, reverse=True)
+
         elif org_scm_instance.alias == 'git':
             c.update_msg = _("Git pull requests don't support updates yet.")
 
-        c.available = [org_scm_instance.get_changeset(r) for r in arevs]
+        c.avail_revs = avail_revs
+        c.avail_cs = [org_scm_instance.get_changeset(r) for r in avail_show]
+        c.avail_jsdata = json.dumps(graph_data(org_scm_instance, avail_show))
 
         raw_ids = [x.raw_id for x in c.cs_ranges]
         c.cs_comments = c.cs_repo.get_comments(raw_ids)
--- a/kallithea/templates/pullrequests/pullrequest_show.html	Wed Jan 21 17:35:11 2015 +0100
+++ b/kallithea/templates/pullrequests/pullrequest_show.html	Wed Jan 21 17:35:11 2015 +0100
@@ -172,11 +172,14 @@
             </div>
             <div class="input">
               <div class="msg-div">${c.update_msg}</div>
-              %if c.available:
+              %if c.avail_revs:
               <div id="updaterevs" style="max-height:200px; overflow-y:auto; overflow-x:hidden; margin-bottom: 10px">
-                <table class="noborder">
-                  %for cnt, cs in enumerate(c.available):
-                    <tr>
+                <div style="height:0">
+                  <canvas id="avail_graph_canvas"></canvas>
+                </div>
+                <table id="updaterevs-table" class="noborder" style="padding-left:50px">
+                  %for cnt, cs in enumerate(c.avail_cs):
+                    <tr id="chg_available_${cnt+1}">
                       %if cs.revision == c.cs_ranges[-1].revision:
                         <td>
                           %if editable:
@@ -347,6 +350,10 @@
               injectInlineForm(tr.parentNode.parentNode);
           });
 
+          var avail_jsdata = ${c.avail_jsdata|n};
+          var avail_r = new BranchRenderer('avail_graph_canvas', 'updaterevs-table', 'chg_available_');
+          avail_r.render(avail_jsdata,40);
+
           // inject comments into they proper positions
           var file_comments = $('.inline-comment-placeholder').toArray();
           renderInlineComments(file_comments);