]> git.donarmstrong.com Git - lilypond.git/blobdiff - bin/make-patch.py
release: 0.1.63
[lilypond.git] / bin / make-patch.py
index 6600ec2e7dbbbfb7788a110497b1234d64a1b5ef..9909bf9b730be6beebe2095c8603fb0dae979f19 100755 (executable)
@@ -19,7 +19,7 @@ import getopt
 import pipes
 
 
-mp_version = '0.3'
+mp_version = '0.51'
 
 class Options:
     def __init__(self):
@@ -32,25 +32,16 @@ options = Options()
 def help():
     sys.stdout.write(
        'Generate a patch to go to this version.\n'
-       '  --from=FROM, -f FROM    old is FROM\n'
-       '  --to=TO, -t TO          to version TO\n'  
-       
+       '  -f, --from=FROM      old is FROM\n'
+       '  -d, --dir=DIR        diff to (or from) directory DIR\n'  
+       '  -r, --release        diff against latest release\n'  
+       '  -t, --to=TO          to version TO\n'  
        )
 
-
-
 def untar(fn):
     # os.system('pwd');
-    sys.stderr.write('untarring ' + fn)
-# can't seem to fix errors:
-# gzip: stdout: Broken pipe
-# tar: Child returned status 1
-#   os.system ('tar xzf ' + fn)
-#   sys.stderr.write('\n')
-# ugh, even this does not work, but one error message less :-)
+    sys.stderr.write('untarring ' + fn + '\n')
     os.system ('gzip --quiet -dc ' + fn + '| tar xf - ')
-# so print soothing message:
-    sys.stderr.write('make-patch:ugh: Please ignore error: gzip: stdout: Broken pipe\n');
     sys.stderr.flush()
 
 
@@ -58,12 +49,16 @@ header = 'Generated by make-patch, old = %s, new = %s\n\
 \n\
 usage \n\
 \n\
-       cd lilypond-source-dir; patch -E -p0 < %s\n\
+       cd lilypond-source-dir; patch -E -p1 < %s\n\
 \n\
 Patches do not contain automatically generated files, \n\
-i.e. you should rerun configure\n\n'
+i.e. you should rerun autoconf and configure\n\n'
+
+# ugh, how to get rid of .tex files generated by lily?
+# pats = ['*.lsm', 'configure', '*.txt', '.dstreamrc', 'lilypond.spec']
+pats = ['*.lsm', 'configure', '*.txt', '.dstreamrc', 'lilypond.spec', 
+  'AUTHORS', 'INSTALL', 'PATCHES']
 
-pats = ['*.lsm', 'configure', '*.txt', 'lilypond.spec']
 def remove_automatic(dirnames):
     files = []
     files = files + multiple_find(pats, dirnames)
@@ -71,52 +66,58 @@ def remove_automatic(dirnames):
     for f in files:
        os.remove(f)
 
-def makepatch(fv, tv, patfile_nm):
-    import tempfile
-    prev_cwd = os.getcwd();
-    os.chdir ('/tmp')
-    untar(released_tarball(fv))
-    untar(released_tarball(tv))
-    remove_automatic([dirname(fv), dirname(tv)])
+def makepatch(fromdir, todir, patfile_nm):
 
-    os.chdir(dirname(tv))
-    
-    if not patfile_nm:
-       patfile_nm = '../patch-%s' % version_tuple_to_str(tv)
+    remove_automatic([fromdir, todir])
 
+    os.chdir(todir)
+    
     f = open(patfile_nm, 'w')
     f.write(header %\
-           (version_tuple_to_str(fv), version_tuple_to_str(tv), \
+           (fromdir, todir, \
             os.path.basename(patfile_nm)))
     f.close()
            
     sys.stderr.write('diffing to %s... ' % patfile_nm)
-    os.system('diff -urN ../%s . >> %s' % (dirname(fv), patfile_nm))
-    #os.system('gzip -9f %s' % patfile_nm)
-    os.chdir('/tmp')
-
-    sys.stderr.write('cleaning ... ')
-    os.system('rm -fr %s %s' % (dirname(tv), dirname(fv)))
-    sys.stderr.write('\n')
-    os.chdir(prev_cwd)
-    
+    os.system('pwd')
+    print ('diff -urN ../%s . >> %s' % (fromdir, patfile_nm))
+    os.system('diff -urN ../%s . >> %s' % (fromdir, patfile_nm))
+    os.system('gzip --quiet -9f %s' % patfile_nm)
+   
 def main():
+    os.environ['GZIP'] = '-q'
     sys.stderr.write('This is make-patch version %s\n' % mp_version)
     (cl_options, files) = getopt.getopt(sys.argv[1:], 
-                                       'hf:o:t:', ['output=', 'help', 'from=', 'to='])
+       'd:hf:o:rt:', ['output=', 'help', 'from=', 'to='])
     outfn = ''
+    srcdir = ''
+
+    # on default, we want to diff tar balls, again :-)
+    from_b=1
+    to_b=1
     for opt in cl_options:
        o = opt[0]
        a = opt[1]
        if o == '--from' or o == '-f':
             options.from_version = version_str_to_tuple(a)
+            from_b=1
        elif o == '--to' or o == '-t':
-           options.to_version = version_str_to_tuple(a)
-       elif o== '--help' or o == '-h':
+            options.to_version = version_str_to_tuple(a)
+            to_b=1
+       elif o == '--dir' or o == '-d':
+           srcdir = a;
+           to_b=0
+       elif o == '--help' or o == '-h':
            help()
            return 0;
        elif o == '--output' or o == '-o':
            outfn = os.path.join(os.getcwd(), a)
+       elif o == '--release' or o == '-r':
+# huh?
+#          if options.from_version[3]:
+#              options.from_version[3] = '';
+           options.from_version = (options.from_version[0], 
+               options.from_version[1], options.from_version[2], '');
        else:
            raise getopt.error
 
@@ -124,7 +125,62 @@ def main():
        pn = 'patch-%s' % version_tuple_to_str(options.to_version)
        outfn =  os.path.join(os.getcwd(), pn)
 
-    makepatch(options.from_version, options.to_version, outfn)
+    import tempfile
+    prev_cwd = os.getcwd();
+
+    os.system('rm -rf /tmp/make-patch') 
+    try:
+       os.mkdir ('/tmp/make-patch')
+    except:
+       pass
+       
+    fromdir = dirname(options.from_version)
+    todir =  dirname(options.to_version)
+
+    diffdir = ''
+    if srcdir != '':
+           diffdir = '/tmp/make-patch/' + 'lilypond-%s'\
+               % version_tuple_to_str(options.to_version)
+
+    if from_b != 0 or (from_b == 0 and to_b == 0):
+       os.chdir ('/tmp/make-patch')
+       untar(released_tarball(options.from_version))
+       os.chdir(prev_cwd)
+    else:
+       fromdir = diffdir
+       sys.stderr.write('copying ' + srcdir + ' to ' + diffdir + '\n')
+       # os.system('cp -pr %s %s' % (srcdir, diffdir))
+       os.system('mkdir -p %s '% (diffdir))
+       os.chdir (srcdir)
+       os.system('tar cf - --exclude out . | tar -xf - -C %s' 
+         % diffdir)
+
+    if to_b != 0:
+       os.chdir ('/tmp/make-patch')
+       untar(released_tarball(options.to_version))
+       os.chdir(prev_cwd)
+    else:
+       todir = diffdir
+       sys.stderr.write('copying ' + srcdir + ' to ' + diffdir + '\n')
+       os.system('mkdir -p %s '% (diffdir))
+       # os.system('cp -pr %s %s'  (srcdir, diffdir))%
+       os.chdir (srcdir)
+       os.system('tar -cf - --exclude out . | tar -xf - -C %s '
+         % diffdir)
+
+    os.chdir('/tmp/make-patch')
+    os.chdir(todir)
+    # os.system('rm -f *.aux *.dvi *.midi *.log *.ps *.tex *.ly')
+    os.chdir ('/tmp/make-patch')
+
+    makepatch(fromdir, todir, outfn) 
+
+    os.chdir('/tmp/make-patch')
+    sys.stderr.write('cleaning ... ')
+    os.system('rm -fr %s %s' % (fromdir, todir))
+    sys.stderr.write('\n')
+    os.chdir(prev_cwd)
 
 if __name__ == '__main__':
     main()
+