mirror of
https://github.com/samba-team/samba.git
synced 2025-12-23 00:23:53 +03:00
python/colour: add a colour diff helper
Sometimes colour can help show what is different between two strings. This is roughly the same as `git diff --no-index --color-words=. <a> <b>`. Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
committed by
Andrew Bartlett
parent
a24ba4ea22
commit
f58372cca5
@@ -141,3 +141,35 @@ def colour_if_wanted(*streams, hint='auto'):
|
|||||||
else:
|
else:
|
||||||
switch_colour_off()
|
switch_colour_off()
|
||||||
return wanted
|
return wanted
|
||||||
|
|
||||||
|
|
||||||
|
def colourdiff(a, b):
|
||||||
|
"""Generate a string comparing two strings or byte sequences, with
|
||||||
|
differences coloured to indicate what changed.
|
||||||
|
|
||||||
|
Byte sequences are printed as hex pairs separated by colons.
|
||||||
|
"""
|
||||||
|
from difflib import SequenceMatcher
|
||||||
|
out = []
|
||||||
|
if isinstance(a, bytes):
|
||||||
|
a = a.hex(':')
|
||||||
|
if isinstance(b, bytes):
|
||||||
|
b = b.hex(':')
|
||||||
|
a = a.replace(' ', '␠')
|
||||||
|
b = b.replace(' ', '␠')
|
||||||
|
|
||||||
|
s = SequenceMatcher(None, a, b)
|
||||||
|
for op, al, ar, bl, br in s.get_opcodes():
|
||||||
|
if op == 'equal':
|
||||||
|
out.append(a[al: ar])
|
||||||
|
elif op == 'delete':
|
||||||
|
out.append(c_RED(a[al: ar]))
|
||||||
|
elif op == 'insert':
|
||||||
|
out.append(c_GREEN(b[bl: br]))
|
||||||
|
elif op == 'replace':
|
||||||
|
out.append(c_RED(a[al: ar]))
|
||||||
|
out.append(c_GREEN(b[bl: br]))
|
||||||
|
else:
|
||||||
|
out.append(f' --unknown diff op {op}!-- ')
|
||||||
|
|
||||||
|
return ''.join(out)
|
||||||
|
|||||||
Reference in New Issue
Block a user