]> git.donarmstrong.com Git - lilypond.git/blob - bin/make-patch.in
release: 0.1.49
[lilypond.git] / bin / make-patch.in
1 #!@PYTHON@
2
3 import sys
4 import os
5
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)
12
13 lilypath = lilypath + '/bin/'
14 sys.path.append(lilypath)
15
16
17 from lilypython import *
18 import getopt
19 import pipes
20
21
22 mp_version = '0.3'
23
24 class Options:
25     def __init__(self):
26         self.to_version = lilydirs.version_tuple()
27         self.from_version = prev_version(self.to_version)
28
29 options = Options()
30         
31
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         
38         )
39
40
41
42 def untar(fn):
43     # os.system('pwd');
44     sys.stderr.write('untarring ' + fn + '\n')
45 # can't seem to fix errors:
46 # gzip: stdout: Broken pipe
47 # tar: Child returned status 1
48 #   os.system ('tar xzf ' + fn)
49 #   sys.stderr.write('\n')
50 # ugh, even this does not work, but one error message less :-)
51     os.system ('gzip --quiet -dc ' + fn + '| tar xf - ')
52 # so print soothing message:
53 #    sys.stderr.write('make-patch:ugh: Please ignore error: gzip: stdout: Broken pipe\n');
54     sys.stderr.flush()
55
56
57 header = 'Generated by make-patch, old = %s, new = %s\n\
58 \n\
59 usage \n\
60 \n\
61         cd lilypond-source-dir; patch -E -p0 < %s\n\
62 \n\
63 Patches do not contain automatically generated files, \n\
64 i.e. you should rerun configure\n\n'
65
66 pats = ['*.lsm', 'configure', '*.txt', 'lilypond.spec']
67 def remove_automatic(dirnames):
68     files = []
69     files = files + multiple_find(pats, dirnames)
70
71     for f in files:
72         os.remove(f)
73
74 def makepatch(fv, tv, patfile_nm):
75     import tempfile
76     prev_cwd = os.getcwd();
77     try:
78         os.mkdir ('/tmp/make-patch');
79     except:
80         pass
81         
82     os.chdir ('/tmp/make-patch');
83     untar(released_tarball(fv))
84     untar(released_tarball(tv))
85     remove_automatic([dirname(fv), dirname(tv)])
86
87     os.chdir(dirname(tv))
88     
89     if not patfile_nm:
90         patfile_nm = '../patch-%s' % version_tuple_to_str(tv)
91
92     f = open(patfile_nm, 'w')
93     f.write(header %\
94             (version_tuple_to_str(fv), version_tuple_to_str(tv), \
95              os.path.basename(patfile_nm)))
96     f.close()
97             
98     sys.stderr.write('diffing to %s... ' % patfile_nm)
99     os.system('diff -urN ../%s . >> %s' % (dirname(fv), patfile_nm))
100     #os.system('gzip -9f %s' % patfile_nm)
101     os.chdir('/tmp/make-patch')
102
103     sys.stderr.write('cleaning ... ')
104     os.system('rm -fr %s %s' % (dirname(tv), dirname(fv)))
105     sys.stderr.write('\n')
106     os.chdir(prev_cwd)
107     
108 def main():
109     os.environ['GZIP'] = '-q'
110     sys.stderr.write('This is make-patch version %s\n' % mp_version)
111     (cl_options, files) = getopt.getopt(sys.argv[1:], 
112                                         'hf:o:t:', ['output=', 'help', 'from=', 'to='])
113     outfn = ''
114     for opt in cl_options:
115         o = opt[0]
116         a = opt[1]
117         if o == '--from' or o == '-f':
118              options.from_version = version_str_to_tuple(a)
119         elif o == '--to' or o == '-t':
120             options.to_version = version_str_to_tuple(a)
121         elif o== '--help' or o == '-h':
122             help()
123             return 0;
124         elif o == '--output' or o == '-o':
125             outfn = os.path.join(os.getcwd(), a)
126         else:
127             raise getopt.error
128
129     if not outfn:
130         pn = 'patch-%s' % version_tuple_to_str(options.to_version)
131         outfn =  os.path.join(os.getcwd(), pn)
132
133     makepatch(options.from_version, options.to_version, outfn)
134
135 if __name__ == '__main__':
136     main()