From 91c85b7e498bdafbd43777f06e74d89de31663a6 2006-02-15 20:35:16 From: vivainio Date: 2006-02-15 20:35:16 Subject: [PATCH] upgrade_dir for upgrading to newer config files (more cautious than current upgrade feature) --- diff --git a/IPython/upgrade_dir.py b/IPython/upgrade_dir.py new file mode 100644 index 0000000..b3ce3e5 --- /dev/null +++ b/IPython/upgrade_dir.py @@ -0,0 +1,66 @@ +""" 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. +""" +from path import path +import md5,pickle + +def showdiff(old,new): + import difflib + d = difflib.Differ() + print "".join(d.compare(old.lines(),new.lines())) + +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): + if p.lower().startswith('.svn'): + return True + return False + + + 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.bytes()).hexdigest() + else: + cont = tgt.bytes() + sum = rpt.get(str(tgt), None) + #print sum + if sum and md5.new(cont).hexdigest() == sum: + pr("Unedited, installing new %s" % tgt) + rpt[str(tgt)] = md5.new(tgt.bytes()).hexdigest() + else: + pr('Modified, skipping %s, diffs below' % tgt) + #rpt[str(tgt)] = md5.new(tgt.bytes()).hexdigest() + showdiff(tgt,src) + pass + #print rpt + pickle.dump(rpt, rep.open('w')) + +import sys +upgrade_dir(path(sys.argv[1]), path(sys.argv[2])) \ No newline at end of file