##// END OF EJS Templates
changed main script to be compliant back to ipython script directory call
changed main script to be compliant back to ipython script directory call

File last commit:

r964:0a2f2117
r1822:0430a05d
Show More
upgrade_dir.py
92 lines | 2.6 KiB | text/x-python | PythonLexer
vivainio
merge all from 0.7.3 branch to trunk
r503 #!/usr/bin/env python
""" A script/util to upgrade all files in a directory
This is rather conservative in its approach, only copying/overwriting
new and unedited files.
To be used by "upgrade" feature.
"""
try:
vivainio
move path to external
r964 from IPython.external.path import path
vivainio
merge all from 0.7.3 branch to trunk
r503 except ImportError:
vivainio
move path to external
r964 from path import path
vivainio
merge all from 0.7.3 branch to trunk
r503
import md5,pickle
def showdiff(old,new):
import difflib
d = difflib.Differ()
lines = d.compare(old.lines(),new.lines())
realdiff = False
for l in lines:
print l,
if not realdiff and not l[0].isspace():
realdiff = True
return realdiff
def upgrade_dir(srcdir, tgtdir):
""" Copy over all files in srcdir to tgtdir w/ native line endings
Creates .upgrade_report in tgtdir that stores md5sums of all files
to notice changed files b/w upgrades.
"""
def pr(s):
print s
vivainio
treat .pyo as junk in %upgrade
r637 junk = ['.svn','ipythonrc*','*.pyc', '*.pyo', '*~', '.hg']
vivainio
upgrade_dir.py: skip junk files like *.pyc
r605
vivainio
merge all from 0.7.3 branch to trunk
r503 def ignorable(p):
vivainio
upgrade_dir.py: skip junk files like *.pyc
r605 for pat in junk:
if p.startswith(pat) or p.fnmatch(pat):
return True
vivainio
merge all from 0.7.3 branch to trunk
r503 return False
modded = []
files = [path(srcdir).relpathto(p) for p in path(srcdir).walkfiles()]
#print files
rep = tgtdir / '.upgrade_report'
try:
rpt = pickle.load(rep.open())
except:
rpt = {}
for f in files:
if ignorable(f):
continue
src = srcdir / f
tgt = tgtdir / f
if not tgt.isfile():
pr("Creating %s" % str(tgt))
tgt.write_text(src.text())
rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
else:
cont = tgt.text()
sum = rpt.get(str(tgt), None)
#print sum
if sum and md5.new(cont).hexdigest() == sum:
vivainio
upgrade_dir.py: skip junk files like *.pyc
r605 pr("%s: Unedited, installing new version" % tgt)
vivainio
merge all from 0.7.3 branch to trunk
r503 tgt.write_text(src.text())
rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
else:
pr(' == Modified, skipping %s, diffs below == ' % tgt)
#rpt[str(tgt)] = md5.new(tgt.bytes()).hexdigest()
real = showdiff(tgt,src)
pr('') # empty line
if not real:
vivainio
upgrade_dir.py: skip junk files like *.pyc
r605 pr("(Ok, it was identical, only upgrading checksum)")
vivainio
merge all from 0.7.3 branch to trunk
r503 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
else:
modded.append(tgt)
#print rpt
pickle.dump(rpt, rep.open('w'))
if modded:
print "\n\nDelete the following files manually (and rerun %upgrade)\nif you need a full upgrade:"
for m in modded:
print m
import sys
if __name__ == "__main__":
upgrade_dir(path(sys.argv[1]), path(sys.argv[2]))