Edgewall Software

Changeset 8de52d27 in jomae.git

Timestamp:
Jul 8, 2024, 2:01:01 AM (10 days ago)
Author:
Jun Omae <jun66j5@…>
Branches:
t13766
Parents:
92f432b3
Message:

(#13766) fix incorrectly rendering spaces in diff hunks

Location:
trac
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trac/htdocs/css/diff.css

    r92f432b3 r8de52d27  
    144144 vertical-align: top;
    145145}
     146
    146147.diff table.trac-diff tbody tr:hover td {
    147148 background: #eed;
  • trac/mimeview/patch.py

    r92f432b3 r8de52d27  
    8787                    tolines[i] = to[:start] + '\0' + to[start:last] + \
    8888                                 '\1' + to[last:]
    89 
    90         space_re = re.compile(' ( +)|^ ')
    91         def htmlify(match):
    92             div, mod = divmod(len(match.group(0)), 2)
    93             return Markup(div * '&nbsp; ' + mod * '&nbsp;')
    9489
    9590        comments = []
     
    280275                        line = expandtabs(f[i], tabwidth, '\0\1')
    281276                        line = escape(line, quotes=False)
    282                         line = '<del>'.join(space_re.sub(htmlify, seg)
    283                                             for seg in line.split('\0'))
     277                        line = '<del>'.join(line.split('\0'))
    284278                        line = line.replace('\1', '</del>')
    285279                        f[i] = Markup(line)
     
    289283                        line = expandtabs(t[i], tabwidth, '\0\1')
    290284                        line = escape(line, quotes=False)
    291                         line = '<ins>'.join(space_re.sub(htmlify, seg)
    292                                             for seg in line.split('\0'))
     285                        line = '<ins>'.join(line.split('\0'))
    293286                        line = line.replace('\1', '</ins>')
    294287                        t[i] = Markup(line)
  • trac/mimeview/tests/patch.data

    r92f432b3 r8de52d27  
    5252          </tr>
    5353          <tr class="last">
    54             <th>&nbsp;</th><th>4</th><td class="r"><span>base<ins>&nbsp;modified</ins></span></td>
     54            <th>&nbsp;</th><th>4</th><td class="r"><span>base<ins>modified</ins></span></td>
    5555          </tr>
    5656        </tbody>
     
    100100          </tr>
    101101          <tr>
    102             <th>2</th><th>&nbsp;</th><td class="l"><span><em>&nbsp;No newline at end of file</em></span></td>
     102            <th>2</th><th>&nbsp;</th><td class="l"><span><em>No newline at end of file</em></span></td>
    103103          </tr>
    104104
     
    150150          </tr>
    151151          <tr class="last">
    152             <th>&nbsp;</th><th>2</th><td class="r"><span><em>&nbsp;No newline at end of file</em></span></td>
     152            <th>&nbsp;</th><th>2</th><td class="r"><span><em>No newline at end of file</em></span></td>
    153153          </tr>
    154154        </tbody>
  • trac/mimeview/tests/patch.py

    r92f432b3 r8de52d27  
    107107             '-aa\tb',
    108108             '+aaxb'], 8)
    109         self.assertEqual('aa<del>&nbsp; &nbsp; &nbsp; </del>b',
     109        self.assertEqual('aa<del> </del>b',
    110110                         str(changes[0]['diffs'][0][0]['base']['lines'][0]))
    111111        self.assertEqual('aa<ins>x</ins>b',
     
    122122        self.assertEqual('<del></del>*a',
    123123                         str(changes[0]['diffs'][0][0]['base']['lines'][0]))
    124         self.assertEqual('<ins>&nbsp;</ins>*a',
     124        self.assertEqual('<ins></ins>*a',
    125125                         str(changes[0]['diffs'][0][0]['changed']['lines'][0]))
    126126
  • trac/versioncontrol/diff.py

    r92f432b3 r8de52d27  
    198198                'equal': 'unmod'}
    199199
    200     space_re = re.compile(' ( +)|^ ')
    201     def htmlify(match):
    202         div, mod = divmod(len(match.group(0)), 2)
    203         return Markup(div * '&nbsp; ' + mod * '&nbsp;')
    204 
    205200    def markup_intraline_changes(opcodes):
    206201        for tag, i1, i2, j1, j2 in opcodes:
     
    234229                for line in fromlines[i1:i2]:
    235230                    line = line.expandtabs(tabwidth)
    236                     line = space_re.sub(htmlify, escape(line, quotes=False))
    237231                    blocks[-1]['base']['lines'].append(Markup(str(line)))
    238232                for line in tolines[j1:j2]:
    239233                    line = line.expandtabs(tabwidth)
    240                     line = space_re.sub(htmlify, escape(line, quotes=False))
    241234                    blocks[-1]['changed']['lines'].append(Markup(str(line)))
    242235            else:
     
    245238                        line = expandtabs(line, tabwidth, '\0\1')
    246239                        line = escape(line, quotes=False)
    247                         line = '<del>'.join(space_re.sub(htmlify, seg)
    248                                             for seg in line.split('\0'))
     240                        line = '<del>'.join(line.split('\0'))
    249241                        line = line.replace('\1', '</del>')
    250242                        blocks[-1]['base']['lines'].append(
     
    254246                        line = expandtabs(line, tabwidth, '\0\1')
    255247                        line = escape(line, quotes=False)
    256                         line = '<ins>'.join(space_re.sub(htmlify, seg)
    257                                             for seg in line.split('\0'))
     248                        line = '<ins>'.join(line.split('\0'))
    258249                        line = line.replace('\1', '</ins>')
    259250                        blocks[-1]['changed']['lines'].append(
  • trac/versioncontrol/tests/diff.py

    r92f432b3 r8de52d27  
    225225        self.assertEqual(block['type'], 'mod')
    226226        self.assertEqual(str(block['base']['lines'][0]), '<del></del>*a')
    227         self.assertEqual(str(block['changed']['lines'][0]),
    228                          '<ins>&nbsp;</ins>*a')
     227        self.assertEqual(str(block['changed']['lines'][0]), '<ins> </ins>*a')
    229228
    230229    def test_whitespace_marked_up2(self):
     
    233232        block = changes[0][0]
    234233        self.assertEqual(block['type'], 'mod')
    235         self.assertEqual(str(block['base']['lines'][0]),
    236                          '&nbsp; &nbsp;<del>a</del>')
    237         self.assertEqual(str(block['changed']['lines'][0]),
    238                          '&nbsp; &nbsp;<ins>b</ins>')
     234        self.assertEqual(str(block['base']['lines'][0]), '   <del>a</del>')
     235        self.assertEqual(str(block['changed']['lines'][0]), '   <ins>b</ins>')
    239236
    240237    def test_whitespace_marked_up3(self):
     
    243240        block = changes[0][0]
    244241        self.assertEqual(block['type'], 'mod')
    245         self.assertEqual(str(block['base']['lines'][0]),
    246                          '<del>a</del>&nbsp; &nbsp;')
    247         self.assertEqual(str(block['changed']['lines'][0]),
    248                          '<ins>b</ins>&nbsp; &nbsp;')
     242        self.assertEqual(str(block['base']['lines'][0]), '<del>a</del>   ')
     243        self.assertEqual(str(block['changed']['lines'][0]), '<ins>b</ins>   ')
    249244
    250245    def test_expandtabs_works_right(self):
     
    254249        self.assertEqual(block['type'], 'mod')
    255250        self.assertEqual(str(block['base']['lines'][0]),
    256                          'aa<del>&nbsp; &nbsp; &nbsp; </del>b')
     251                         'aa<del> </del>b')
    257252        self.assertEqual(str(block['changed']['lines'][0]),
    258253                         'aa<ins>x</ins>b')
Note: See TracChangeset for help on using the changeset viewer.