aboutsummaryrefslogtreecommitdiff
path: root/contrib/pydiffer.py.in
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/pydiffer.py.in')
-rw-r--r--contrib/pydiffer.py.in39
1 files changed, 39 insertions, 0 deletions
diff --git a/contrib/pydiffer.py.in b/contrib/pydiffer.py.in
new file mode 100644
index 0000000..23d546b
--- /dev/null
+++ b/contrib/pydiffer.py.in
@@ -0,0 +1,39 @@
+#!@PYTHON@
+import os
+import sys
+import difflib
+import filecmp
+
+def getdiff (old, new):
+ diff = []
+ with open (old) as a:
+ with open (new) as b:
+ for l in difflib.unified_diff (a.read ().splitlines (), b.read ().splitlines ()):
+ diff.append (l)
+ return diff
+
+def dc_getdiff (dc, old, new):
+ diff = []
+ for f in dc.left_only:
+ diff.append ("Only in {}: {}".format (old, f))
+ for f in dc.right_only:
+ diff.append ("Only in {}: {}".format (new, f))
+ for f in dc.diff_files:
+ r = getdiff (os.path.join (old, f), os.path.join (new, f))
+ diff.extend (r)
+ for dn, dc in dc.subdirs.items ():
+ r = dc_getdiff (dc, os.path.join (old, dn), os.path.join (new, dn))
+ diff.extend (r)
+ return diff
+
+def dcdiff (old, new):
+ dc = filecmp.dircmp (old, new)
+ diff = dc_getdiff (dc, old, new)
+ return diff
+
+def main ():
+ for l in dcdiff (sys.argv[1], sys.argv[2]):
+ print (l)
+
+if __name__ == '__main__':
+ main ()