From 8c448a5d654e60e56968793aa4e8b266943dda84 Mon Sep 17 00:00:00 2001 From: fred Date: Fri, 31 Jul 1998 11:08:11 +0000 Subject: [PATCH] lilypond-1.0.1 --- stepmake/bin/package-diff.py | 282 +++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 stepmake/bin/package-diff.py diff --git a/stepmake/bin/package-diff.py b/stepmake/bin/package-diff.py new file mode 100644 index 0000000000..dfbbebc988 --- /dev/null +++ b/stepmake/bin/package-diff.py @@ -0,0 +1,282 @@ +#!@PYTHON@ + +name = 'package-diff' +version = '0.62' + +import sys +import os +from string import * +import getopt +import pipes + +def program_id (): + return name + ' ' + version; + + +def mailaddress(): + try: + return os.environ['MAILADDRESS'] + except KeyError: + return '(address unknown)' + + +def identify (): + sys.stdout.write (program_id () + '\n') + +class Flags: + def __init__ (self): + self.to_version = 0 + self.from_version = 0 + self.package = 0 + +flags = Flags () + +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' + ' -p, --package=DIR specify package\n' + ' -r, --release diff against latest release\n' + ' -t, --to=TO to version TO\n' + ' -F, --dir-from=FROM diff from directory FROM\n' + ' -T, --dir-to=TO diff to directory TO\n' + ) + +def untar (fn): + # os.system ('pwd'); + sys.stderr.write ('untarring ' + fn + '\n') + 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 f in files: + os.remove (f) + +def dirname (v): + # urg, again? + from packagepython import * + return flags.package.name + '-' + version_tuple_to_str (v) + +def tarball(v): + return dirname (v) + '.tar.gz' + +def released_tarball(v): + return flags.package.release_dir + 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') + + # ugh: symlinks + os.system ('rm -f stepmake/stepmake/stepmake') + os.system ('rm -f 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' + +def makediff (fromdir, todir, patch_name): + + # urg, again? + from packagepython import * + + remove_automatic ([fromdir, todir]) + + # ugh + remove_configure (fromdir) + remove_configure (todir) + os.chdir (todir) + + fromname = fromdir + toname = todir + if os.path.dirname (fromname) == os.path.dirname (toname): + fromname = os.path.basename (fromname) + toname = os.path.basename (toname) + fromdir = '../' + fromname + + f = open (patch_name, 'w') + f.write (header % + (mailaddress (), program_id (), 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) + os.system ('pwd') + print ('diff -urN %s . >> %s' % (fromdir, 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 = '' + 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 () + 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.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], ''); + + 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) + 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) + + 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) + +main () -- 2.39.5