aboutsummaryrefslogtreecommitdiff
path: root/contrib/pydiffer.py.in
blob: 23d546b25c936043981106498af02543e5e04bf5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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 ()