Changeset - e6034764387e
[Not reviewed]
default
0 1 0
Mads Kiilerich (mads) - 5 years ago 2021-02-22 11:44:23
mads@kiilerich.com
diffs: let DiffProcessor inject context_lineno in chunk changes

Make it possible to use these numbers reliably, also outside as_html.
1 file changed with 10 insertions and 4 deletions:
0 comments (0 inline, 0 general)
kallithea/lib/diffs.py
Show inline comments
 
@@ -68,25 +68,24 @@ def as_html(parsed_lines, table_class='c
 
            no_lineno_class='lineno',
 
            code_class='code'):
 
    """
 
    Return given diff as html table with customized css classes
 
    """
 
    _html_empty = True
 
    _html = []
 
    _html.append('''<table class="%(table_class)s">\n''' % {
 
        'table_class': table_class
 
    })
 

	
 
    for file_info in parsed_lines:
 
        count_no_lineno = 0  # counter to allow comments on lines without new/old line numbers
 
        for chunk in file_info['chunks']:
 
            _html_empty = False
 
            for change in chunk:
 
                _html.append('''<tr class="%(lc)s %(action)s">\n''' % {
 
                    'lc': line_class,
 
                    'action': change['action']
 
                })
 
                if change['old_lineno'] or change['new_lineno']:
 
                    ###########################################################
 
                    # OLD LINE NUMBER
 
                    ###########################################################
 
                    anchor_old = "%(filename)s_o%(oldline_no)s" % {
 
@@ -119,29 +118,28 @@ def as_html(parsed_lines, table_class='c
 
                        'a_id': anchor_new_id,
 
                        'nlc': new_lineno_class
 
                    })
 
                    _html.append('''<a href="%(url)s" data-pseudo-content="%(label)s"></a>''' % {
 
                        'label': change['new_lineno'],
 
                        'url': '#%s' % anchor_new,
 
                    })
 
                    _html.append('''</td>\n''')
 
                else:
 
                    ###########################################################
 
                    # NO LINE NUMBER
 
                    ###########################################################
 
                    anchor = "%(filename)s_%(count_no_lineno)s" % {
 
                    anchor = "%(filename)s_%(context_lineno)s" % {
 
                        'filename': _safe_id(file_info['filename']),
 
                        'count_no_lineno': count_no_lineno,
 
                        'context_lineno': change['context_lineno'],
 
                    }
 
                    count_no_lineno += 1
 
                    _html.append('''\t<td id="%(anchor)s" class="%(olc)s" colspan="2">''' % {
 
                        'anchor': anchor,
 
                        'olc': no_lineno_class,
 
                    })
 
                    _html.append('''</td>\n''')
 
                ###########################################################
 
                # CODE
 
                ###########################################################
 
                _html.append('''\t<td class="%(cc)s">''' % {
 
                    'cc': code_class,
 
                })
 
                _html.append('''\n\t\t<div class="add-bubble"><div>&nbsp;</div></div><pre>%(code)s</pre>\n''' % {
 
@@ -386,24 +384,32 @@ class DiffProcessor(object):
 
                {
 
                    'old_lineno': '',
 
                    'new_lineno': '',
 
                    'action': 'context',
 
                    'line': msg,
 
                }
 
                for op_, msg in stats['ops'].items()
 
                if op_ != MOD_FILENODE
 
            ]
 
            if msgs:
 
                chunks.insert(0, msgs)
 

	
 
            # enumerate 'context' lines that don't have new/old line numbers so they can be commented on
 
            context_lineno = 0
 
            for chunk in chunks:
 
                for change in chunk:
 
                    if not change['old_lineno'] and not change['new_lineno']:
 
                        change['context_lineno'] = context_lineno
 
                        context_lineno += 1
 

	
 
            _files.append({
 
                'old_filename':     head['a_path'],
 
                'filename':         head['b_path'],
 
                'old_revision':     head['a_blob_id'],
 
                'new_revision':     head['b_blob_id'],
 
                'chunks':           chunks,
 
                'operation':        op,
 
                'stats':            stats,
 
            })
 

	
 
        if not html:
 
            return _files
0 comments (0 inline, 0 general)