From 29479acee5d761738978a0ab3d6d0bf68b3fb2ea Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Thu, 8 Sep 2022 10:49:06 +0200 Subject: Move linediff to bin/ and install it. --- bin/linediff | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100755 bin/linediff (limited to 'bin') 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() -- cgit v1.2.3