X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=stepmake%2Fbin%2Fpackage-diff.py;h=b1fe324985e0d8963afcdbda1965a1d14fc11c34;hb=ecc78dcec0897404eb18f103a82d7b192184084b;hp=dfbbebc988e530b1afea9f9dbaabdf35e1bd51e7;hpb=1cf3d59c1559fb9774c4c1c8cae155cfe54a927c;p=lilypond.git diff --git a/stepmake/bin/package-diff.py b/stepmake/bin/package-diff.py index dfbbebc988..b1fe324985 100644 --- a/stepmake/bin/package-diff.py +++ b/stepmake/bin/package-diff.py @@ -1,16 +1,31 @@ #!@PYTHON@ -name = 'package-diff' -version = '0.62' +# +# TODO: CLEAN THIS UP. +# + +import find import sys import os -from string import * +import string import getopt import pipes - -def program_id (): - return name + ' ' + version; +topdir = '' +def gulp_file(f): + try: + i = open(f) + i.seek (0, 2) + n = i.tell () + i.seek (0,0) + except: + sys.stderr.write ("can't open file: %s\n" % f) + return '' + s = i.read (n) + if len (s) <= 0: + sys.stderr.write ("gulped emty file: %s\n" % f) + i.close () + return s def mailaddress(): @@ -20,8 +35,6 @@ def mailaddress(): return '(address unknown)' -def identify (): - sys.stdout.write (program_id () + '\n') class Flags: def __init__ (self): @@ -35,7 +48,7 @@ def help (): sys.stdout.write ( 'Generate a patch to go to current version\n' ' -f, --from=FROM old is FROM\n' - ' -h, --help print this help\n' + ' -h, --help print this help\n' ' -p, --package=DIR specify package\n' ' -r, --release diff against latest release\n' ' -t, --to=TO to version TO\n' @@ -43,20 +56,50 @@ def help (): ' -T, --dir-to=TO diff to directory TO\n' ) +def cleanup (): + global from_diff, to_diff, prev_cwd + os.chdir ('/tmp/package-diff') + sys.stderr.write ('Cleaning ... ') + os.system ('rm -fr %s %s' % (from_diff, to_diff)) + sys.stderr.write ('\n') + os.chdir (prev_cwd) + def untar (fn): # os.system ('pwd'); - sys.stderr.write ('untarring ' + fn + '\n') + try: + open (fn) + except: + sys.stderr.write ("Can't find tarball: %s\n" % fn) + cleanup () + sys.exit (1) + sys.stderr.write ("Untarring: %s\n" % fn) os.system ('gzip --quiet -dc ' + fn + '| tar xf - ') sys.stderr.flush () def remove_automatic (dirnames): files = [] - # urg, again? - from flower import * - files = files + multiple_find (pats, dirnames) + for d in dirnames: + try: + for p in pats: + files = files + find.find (p, d) + except: + sys.stderr.write ("Can't find dir: %s\n" % d) + cleanup () + sys.exit (1) + + dirs = map (lambda d: find.find ('out', d), dirnames) + dirs = reduce (lambda x,y: x + y, dirs) + + print dirs + for d in dirs: + files = files + find.find ('*', d) + for f in files: - os.remove (f) + try: + os.remove (f) + except: + sys.stderr.write ("can't remove: `" + f + "'\n'") def dirname (v): # urg, again? @@ -72,41 +115,40 @@ def released_tarball(v): def remove_configure (dir): os.chdir (dir) + # ugh os.system ('rm -f *.ly') # should do 'make distclean ?' - os.system ('rm -rf debian/out') - os.system ('rm -f Makefile config.cache config.h config.hh config.log config.make config.status') - os.system ('rm -f stepmake/Makefile stepmake/config.hh stepmake/config.log stepmake/config.make') + os.system ('rm -rf debian/out GNUmakefile config.cache config.h config.hh config.log config.make config.status configure stepmake/GNUmakefile stepmake/config.hh stepmake/config.log stepmake/config.status stepmake/config.make') # ugh: symlinks - os.system ('rm -f stepmake/stepmake/stepmake') - os.system ('rm -f stepmake/stepmake/bin') + os.system ('rm -f stepmake/stepmake/stepmake stepmake/stepmake/bin') # ugh, how to get rid of .tex files generated by lily? -pats = ['.dstreamrc', 'configure', '*.diff', '*.diff.gz', '*.lsm', '*.pyc', '*.spec', '*.txt'] - -header = 'Generated by %s using %s,\ -\nFrom = %s, To = %s\n\ -\n\ -usage \n\ -\n\ - cd %s-source-dir; patch -E -p1 < %s\n\ -\n\ -Patches do not contain automatically generated files \n\ -or (urg) empty directories, \n\ -i.e., you should rerun autoconf, configure \n\ -and possibly make outdirs.\n\n' +pats = ['configure', '*.diff', '*.diff.gz', '*.pyc', '*.txt'] -def makediff (fromdir, todir, patch_name): +header = """Generated by %s, +From = %s, To = %s + +usage + + cd %s-source-dir; patch -E -p1 < %s +Patches do not contain automatically generated files +or (urg) empty directories, +i.e., you should rerun autoconf, configure + +""" + + +def makediff (fromdir, todir, patch_name): # urg, again? from packagepython import * remove_automatic ([fromdir, todir]) - + # ugh remove_configure (fromdir) remove_configure (todir) @@ -119,29 +161,11 @@ def makediff (fromdir, todir, patch_name): toname = os.path.basename (toname) fromdir = '../' + fromname - f = open (patch_name, 'w') + f = open (patch_name, 'wb') f.write (header % - (mailaddress (), program_id (), fromname, toname, + (mailaddress (), fromname, toname, flags.package.name, os.path.basename (patch_name))) - # write state vector - f.write ('--state\n') - state_vec = gulp_file ('make/STATE-VECTOR') - from_str = version_tuple_to_str (flags.from_version) - to_str = version_tuple_to_str (flags.to_version) - i = regex.search (from_str, state_vec) - if i == -1: - f.write (from_str + '\n') - else: - state_vec = state_vec[i:] - i = regex.search (to_str, state_vec) - if i == -1: - f.write (to_str + '\n') - else: - i = i + len (version_tuple_to_str (flags.to_version)) + 1 - state_vec = state_vec[:i] - f.write (state_vec) - f.write ('++state\n') f.close () sys.stderr.write ('diffing to %s... ' % patch_name) @@ -150,133 +174,127 @@ def makediff (fromdir, todir, patch_name): os.system ('diff -urN %s . >> %s' % (fromdir, patch_name)) os.system ('gzip --quiet -9f %s' % patch_name) -def main (): - os.environ['GZIP'] = '-q' - identify () - print 'argv: ' + join (sys.argv[2:]) - (options, files) = getopt.getopt (sys.argv[1:], - 'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to=']) - - patch_name = '' + +os.environ['GZIP'] = '-q' +print 'argv: ' + string.join (sys.argv[2:]) +(options, files) = getopt.getopt (sys.argv[1:], + 'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to=']) + +patch_name = '' +from_src = '' +to_src = '' +release=0 +from_version=0 +to_version=0 +for opt in options: + o = opt[0] + a = opt[1] + if o == '--from' or o == '-f': + from_version = a + elif o == '--to' or o == '-t': + to_version = a + elif o == '--dir-from' or o == '-F': + from_src = a; + elif o == '--dir-to' or o == '-T': + to_src = a; + elif o == '--help' or o == '-h': + help () + sys.exit (0) + elif o == '--output' or o == '-o': + patch_name = os.path.join (os.getcwd (), a) + elif o == '-p' or o == '--package': + topdir = a + elif o == '--release' or o == '-r': + release=1 + else: + raise getopt.error + +sys.path.append (topdir + '/stepmake/bin') +from packagepython import * +package = Package (topdir) +flags.package = package +packager = Packager () + +if from_src: + from_package = Package (from_src) + flags.from_version = from_package.version +if from_version: + flags.from_version = version_str_to_tuple (from_version) from_src = '' + +if to_src: + to_package = Package (to_src) + flags.to_version = to_package.version +if to_version: + flags.to_version = version_str_to_tuple (to_version) to_src = '' - release=0 - from_version=0 - to_version=0 - for opt in options: - o = opt[0] - a = opt[1] - if o == '--from' or o == '-f': - from_version = a - elif o == '--to' or o == '-t': - to_version = a - elif o == '--dir-from' or o == '-F': - from_src = a; - elif o == '--dir-to' or o == '-T': - to_src = a; - elif o == '--help' or o == '-h': - help () - return 0; - elif o == '--output' or o == '-o': - patch_name = os.path.join (os.getcwd (), a) - elif o == '-p' or o == '--package': - topdir = a - elif o == '--release' or o == '-r': - release=1 - else: - raise getopt.error - - sys.path.append (topdir + '/stepmake/bin') - from packagepython import * - package = Package (topdir) - flags.package = package - packager = Packager () - from flower import * - if from_src: - from_package = Package (from_src) - flags.from_version = from_package.version - if from_version: - flags.from_version = version_str_to_tuple (from_version) - from_src = '' - - if to_src: - to_package = Package (to_src) - flags.to_version = to_package.version - if to_version: - flags.to_version = version_str_to_tuple (to_version) - to_src = '' - - if not flags.to_version: - flags.to_version = package.version +if not flags.to_version: + flags.to_version = package.version - if not flags.from_version: - flags.from_version = prev_version (flags.to_version) +if not flags.from_version: + flags.from_version = prev_version (flags.to_version) - # urg - if release: - flags.from_version = (flags.from_version[0], - flags.from_version[1], flags.from_version[2], ''); +# urg +if release: + flags.from_version = (flags.from_version[0], + flags.from_version[1], flags.from_version[2], ''); - import tempfile - prev_cwd = os.getcwd (); +import tempfile +prev_cwd = os.getcwd (); - os.system ('rm -rf /tmp/package-diff') - try: - os.mkdir ('/tmp/package-diff') - except: - pass - - from_diff = dirname (flags.from_version) - to_diff = dirname (flags.to_version) - if to_diff == from_diff: - if from_src: - from_diff = from_diff + '.src' - elif to_src: - to_diff = to_diff + '.src' - else: - sys.stderr.write (name + ': nothing to do: to == from == ' + from_diff + '\n') - sys.exit (1) - - if not patch_name: - pn = to_diff + '.diff' - patch_name = os.path.join (os.getcwd (), pn) - - from_diff = '/tmp/package-diff/' + from_diff - to_diff = '/tmp/package-diff/' + to_diff - - if not from_src: - os.chdir ('/tmp/package-diff') - untar (released_tarball (flags.from_version)) - os.chdir (prev_cwd) - else: - sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n') - # os.system ('cp -pr %s %s' % (srcdir, from_diff)) - os.system ('mkdir -p %s '% (from_diff)) - os.chdir (from_src) - os.system ('tar cf - --exclude out --exclude out-www . \ - | tar -xf - -C %s' % from_diff) - - - if not to_src: - os.chdir ('/tmp/package-diff') - untar (released_tarball (flags.to_version)) - os.chdir (prev_cwd) +os.system ('rm -rf /tmp/package-diff') +try: + os.mkdir ('/tmp/package-diff') +except: + pass + +from_diff = dirname (flags.from_version) +to_diff = dirname (flags.to_version) +if to_diff == from_diff: + if from_src: + from_diff = from_diff + '.src' + elif to_src: + to_diff = to_diff + '.src' else: - sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n') - os.system ('mkdir -p %s '% (to_diff)) - # os.system ('cp -pr %s %s' (to_src, to_diff))% - os.chdir (to_src) - os.system ('tar -cf - --exclude out --exclude out-www . \ - . | tar -xf - -C %s ' % to_diff) + sys.stderr.write (name + ': nothing to do: to == from == ' + from_diff + '\n') + sys.exit (1) - os.chdir (to_diff) - makediff (from_diff, to_diff, patch_name) +if not patch_name: + pn = to_diff + '.diff' + patch_name = os.path.join (os.getcwd (), 'out') + patch_name = os.path.join (patch_name, pn) +from_diff = '/tmp/package-diff/' + from_diff +to_diff = '/tmp/package-diff/' + to_diff + +if not from_src: os.chdir ('/tmp/package-diff') - sys.stderr.write ('cleaning ... ') - os.system ('rm -fr %s %s' % (from_diff, to_diff)) - sys.stderr.write ('\n') + untar (released_tarball (flags.from_version)) os.chdir (prev_cwd) +else: + sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n') + # os.system ('cp -pr %s %s' % (srcdir, from_diff)) + os.system ('mkdir -p %s '% (from_diff)) + os.chdir (from_src) + os.system ('tar cf - --exclude out --exclude out-www . \ + | tar -xf - -C %s' % from_diff) + + +if not to_src: + os.chdir ('/tmp/package-diff') + untar (released_tarball (flags.to_version)) + os.chdir (prev_cwd) +else: + sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n') + os.system ('mkdir -p %s '% (to_diff)) + # os.system ('cp -pr %s %s' (to_src, to_diff))% + os.chdir (to_src) + os.system ('tar -cf - --exclude out --exclude out-www . \ + . | tar -xf - -C %s ' % to_diff) + +os.chdir (to_diff) +makediff (from_diff, to_diff, patch_name) + +cleanup () -main ()