##// END OF EJS Templates
treat .pyo as junk in %upgrade
vivainio -
Show More
@@ -1,95 +1,95 b''
1 1 #!/usr/bin/env python
2 2 """ A script/util to upgrade all files in a directory
3 3
4 4 This is rather conservative in its approach, only copying/overwriting
5 5 new and unedited files.
6 6
7 7 To be used by "upgrade" feature.
8 8 """
9 9 try:
10 10 from IPython.Extensions.path import path
11 11 except ImportError:
12 12 try:
13 13 from Extensions.path import path
14 14 except ImportError:
15 15 from path import path
16 16
17 17 import md5,pickle
18 18
19 19 def showdiff(old,new):
20 20 import difflib
21 21 d = difflib.Differ()
22 22 lines = d.compare(old.lines(),new.lines())
23 23 realdiff = False
24 24 for l in lines:
25 25 print l,
26 26 if not realdiff and not l[0].isspace():
27 27 realdiff = True
28 28 return realdiff
29 29
30 30 def upgrade_dir(srcdir, tgtdir):
31 31 """ Copy over all files in srcdir to tgtdir w/ native line endings
32 32
33 33 Creates .upgrade_report in tgtdir that stores md5sums of all files
34 34 to notice changed files b/w upgrades.
35 35 """
36 36
37 37 def pr(s):
38 38 print s
39 junk = ['.svn','ipythonrc*','*.pyc', '*~', '.hg']
39 junk = ['.svn','ipythonrc*','*.pyc', '*.pyo', '*~', '.hg']
40 40
41 41 def ignorable(p):
42 42 for pat in junk:
43 43 if p.startswith(pat) or p.fnmatch(pat):
44 44 return True
45 45 return False
46 46
47 47 modded = []
48 48 files = [path(srcdir).relpathto(p) for p in path(srcdir).walkfiles()]
49 49 #print files
50 50 rep = tgtdir / '.upgrade_report'
51 51 try:
52 52 rpt = pickle.load(rep.open())
53 53 except:
54 54 rpt = {}
55 55
56 56 for f in files:
57 57 if ignorable(f):
58 58 continue
59 59 src = srcdir / f
60 60 tgt = tgtdir / f
61 61 if not tgt.isfile():
62 62 pr("Creating %s" % str(tgt))
63 63
64 64 tgt.write_text(src.text())
65 65 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
66 66 else:
67 67 cont = tgt.text()
68 68 sum = rpt.get(str(tgt), None)
69 69 #print sum
70 70 if sum and md5.new(cont).hexdigest() == sum:
71 71 pr("%s: Unedited, installing new version" % tgt)
72 72 tgt.write_text(src.text())
73 73 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
74 74 else:
75 75 pr(' == Modified, skipping %s, diffs below == ' % tgt)
76 76 #rpt[str(tgt)] = md5.new(tgt.bytes()).hexdigest()
77 77 real = showdiff(tgt,src)
78 78 pr('') # empty line
79 79 if not real:
80 80 pr("(Ok, it was identical, only upgrading checksum)")
81 81 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
82 82 else:
83 83 modded.append(tgt)
84 84
85 85 #print rpt
86 86 pickle.dump(rpt, rep.open('w'))
87 87 if modded:
88 88 print "\n\nDelete the following files manually (and rerun %upgrade)\nif you need a full upgrade:"
89 89 for m in modded:
90 90 print m
91 91
92 92
93 93 import sys
94 94 if __name__ == "__main__":
95 95 upgrade_dir(path(sys.argv[1]), path(sys.argv[2]))
General Comments 0
You need to be logged in to leave comments. Login now