##// END OF EJS Templates
Defaults rename, clean up api to use properties or direct access rather than...
Defaults rename, clean up api to use properties or direct access rather than explicit getters.

File last commit:

r226:a3eae799
r284:9c6bbd29
Show More
upgrade_dir.py
88 lines | 2.6 KiB | text/x-python | PythonLexer
vivainio
Made upgrade_dir executable on win32
r222 #!/usr/bin/env python
vivainio
upgrade_dir for upgrading to newer config files...
r197 """ 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.
"""
vivainio
Fix %upgrade, and suggest using it.
r226 from IPython.Extensions.path import path
vivainio
upgrade_dir for upgrading to newer config files...
r197 import md5,pickle
def showdiff(old,new):
import difflib
d = difflib.Differ()
vivainio
%upgrade
r201 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
vivainio
upgrade_dir for upgrading to newer config files...
r197
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
def ignorable(p):
vivainio
upgrade_dir skips ipythonrc* (would be problematic on win32)
r198 if p.lower().startswith('.svn') or p.startswith('ipythonrc'):
vivainio
upgrade_dir for upgrading to newer config files...
r197 return True
return False
vivainio
%upgrade
r201 modded = []
vivainio
upgrade_dir for upgrading to newer config files...
r197 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())
vivainio
%upgrade
r201 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
vivainio
upgrade_dir for upgrading to newer config files...
r197 else:
vivainio
%upgrade
r201 cont = tgt.text()
vivainio
upgrade_dir for upgrading to newer config files...
r197 sum = rpt.get(str(tgt), None)
#print sum
if sum and md5.new(cont).hexdigest() == sum:
pr("Unedited, installing new %s" % tgt)
vivainio
%upgrade
r201 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
vivainio
upgrade_dir for upgrading to newer config files...
r197 else:
vivainio
%upgrade
r201 pr(' == Modified, skipping %s, diffs below == ' % tgt)
vivainio
upgrade_dir for upgrading to newer config files...
r197 #rpt[str(tgt)] = md5.new(tgt.bytes()).hexdigest()
vivainio
%upgrade
r201 real = showdiff(tgt,src)
vivainio
prettier output for upgrade_dir
r206 pr('') # empty line
vivainio
%upgrade
r201 if not real:
vivainio
prettier output for upgrade_dir
r206 pr("(Ok, it wasn't that different at all, upgrading checksum)")
vivainio
%upgrade
r201 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
else:
modded.append(tgt)
vivainio
upgrade_dir for upgrading to newer config files...
r197 #print rpt
pickle.dump(rpt, rep.open('w'))
vivainio
%upgrade
r201 if modded:
print "\n\nDelete the following files manually if you need a full upgrade:"
for m in modded:
print m
vivainio
upgrade_dir for upgrading to newer config files...
r197
import sys
vivainio
%upgrade
r201 if __name__ == "__main__":
upgrade_dir(path(sys.argv[1]), path(sys.argv[2]))
vivainio
Made upgrade_dir executable on win32
r222