home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1940 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  2.6 KB  |  96 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4.  
  5. try:
  6.     from IPython.external.path import path
  7. except ImportError:
  8.     from path import path
  9.  
  10. import md5
  11. import pickle
  12.  
  13. def showdiff(old, new):
  14.     import difflib
  15.     d = difflib.Differ()
  16.     lines = d.compare(old.lines(), new.lines())
  17.     realdiff = False
  18.     for l in lines:
  19.         print l,
  20.         if not realdiff and not l[0].isspace():
  21.             realdiff = True
  22.             continue
  23.     
  24.     return realdiff
  25.  
  26.  
  27. def upgrade_dir(srcdir, tgtdir):
  28.     
  29.     def pr(s):
  30.         print s
  31.  
  32.     junk = [
  33.         '.svn',
  34.         'ipythonrc*',
  35.         '*.pyc',
  36.         '*.pyo',
  37.         '*~',
  38.         '.hg']
  39.     
  40.     def ignorable(p):
  41.         for pat in junk:
  42.             if p.startswith(pat) or p.fnmatch(pat):
  43.                 return True
  44.         
  45.         return False
  46.  
  47.     modded = []
  48.     files = [ path(srcdir).relpathto(p) for p in path(srcdir).walkfiles() ]
  49.     rep = tgtdir / '.upgrade_report'
  50.     
  51.     try:
  52.         rpt = pickle.load(rep.open())
  53.     except:
  54.         []
  55.         []
  56.         (None,)
  57.         rpt = { }
  58.  
  59.     for f in files:
  60.         src = srcdir / f
  61.         tgt = tgtdir / f
  62.         if not tgt.isfile():
  63.             pr('Creating %s' % str(tgt))
  64.             tgt.write_text(src.text())
  65.             rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
  66.             continue
  67.         (None,) if ignorable(f) else []
  68.         cont = tgt.text()
  69.         sum = rpt.get(str(tgt), None)
  70.         if sum and md5.new(cont).hexdigest() == sum:
  71.             pr('%s: Unedited, installing new version' % tgt)
  72.             tgt.write_text(src.text())
  73.             rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
  74.             continue
  75.         pr(' == Modified, skipping %s, diffs below == ' % tgt)
  76.         real = showdiff(tgt, src)
  77.         pr('')
  78.         if not real:
  79.             pr('(Ok, it was identical, only upgrading checksum)')
  80.             rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
  81.             continue
  82.         modded.append(tgt)
  83.     
  84.     pickle.dump(rpt, rep.open('w'))
  85.     if modded:
  86.         print '\n\nDelete the following files manually (and rerun %upgrade)\nif you need a full upgrade:'
  87.         for m in modded:
  88.             print m
  89.         
  90.     
  91.  
  92. import sys
  93. if __name__ == '__main__':
  94.     upgrade_dir(path(sys.argv[1]), path(sys.argv[2]))
  95.  
  96.