summaryrefslogtreecommitdiff
path: root/bin/linediff
diff options
context:
space:
mode:
Diffstat (limited to 'bin/linediff')
-rwxr-xr-xbin/linediff73
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()