lilypond-1.3.124
[lilypond.git] / bin / make-patch.in
bloba2cbd77e7d6c7ec856306cc9b9a56527d16c94a1
1 #!@PYTHON@
3 import sys
4 import os
6 lilypath =''
7 try:
8     lilypath = os.environ['LILYPOND_SOURCEDIR'] + '/'
9 except KeyError:
10     print 'Please set LILYPOND_SOURCEDIR to the toplevel source, eg LILYPOND_SOURCEDIR=/home/foobar/lilypond-1.2.3/'
11     sys.exit(1)
13 lilypath = lilypath + '/bin/'
14 sys.path.append(lilypath)
17 from lilypython import *
18 import getopt
19 import pipes
22 mp_version = '0.5'
24 class Options:
25     def __init__(self):
26         self.to_version = lilydirs.version_tuple()
27         self.from_version = prev_version(self.to_version)
29 options = Options()
30         
32 def help():
33     sys.stdout.write(
34         'Generate a patch to go to this version.\n'
35         '  --from=FROM, -f FROM    old is FROM\n'
36         '  --to=TO, -t TO          to version TO\n'  
37         '  --dir=DIR, -d TO        directory\n'  
38         )
42 def untar(fn):
43     # os.system('pwd');
44     sys.stderr.write('untarring ' + fn + '\n')
45     os.system ('gzip --quiet -dc ' + fn + '| tar xf - ')
46     sys.stderr.flush()
49 header = 'Generated by make-patch, old = %s, new = %s\n\
50 \n\
51 usage \n\
52 \n\
53         cd lilypond-source-dir; patch -E -p0 < %s\n\
54 \n\
55 Patches do not contain automatically generated files, \n\
56 i.e. you should rerun configure\n\n'
58 # ugh, how to get rid of .tex files generated by lily?
59 pats = ['core', '*.lsm', 'configure', '*.P', '*.txt', 'feta[0-9][0-9]*.ly', 'feta[0-9][0-9]*.tex', '*.orig', '*.rej', '*bla*', 'x', '*.dvi', '*.aux', '*.log', '*.ps', '*.gif', '*.midi', 'lilypond.spec', 'Makefile.am', 'Makefile.in', 'lexer.cc', 'parser.cc', 'patch-*']
61 def remove_automatic(dirnames):
62     files = []
63     files = files + multiple_find(pats, dirnames)
65     for f in files:
66         os.remove(f)
68 def makepatch(fromdir, todir, patfile_nm):
70     remove_automatic([fromdir, todir])
72     os.chdir(todir)
73     
74     f = open(patfile_nm, 'w')
75     f.write(header %\
76             (fromdir, todir, \
77              os.path.basename(patfile_nm)))
78     f.close()
79             
80     sys.stderr.write('diffing to %s... ' % patfile_nm)
81     os.system('pwd')
82     print ('diff -urN ../%s . >> %s' % (fromdir, patfile_nm))
83     os.system('diff -urN ../%s . >> %s' % (fromdir, patfile_nm))
84     os.system('gzip -9f %s' % patfile_nm)
85    
86 def main():
87     os.environ['GZIP'] = '-q'
88     sys.stderr.write('This is make-patch version %s\n' % mp_version)
89     (cl_options, files) = getopt.getopt(sys.argv[1:], 
90                                         'hf:o:t:', ['output=', 'help', 'from=', 'to='])
91     outfn = ''
92     srcdir = './'
93     from_b=0
94     to_b=0
95     for opt in cl_options:
96         o = opt[0]
97         a = opt[1]
98         if o == '--from' or o == '-f':
99              options.from_version = version_str_to_tuple(a)
100              from_b=1
101         elif o == '--to' or o == '-t':
102              options.to_version = version_str_to_tuple(a)
103              to_b=1
104         elif o == '--dir' or o == '-d':
105             srcdir = a;
106         elif o== '--help' or o == '-h':
107             help()
108             return 0;
109         elif o == '--output' or o == '-o':
110             outfn = os.path.join(os.getcwd(), a)
111         else:
112             raise getopt.error
114     if not outfn:
115         pn = 'patch-%s' % version_tuple_to_str(options.to_version)
116         outfn =  os.path.join(os.getcwd(), pn)
118     import tempfile
119     prev_cwd = os.getcwd();
121     os.system('rm -rf /tmp/make-patch')
122     try:
123         os.mkdir ('/tmp/make-patch')
124     except:
125         pass
126         
127     fromdir = dirname(options.from_version)
128     todir =  dirname(options.to_version)
130     diffdir = ''
131     # always true, for now
132     if srcdir != '':
133             diffdir = '/tmp/make-patch/' + 'lilypond-%s'\
134                 % version_tuple_to_str(options.to_version)
136     if from_b != 0 or (from_b == 0 and to_b == 0):
137         os.chdir ('/tmp/make-patch')
138         untar(released_tarball(options.from_version))
139         os.chdir(prev_cwd)
140     else:
141         fromdir = diffdir
142         sys.stderr.write('copying ' + srcdir + ' to ' + diffdir + '\n')
143         os.system('cp -pr %s %s' % (srcdir, diffdir))
145     if to_b != 0:
146         os.chdir ('/tmp/make-patch')
147         untar(released_tarball(options.to_version))
148         os.chdir(prev_cwd)
149     else:
150         todir = diffdir
151         sys.stderr.write('copying ' + srcdir + ' to ' + diffdir + '\n')
152         os.system('cp -pr %s %s' % (srcdir, diffdir))
154     os.chdir(diffdir)
155     os.system('rm -f *.aux *.dvi *.midi *.log *.ps *.tex *.ly')
156     os.chdir ('/tmp/make-patch')
158     makepatch(fromdir, todir, outfn) 
160     os.chdir('/tmp/make-patch')
161     sys.stderr.write('cleaning ... ')
162     os.system('rm -fr %s %s' % (fromdir, todir))
163     sys.stderr.write('\n')
164     os.chdir(prev_cwd)
166 if __name__ == '__main__':
167     main()