]> git.donarmstrong.com Git - lilypond.git/blobdiff - stepmake/bin/package-diff.py
release: 1.5.19
[lilypond.git] / stepmake / bin / package-diff.py
index 927cb0999ef78c81708d47500889b4f751358f7c..357ab5046a9924737935d83436f3221a55a02a6a 100644 (file)
@@ -1,12 +1,45 @@
 #!@PYTHON@
 
+#
+# TODO: CLEAN THIS UP, merge packagepython.py and release.py 
+#
 
-import find
+
+
+import fnmatch
 import sys
 import os
+import re
 import string
 import getopt
 import pipes
+
+
+_debug = 0
+
+_prune = ['(*)']
+
+def find(pattern, dir = os.curdir):
+        list = []
+        names = os.listdir(dir)
+        names.sort()
+        for name in names:
+                if name in (os.curdir, os.pardir):
+                        continue
+                fullname = os.path.join(dir, name)
+                if fnmatch.fnmatch(name, pattern):
+                        list.append(fullname)
+                if os.path.isdir(fullname) and not os.path.islink(fullname):
+                        for p in _prune:
+                                if fnmatch.fnmatch(name, p):
+                                        if _debug: print "skip", `fullname`
+                                        break
+                        else:
+                                if _debug: print "descend into", `fullname`
+                                list = list + find(pattern, fullname)
+        return list
+
+
 topdir = ''
 def gulp_file(f):
        try:
@@ -45,6 +78,8 @@ def help ():
                'Generate a patch to go to current version\n'
                '  -f, --from=FROM      old is FROM\n'
                '  -h, --help           print this help\n'
+               '      --outdir=DIR     generate in DIR\n'
+               '  -o, --output=NAME    write patch to NAME\n'
                '  -p, --package=DIR    specify package\n'
                '  -r, --release        diff against latest release\n'  
                '  -t, --to=TO          to version TO\n'  
@@ -53,12 +88,12 @@ def help ():
                )
 
 def cleanup ():
-       global from_diff, to_diff, prev_cwd
+       global from_diff, to_diff, original_dir
        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)
+       os.chdir (original_dir)
 
 def untar (fn):
        # os.system ('pwd');
@@ -78,18 +113,20 @@ def remove_automatic (dirnames):
        for d in dirnames:
                try:
                        for p in pats:
-                               files = files + find.find (p, d)
+                               files = files + 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 = map (lambda d: find ('out*', d), dirnames)
        dirs = reduce (lambda x,y:  x + y, dirs)
        
-       print dirs 
+       #print dirs
+
        for d in dirs:
-               files = files + find.find ('*', d)
+               if os.path.isdir (d):
+                       files = files + find ('*', d)
                
        for f in files:
                try:
@@ -134,7 +171,9 @@ usage
 
 Patches do not contain automatically generated files 
 or (urg) empty directories, 
-i.e., you should rerun autoconf, configure """
+i.e., you should rerun autoconf, configure
+
+"""
 
 
 def makediff (fromdir, todir, patch_name):
@@ -164,17 +203,19 @@ def makediff (fromdir, todir, patch_name):
                        
        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))
+       print ('diff -purN %s . >> %s' % (fromdir, patch_name))
+       os.system ('diff -purN %s . >> %s' % (fromdir, patch_name))
        os.system ('gzip --quiet -9f %s' % patch_name)
    
 
 os.environ['GZIP'] = '-q'
-print 'argv: ' + string.join (sys.argv[2:])
+print 'argv: ' + string.join (sys.argv[1:])
 (options, files) = getopt.getopt (sys.argv[1:], 
-       'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to='])
+       'hF:f:o:p:rT:t:', ['conf=', 'from=', 'dir-from=', 'dir-to=', 'help', 'outdir=', 'output=', 'package=', 'release', 'to='])
 
 patch_name = ''
+conf = ''
+outdir = ''
 from_src = ''
 to_src = ''
 release=0
@@ -194,8 +235,12 @@ for opt in options:
        elif o == '--help' or o == '-h':
                help ()
                sys.exit (0)
+       elif o == '--outdir':
+               outdir = a
+       elif o == '--conf':
+               conf = a
        elif o == '--output' or o == '-o':
-               patch_name = os.path.join (os.getcwd (), a)
+               patch_name = a
        elif o == '-p' or o == '--package':
                topdir = a
        elif o == '--release' or o == '-r':
@@ -235,7 +280,7 @@ if release:
                flags.from_version[1], flags.from_version[2], '');
 
 import tempfile
-prev_cwd = os.getcwd ();
+original_dir = os.getcwd ();
 
 os.system ('rm -rf /tmp/package-diff') 
 try:
@@ -251,13 +296,18 @@ if to_diff == from_diff:
        elif to_src:
              to_diff = to_diff + '.src'
        else:
-             sys.stderr.write (name + ': nothing to do: to == from == ' + from_diff + '\n')
+             sys.stderr.write (patch_name + ': nothing to do: to == from = ' + from_diff + '\n')
              sys.exit (1)
 
+def compat_abspath (path):
+       return os.path.normpath (os.path.join (os.getcwd (), path))
+
+if conf and not outdir:
+       outdir = 'out-' + conf
+
 if not patch_name:
-       pn = to_diff + '.diff'
-       patch_name =  os.path.join (os.getcwd (), 'out')
-       patch_name =  os.path.join (patch_name, pn)
+       to_diff + '.diff'
+patch_name = compat_abspath (os.path.join (outdir, to_diff + '.diff'))
 
 from_diff = '/tmp/package-diff/' + from_diff
 to_diff =  '/tmp/package-diff/' + to_diff
@@ -265,7 +315,7 @@ 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)
+       os.chdir (original_dir)
 else:
        sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n')
        # os.system ('cp -pr %s %s' % (srcdir, from_diff))
@@ -278,7 +328,7 @@ else:
 if not to_src:
        os.chdir ('/tmp/package-diff')
        untar (released_tarball (flags.to_version))
-       os.chdir (prev_cwd)
+       os.chdir (original_dir)
 else:
        sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n')
        os.system ('mkdir -p %s '% (to_diff))