changeset 6193:dc4cb1d4e084

diff: rework data structure used by diff_block.diff_block (used for changeset diffs) Make it a pure reusable function that also can replace diff_block_simple. Improve code clarity by using Python tuples for tuples. fid and url_fid are just shuffled around - not cleaned up for now.
author Mads Kiilerich <madski@unity3d.com>
date Tue, 06 Sep 2016 00:51:18 +0200
parents 72acb38da217
children 4034992774fa
files kallithea/controllers/changeset.py kallithea/controllers/files.py kallithea/templates/changeset/changeset.html kallithea/templates/changeset/changeset_range.html kallithea/templates/changeset/diff_block.html kallithea/templates/files/file_diff.html
diffstat 6 files changed, 32 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/changeset.py	Tue Sep 06 00:51:18 2016 +0200
+++ b/kallithea/controllers/changeset.py	Tue Sep 06 00:51:18 2016 +0200
@@ -269,8 +269,6 @@
                                                  revision=changeset.raw_id)
                 c.inline_comments.extend(inlines)
 
-            c.changes[changeset.raw_id] = []
-
             cs2 = changeset.raw_id
             cs1 = changeset.parents[0].raw_id if changeset.parents else EmptyChangeset().raw_id
             context_lcl = get_line_ctx('', request.GET)
@@ -283,7 +281,7 @@
                                                  vcs=c.db_repo_scm_instance.alias,
                                                  format='gitdiff',
                                                  diff_limit=diff_limit)
-            cs_changes = OrderedDict()
+            file_diff_data = OrderedDict()
             if method == 'show':
                 _parsed = diff_processor.prepare()
                 c.limited_diff = False
@@ -295,15 +293,15 @@
                     c.lines_deleted += st['deleted']
                     filename = f['filename']
                     fid = h.FID(changeset.raw_id, filename)
+                    url_fid = h.FID('', filename)
                     diff = diff_processor.as_html(enable_comments=enable_comments,
                                                   parsed_lines=[f])
-                    cs_changes[fid] = [cs1, cs2, f['operation'], filename,
-                                       diff, st]
+                    file_diff_data[fid] = (url_fid, f['operation'], filename, diff, st)
             else:
                 # downloads/raw we only need RAW diff nothing else
                 diff = diff_processor.as_raw()
-                cs_changes[''] = [None, None, None, None, diff, None]
-            c.changes[changeset.raw_id] = cs_changes
+                file_diff_data[''] = (None, None, None, diff, None)
+            c.changes[changeset.raw_id] = (cs1, cs2, file_diff_data)
 
         #sort comments in creation order
         c.comments = [com for com_id, com in sorted(comments.items())]
--- a/kallithea/controllers/files.py	Tue Sep 06 00:51:18 2016 +0200
+++ b/kallithea/controllers/files.py	Tue Sep 06 00:51:18 2016 +0200
@@ -683,17 +683,13 @@
             ign_whitespace_lcl = get_ignore_ws(fid, request.GET)
 
             lim = request.GET.get('fulldiff') or self.cut_off_limit
-            cs1, cs2, op, diff, st = diffs.wrapped_diff(filenode_old=node1,
+            c.a_rev, c.cs_rev, op, diff, st = diffs.wrapped_diff(filenode_old=node1,
                                          filenode_new=node2,
                                          cut_off_limit=lim,
                                          ignore_whitespace=ign_whitespace_lcl,
                                          line_context=line_context_lcl,
                                          enable_comments=False)
-            filename = node1.path
-            cs_changes = {
-                'fid': [cs1, cs2, op, filename, diff, st]
-            }
-            c.changes = cs_changes
+            c.file_diff_data = {fid: (fid, op, node1.path, diff, st)}
 
             return render('files/file_diff.html')
 
--- a/kallithea/templates/changeset/changeset.html	Tue Sep 06 00:51:18 2016 +0200
+++ b/kallithea/templates/changeset/changeset.html	Tue Sep 06 00:51:18 2016 +0200
@@ -160,18 +160,19 @@
                 </div>
             </div>
             <div class="changes_txt">
+              <% a_rev, cs_rev, file_diff_data = c.changes[c.changeset.raw_id] %>
               % if c.limited_diff:
-                  ${ungettext('%s file changed', '%s files changed', len(c.changeset.affected_files)) % (len(c.changeset.affected_files))}:
+                  ${ungettext('%s file changed', '%s files changed', len(file_diff_data)) % len(file_diff_data)}:
               % else:
-                  ${ungettext('%s file changed with %s insertions and %s deletions', '%s files changed with %s insertions and %s deletions', len(c.changeset.affected_files)) % (len(c.changeset.affected_files), c.lines_added, c.lines_deleted)}:
+                  ${ungettext('%s file changed with %s insertions and %s deletions', '%s files changed with %s insertions and %s deletions', len(file_diff_data)) % (len(file_diff_data), c.lines_added, c.lines_deleted)}:
               %endif
               </div>
               <div class="cs_files">
-                %for fid, (cs1, cs2, op, path, diff, stats) in c.changes[c.changeset.raw_id].iteritems():
+                %for fid, (url_fid, op, path, diff, stats) in file_diff_data.iteritems():
                     <div class="cs_${op}">
                       <div class="node">
                           <i class="icon-diff-${op}"></i>
-                          <a href="#${fid}">${h.safe_unicode(path)}</a>
+                          ${h.link_to(h.safe_unicode(path), '#%s' % fid)}
                       </div>
                       <div class="changes">${h.fancy_file_stats(stats)}</div>
                     </div>
@@ -188,7 +189,9 @@
     <div class="commentable-diff">
     <%namespace name="diff_block" file="/changeset/diff_block.html"/>
     ${diff_block.diff_block_js()}
-    ${diff_block.diff_block(c.changes[c.changeset.raw_id])}
+    <% a_rev, cs_rev, file_diff_data = c.changes[c.changeset.raw_id] %>
+    ${diff_block.diff_block(c.repo_name, 'rev', a_rev, a_rev,
+                            c.repo_name, 'rev', cs_rev, cs_rev, file_diff_data)}
     % if c.limited_diff:
       <h4>${_('Changeset was too big and was cut off...')} <a href="${h.url.current(fulldiff=1, **request.GET.mixed())}">${_('Show full diff anyway')}</a></h4>
     % endif
--- a/kallithea/templates/changeset/changeset_range.html	Tue Sep 06 00:51:18 2016 +0200
+++ b/kallithea/templates/changeset/changeset_range.html	Tue Sep 06 00:51:18 2016 +0200
@@ -59,11 +59,12 @@
             <div class="cs_files">
                 %for cs in c.cs_ranges:
                     <div class="cur_cs">${h.link_to(h.show_id(cs),h.url('changeset_home',repo_name=c.cs_repo.repo_name,revision=cs.raw_id))}</div>
-                    %for FID, (cs1, cs2, op, path, diff, stats) in c.changes[cs.raw_id].iteritems():
+                    <% a_rev, cs_rev, file_diff_data = c.changes[cs.raw_id] %>
+                    %for fid, (url_fid, op, path, diff, stats) in file_diff_data.iteritems():
                         <div class="cs_${op}">
                             <div class="node">
                                 <i class="icon-diff-${op}"></i>
-                                ${h.link_to(h.safe_unicode(path),h.url.current(anchor=FID))}
+                                ${h.link_to(h.safe_unicode(path), '#%s' % fid)}
                             </div>
                             <div class="changes">${h.fancy_file_stats(stats)}</div>
                         </div>
@@ -105,7 +106,9 @@
               </span>
             </div>
            </div>
-          ${diff_block.diff_block(c.changes[cs.raw_id])}
+          <% a_rev, cs_rev, file_diff_data = c.changes[cs.raw_id] %>
+          ${diff_block.diff_block(c.repo_name, 'rev', a_rev, a_rev,
+                                  c.repo_name, 'rev', cs_rev, cs_rev, file_diff_data)}
     %endfor
 </div>
 </%def>
--- a/kallithea/templates/changeset/diff_block.html	Tue Sep 06 00:51:18 2016 +0200
+++ b/kallithea/templates/changeset/diff_block.html	Tue Sep 06 00:51:18 2016 +0200
@@ -1,14 +1,16 @@
 ## -*- coding: utf-8 -*-
 
-<%def name="diff_block(change)">
+<%def name="diff_block(a_repo_name, a_ref_type, a_ref_name, a_rev,
+                       cs_repo_name, cs_ref_name, cs_ref_type, cs_rev,
+                       file_diff_data)">
 <div class="diff-collapse">
-    <span target="${'diff-container-%s' % (id(change))}" class="diff-collapse-button">&uarr; ${_('Collapse Diff')} &uarr;</span>
+    <span target="${'diff-container-%s' % (id(file_diff_data))}" class="diff-collapse-button">&uarr; ${_('Collapse Diff')} &uarr;</span>
 </div>
-<div class="diff-container" id="${'diff-container-%s' % (id(change))}">
-%for id_fid, (a_rev, cs_rev, op, filename, diff, stats) in change.iteritems():
-    ${diff_block_diffblock(id_fid, h.FID(cs_rev, filename), op, filename, diff,
-        c.repo_name, a_rev, 'rev', a_rev,
-        c.repo_name, cs_rev, 'rev', cs_rev)}
+<div class="diff-container" id="${'diff-container-%s' % (id(file_diff_data))}">
+%for id_fid, (url_fid, op, filename, diff, stats) in file_diff_data.iteritems():
+    ${diff_block_diffblock(id_fid, url_fid, op, filename, diff,
+        a_repo_name, a_rev, a_ref_type, a_ref_name,
+        cs_repo_name, cs_rev, cs_ref_type, cs_ref_name)}
 %endfor
 </div>
 </%def>
--- a/kallithea/templates/files/file_diff.html	Tue Sep 06 00:51:18 2016 +0200
+++ b/kallithea/templates/files/file_diff.html	Tue Sep 06 00:51:18 2016 +0200
@@ -23,7 +23,8 @@
     ## diff block
     <%namespace name="diff_block" file="/changeset/diff_block.html"/>
     ${diff_block.diff_block_js()}
-    ${diff_block.diff_block(c.changes)}
+    ${diff_block.diff_block(c.repo_name, 'rev', c.a_rev, c.a_rev,
+                            c.repo_name, 'rev', c.cs_rev, c.cs_rev, c.file_diff_data)}
     </div>
 </div>
 </%def>