diff options
author | Anton Khirnov <anton@khirnov.net> | 2022-09-08 10:49:06 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2022-09-22 09:51:09 +0200 |
commit | 29479acee5d761738978a0ab3d6d0bf68b3fb2ea (patch) | |
tree | 88b3f5494e75036d0ef733c02871f09acaf454bd /bin | |
parent | 8e0ce6db971c18938ea6fd3a3a6a7c14df77b588 (diff) |
Move linediff to bin/ and install it.
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/linediff | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/bin/linediff b/bin/linediff new file mode 100755 index 0000000..c0b522c --- /dev/null +++ b/bin/linediff @@ -0,0 +1,73 @@ +#!/usr/bin/python3 + +# script for line-by-line diffing in vim +# TODO: prettify/test + +import sys + +if len(sys.argv) < 3: + sys.stderr.write('Usage: %s file1 file2\n' % sys.argv[0]) + sys.exit(1) + +f1 = open(sys.argv[1], 'r') +f2 = open(sys.argv[2], 'r') + +buf_start = -1 +buf1 = [] +buf2 = [] + +def flush_buf(): + global buf_start, buf1, buf2 + + if buf_start == -1: + return + + if (len(buf1) > 1): + sys.stdout.write('%d,%dc%d,%d\n' % (buf_start, buf_start + len(buf1) - 1, buf_start, buf_start + len(buf1) - 1)) + else: + sys.stdout.write('%dc%d\n' % (buf_start, buf_start)) + + for line in buf1: + sys.stdout.write('< %s' % line) + sys.stdout.write('---\n') + for line in buf2: + sys.stdout.write('> %s' % line) + + buf_start = -1 + buf1 = [] + buf2 = [] + +i = 1 +while True: + line1 = f1.readline() + line2 = f2.readline() + + if (line1 == '') != (line2 == ''): + flush_buf() + line = line1 if line1 else line2 + f = f1 if line1 else f2 + buf = [line] + buf.extend(map(lambda x: x.rstrip('\n'), f.readlines())) + sys.stdout.write('%d,%d' % (i, i + len(buf) - 1)) + sys.stdout.write('d' if line1 else 'c') + sys.stdout.write('\n') + for line in buf: + sys.stdout.write('%s %s\n' % ('>' if line1 else '<', line)) + break + + if line1 == '': + flush_buf() + break + + if line1 == line2: + flush_buf() + else: + if buf_start == -1: + buf_start = i + buf1.append(line1) + buf2.append(line2) + + i += 1 + +f1.close() +f2.close() |