13 return name + ' ' + version;
18 return os.environ['MAILADDRESS']
20 return '(address unknown)'
24 sys.stdout.write (program_id () + '\n')
36 'Generate a patch to go to current version\n'
37 ' -f, --from=FROM old is FROM\n'
38 ' -h, --help print this help\n'
39 ' -p, --package=DIR specify package\n'
40 ' -r, --release diff against latest release\n'
41 ' -t, --to=TO to version TO\n'
42 ' -F, --dir-from=FROM diff from directory FROM\n'
43 ' -T, --dir-to=TO diff to directory TO\n'
48 sys.stderr.write ('untarring ' + fn + '\n')
49 os.system ('gzip --quiet -dc ' + fn + '| tar xf - ')
52 def remove_automatic (dirnames):
56 files = files + multiple_find (pats, dirnames)
57 dirs = multiple_find (['out'], dirnames)
59 files = files + multiple_find (['*'], [d])
65 from packagepython import *
66 return flags.package.name + '-' + version_tuple_to_str (v)
69 return dirname (v) + '.tar.gz'
71 def released_tarball(v):
72 return flags.package.release_dir + tarball (v)
75 def remove_configure (dir):
78 os.system ('rm -f *.ly')
80 # should do 'make distclean ?'
81 os.system ('rm -rf debian/out')
82 os.system ('rm -f Makefile config.cache config.h config.hh config.log config.make config.status')
83 os.system ('rm -f stepmake/Makefile stepmake/config.hh stepmake/config.log stepmake/config.make')
86 os.system ('rm -f stepmake/stepmake/stepmake')
87 os.system ('rm -f stepmake/stepmake/bin')
90 # ugh, how to get rid of .tex files generated by lily?
91 pats = ['configure', '*.diff', '*.diff.gz', '*.pyc', '*.txt']
93 header = 'Generated by %s using %s,\
94 \nFrom = %s, To = %s\n\
98 cd %s-source-dir; patch -E -p1 < %s\n\
100 Patches do not contain automatically generated files \n\
101 or (urg) empty directories, \n\
102 i.e., you should rerun autoconf, configure \n\
103 and possibly make outdirs.\n\n'
105 def makediff (fromdir, todir, patch_name):
108 from packagepython import *
110 remove_automatic ([fromdir, todir])
113 remove_configure (fromdir)
114 remove_configure (todir)
119 if os.path.dirname (fromname) == os.path.dirname (toname):
120 fromname = os.path.basename (fromname)
121 toname = os.path.basename (toname)
122 fromdir = '../' + fromname
124 f = open (patch_name, 'w')
126 (mailaddress (), program_id (), fromname, toname,
127 flags.package.name, os.path.basename (patch_name)))
130 f.write ('--state\n')
131 state_vec = gulp_file ('make/STATE-VECTOR')
132 from_str = version_tuple_to_str (flags.from_version)
133 to_str = version_tuple_to_str (flags.to_version)
134 i = regex.search (from_str, state_vec)
136 f.write (from_str + '\n')
138 state_vec = state_vec[i:]
139 i = regex.search (to_str, state_vec)
141 f.write (to_str + '\n')
143 i = i + len (version_tuple_to_str (flags.to_version)) + 1
144 state_vec = state_vec[:i]
146 f.write ('++state\n')
149 sys.stderr.write ('diffing to %s... ' % patch_name)
151 print ('diff -urN %s . >> %s' % (fromdir, patch_name))
152 os.system ('diff -urN %s . >> %s' % (fromdir, patch_name))
153 os.system ('gzip --quiet -9f %s' % patch_name)
156 os.environ['GZIP'] = '-q'
158 print 'argv: ' + join (sys.argv[2:])
159 (options, files) = getopt.getopt (sys.argv[1:],
160 'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to='])
171 if o == '--from' or o == '-f':
173 elif o == '--to' or o == '-t':
175 elif o == '--dir-from' or o == '-F':
177 elif o == '--dir-to' or o == '-T':
179 elif o == '--help' or o == '-h':
182 elif o == '--output' or o == '-o':
183 patch_name = os.path.join (os.getcwd (), a)
184 elif o == '-p' or o == '--package':
186 elif o == '--release' or o == '-r':
191 sys.path.append (topdir + '/stepmake/bin')
192 from packagepython import *
193 package = Package (topdir)
194 flags.package = package
195 packager = Packager ()
199 from_package = Package (from_src)
200 flags.from_version = from_package.version
202 flags.from_version = version_str_to_tuple (from_version)
206 to_package = Package (to_src)
207 flags.to_version = to_package.version
209 flags.to_version = version_str_to_tuple (to_version)
212 if not flags.to_version:
213 flags.to_version = package.version
215 if not flags.from_version:
216 flags.from_version = prev_version (flags.to_version)
220 flags.from_version = (flags.from_version[0],
221 flags.from_version[1], flags.from_version[2], '');
224 prev_cwd = os.getcwd ();
226 os.system ('rm -rf /tmp/package-diff')
228 os.mkdir ('/tmp/package-diff')
232 from_diff = dirname (flags.from_version)
233 to_diff = dirname (flags.to_version)
234 if to_diff == from_diff:
236 from_diff = from_diff + '.src'
238 to_diff = to_diff + '.src'
240 sys.stderr.write (name + ': nothing to do: to == from == ' + from_diff + '\n')
244 pn = to_diff + '.diff'
245 patch_name = os.path.join (os.getcwd (), pn)
247 from_diff = '/tmp/package-diff/' + from_diff
248 to_diff = '/tmp/package-diff/' + to_diff
251 os.chdir ('/tmp/package-diff')
252 untar (released_tarball (flags.from_version))
255 sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n')
256 # os.system ('cp -pr %s %s' % (srcdir, from_diff))
257 os.system ('mkdir -p %s '% (from_diff))
259 os.system ('tar cf - --exclude out --exclude out-www . \
260 | tar -xf - -C %s' % from_diff)
264 os.chdir ('/tmp/package-diff')
265 untar (released_tarball (flags.to_version))
268 sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n')
269 os.system ('mkdir -p %s '% (to_diff))
270 # os.system ('cp -pr %s %s' (to_src, to_diff))%
272 os.system ('tar -cf - --exclude out --exclude out-www . \
273 . | tar -xf - -C %s ' % to_diff)
276 makediff (from_diff, to_diff, patch_name)
278 os.chdir ('/tmp/package-diff')
279 sys.stderr.write ('cleaning ... ')
280 os.system ('rm -fr %s %s' % (from_diff, to_diff))
281 sys.stderr.write ('\n')