4 # TODO: CLEAN THIS UP, merge packagepython.py and release.py
20 package_diff_dir = '/tmp/package-diff.%s/' % os.getlogin ()
29 def find(pattern, dir = os.curdir):
31 names = os.listdir(dir)
34 if name in (os.curdir, os.pardir):
36 fullname = os.path.join(dir, name)
37 if fnmatch.fnmatch(name, pattern):
39 if os.path.isdir(fullname) and not os.path.islink(fullname):
41 if fnmatch.fnmatch(name, p):
42 if _debug: print "skip", `fullname`
45 if _debug: print "descend into", `fullname`
46 list = list + find(pattern, fullname)
58 sys.stderr.write ("can't open file: %s\n" % f)
62 sys.stderr.write ("gulped emty file: %s\n" % f)
69 return os.environ['MAILADDRESS']
71 return '(address unknown)'
85 'Generate a patch to go to current version\n'
86 ' -f, --from=FROM old is FROM\n'
87 ' -h, --help print this help\n'
88 ' --outdir=DIR generate in DIR\n'
89 ' -o, --output=NAME write patch to NAME\n'
90 ' -p, --package=DIR specify package\n'
91 ' -r, --release diff against latest release\n'
92 ' -t, --to=TO to version TO\n'
93 ' -F, --dir-from=FROM diff from directory FROM\n'
94 ' -T, --dir-to=TO diff to directory TO\n'
98 global from_diff, to_diff, original_dir
99 os.chdir (package_diff_dir)
100 sys.stderr.write ('Cleaning ... ')
101 system ('rm -fr %s %s' % (from_diff, to_diff))
102 sys.stderr.write ('\n')
103 os.chdir (original_dir)
110 sys.stderr.write ("Can't find tarball: %s\n" % fn)
113 sys.stderr.write ("Untarring: %s\n" % fn)
114 system ('gzip --quiet -dc ' + fn + '| tar xf - ')
117 def remove_automatic (dirnames):
123 files = files + find (p, d)
125 sys.stderr.write ("Can't find dir: %s\n" % d)
129 dirs = map (lambda d: find ('out*', d), dirnames)
130 dirs = reduce (lambda x,y: x + y, dirs)
135 if os.path.isdir (d):
136 files = files + find ('*', d)
142 sys.stderr.write ("can't remove: `" + f + "'\n'")
145 return flags.package.name + '-' + version_tuple_to_str (v)
148 return dirname (v) + '.tar.gz'
150 def released_tarball(v):
151 return flags.package.release_dir + tarball (v)
154 def remove_configure (dir):
158 system ('rm -f *.ly')
160 # should do 'make distclean ?'
161 system ('rm -rf debian/out GNUmakefile config.cache config.h config.hh config.log config.make config.status configure stepmake/GNUmakefile stepmake/config.hh stepmake/config.log stepmake/config.status stepmake/config.make')
164 system ('rm -f stepmake/stepmake/stepmake stepmake/stepmake/bin')
167 # ugh, how to get rid of .tex files generated by lily?
168 pats = ['configure', '*.diff', '*.diff.gz', '*.pyc', '*.txt']
170 header = """Generated by %s,
175 cd %s-source-dir; patch -E -p1 < %s
177 Patches do not contain automatically generated files
178 or (urg) empty directories,
182 ./configure [your options.]
188 def makediff (fromdir, todir, patch_name):
189 remove_automatic ([fromdir, todir])
192 remove_configure (fromdir)
193 remove_configure (todir)
198 if os.path.dirname (fromname) == os.path.dirname (toname):
199 fromname = os.path.basename (fromname)
200 toname = os.path.basename (toname)
201 fromdir = '../' + fromname
203 f = open (patch_name, 'wb')
205 (mailaddress (), fromname, toname,
206 flags.package.name, os.path.basename (patch_name)))
210 sys.stderr.write ('diffing to %s... ' % patch_name)
212 print ('diff -purN %s . >> %s' % (fromdir, patch_name))
213 system ('diff -purN %s . >> %s' % (fromdir, patch_name))
214 system ('gzip --quiet -9f %s' % patch_name)
217 os.environ['GZIP'] = '-q'
218 print 'argv: ' + string.join (sys.argv[1:])
219 (options, files) = getopt.getopt (sys.argv[1:],
220 'hF:f:o:p:rT:t:', ['conf=', 'from=', 'dir-from=', 'dir-to=', 'help', 'outdir=', 'output=', 'package=', 'release', 'to='])
233 if o == '--from' or o == '-f':
235 elif o == '--to' or o == '-t':
237 elif o == '--dir-from' or o == '-F':
239 elif o == '--dir-to' or o == '-T':
241 elif o == '--help' or o == '-h':
244 elif o == '--outdir':
248 elif o == '--output' or o == '-o':
250 elif o == '-p' or o == '--package':
252 elif o == '--release' or o == '-r':
257 sys.path.append (topdir + '/stepmake/bin')
258 from packagepython import *
259 package = Package (topdir)
260 flags.package = package
261 packager = Packager ()
264 from_package = Package (from_src)
265 flags.from_version = from_package.version
267 flags.from_version = version_str_to_tuple (from_version)
271 to_package = Package (to_src)
272 flags.to_version = to_package.version
274 flags.to_version = version_str_to_tuple (to_version)
277 if not flags.to_version:
278 flags.to_version = package.version
280 if not flags.from_version:
281 flags.from_version = prev_version (flags.to_version)
285 flags.from_version = (flags.from_version[0],
286 flags.from_version[1], flags.from_version[2], '');
289 original_dir = os.getcwd ();
291 system ('rm -rf %s' % package_diff_dir)
293 os.mkdir (package_diff_dir)
297 from_diff = dirname (flags.from_version)
298 to_diff = dirname (flags.to_version)
299 if to_diff == from_diff:
301 from_diff = from_diff + '.src'
303 to_diff = to_diff + '.src'
305 sys.stderr.write (patch_name + ': nothing to do: to == from = ' + from_diff + '\n')
308 def compat_abspath (path):
309 return os.path.normpath (os.path.join (os.getcwd (), path))
311 if conf and not outdir:
312 outdir = 'out-' + conf
315 patch_name = os.path.join (outdir, '%s-%s-%s.diff' % (package.name,
316 version_tuple_to_str (flags.from_version),
317 version_tuple_to_str (flags.to_version)))
319 patch_name = compat_abspath (patch_name)
321 from_diff = package_diff_dir + from_diff
322 to_diff = package_diff_dir + to_diff
325 os.chdir (package_diff_dir)
326 untar (released_tarball (flags.from_version))
327 os.chdir (original_dir)
329 sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n')
330 # system ('cp -pr %s %s' % (srcdir, from_diff))
331 system ('mkdir -p %s '% (from_diff))
333 system ('tar cf - --exclude out --exclude out-www . \
334 | tar -xf - -C %s' % from_diff)
338 os.chdir (package_diff_dir)
339 untar (released_tarball (flags.to_version))
340 os.chdir (original_dir)
342 sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n')
343 system ('mkdir -p %s '% (to_diff))
344 # system ('cp -pr %s %s' (to_src, to_diff))%
346 system ('tar -cf - --exclude out --exclude out-www . \
347 . | tar -xf - -C %s ' % to_diff)
350 makediff (from_diff, to_diff, patch_name)