19 sys.stderr.write ("can't open file: %s\n" % f)
23 sys.stderr.write ("gulped emty file: %s\n" % f)
28 return name + ' ' + version;
33 return os.environ['MAILADDRESS']
35 return '(address unknown)'
39 sys.stdout.write (program_id () + '\n')
51 'Generate a patch to go to current version\n'
52 ' -f, --from=FROM old is FROM\n'
53 ' -h, --help print this help\n'
54 ' -p, --package=DIR specify package\n'
55 ' -r, --release diff against latest release\n'
56 ' -t, --to=TO to version TO\n'
57 ' -F, --dir-from=FROM diff from directory FROM\n'
58 ' -T, --dir-to=TO diff to directory TO\n'
63 sys.stderr.write ('untarring ' + fn + '\n')
64 os.system ('gzip --quiet -dc ' + fn + '| tar xf - ')
67 def remove_automatic (dirnames):
71 files = files + multiple_find (pats, dirnames)
72 dirs = multiple_find (['out'], dirnames)
74 files = files + multiple_find (['*'], [d])
79 sys.stderr.write ("can't remove: `" + f + "'\n'")
83 from packagepython import *
84 return flags.package.name + '-' + version_tuple_to_str (v)
87 return dirname (v) + '.tar.gz'
89 def released_tarball(v):
90 return flags.package.release_dir + tarball (v)
93 def remove_configure (dir):
96 os.system ('rm -f *.ly')
98 # should do 'make distclean ?'
99 os.system ('rm -rf debian/out')
100 os.system ('rm -f GNUmakefile config.cache config.h config.hh config.log config.make config.status configure')
101 os.system ('rm -f stepmake/GNUmakefile stepmake/config.hh stepmake/config.log stepmake/config.status stepmake/config.make')
104 os.system ('rm -f stepmake/stepmake/stepmake')
105 os.system ('rm -f stepmake/stepmake/bin')
108 # ugh, how to get rid of .tex files generated by lily?
109 pats = ['configure', '*.diff', '*.diff.gz', '*.pyc', '*.txt']
111 header = """Generated by %s using %s,
116 cd %s-source-dir; patch -E -p1 < %s
118 Patches do not contain automatically generated files
119 or (urg) empty directories,
120 i.e., you should rerun autoconf, configure """
123 def makediff (fromdir, todir, patch_name):
126 from packagepython import *
128 remove_automatic ([fromdir, todir])
131 remove_configure (fromdir)
132 remove_configure (todir)
137 if os.path.dirname (fromname) == os.path.dirname (toname):
138 fromname = os.path.basename (fromname)
139 toname = os.path.basename (toname)
140 fromdir = '../' + fromname
142 f = open (patch_name, 'w')
144 (mailaddress (), program_id (), fromname, toname,
145 flags.package.name, os.path.basename (patch_name)))
148 f.write ('--state\n')
149 state_vec = gulp_file ('make/STATE-VECTOR')
150 from_str = version_tuple_to_str (flags.from_version)
151 to_str = version_tuple_to_str (flags.to_version)
152 i = regex.search (from_str, state_vec)
154 f.write (from_str + '\n')
156 state_vec = state_vec[i:]
157 i = regex.search (to_str, state_vec)
159 f.write (to_str + '\n')
161 i = i + len (version_tuple_to_str (flags.to_version))
162 state_vec = state_vec[:i]
165 f.write ('++state\n')
168 sys.stderr.write ('diffing to %s... ' % patch_name)
170 print ('diff -urN %s . >> %s' % (fromdir, patch_name))
171 os.system ('diff -urN %s . >> %s' % (fromdir, patch_name))
172 os.system ('gzip --quiet -9f %s' % patch_name)
175 os.environ['GZIP'] = '-q'
177 print 'argv: ' + string.join (sys.argv[2:])
178 (options, files) = getopt.getopt (sys.argv[1:],
179 'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to='])
190 if o == '--from' or o == '-f':
192 elif o == '--to' or o == '-t':
194 elif o == '--dir-from' or o == '-F':
196 elif o == '--dir-to' or o == '-T':
198 elif o == '--help' or o == '-h':
201 elif o == '--output' or o == '-o':
202 patch_name = os.path.join (os.getcwd (), a)
203 elif o == '-p' or o == '--package':
205 elif o == '--release' or o == '-r':
210 sys.path.append (topdir + '/stepmake/bin')
211 from packagepython import *
212 package = Package (topdir)
213 flags.package = package
214 packager = Packager ()
218 from_package = Package (from_src)
219 flags.from_version = from_package.version
221 flags.from_version = version_str_to_tuple (from_version)
225 to_package = Package (to_src)
226 flags.to_version = to_package.version
228 flags.to_version = version_str_to_tuple (to_version)
231 if not flags.to_version:
232 flags.to_version = package.version
234 if not flags.from_version:
235 flags.from_version = prev_version (flags.to_version)
239 flags.from_version = (flags.from_version[0],
240 flags.from_version[1], flags.from_version[2], '');
243 prev_cwd = os.getcwd ();
245 os.system ('rm -rf /tmp/package-diff')
247 os.mkdir ('/tmp/package-diff')
251 from_diff = dirname (flags.from_version)
252 to_diff = dirname (flags.to_version)
253 if to_diff == from_diff:
255 from_diff = from_diff + '.src'
257 to_diff = to_diff + '.src'
259 sys.stderr.write (name + ': nothing to do: to == from == ' + from_diff + '\n')
263 pn = to_diff + '.diff'
264 patch_name = os.path.join (os.getcwd (), pn)
266 from_diff = '/tmp/package-diff/' + from_diff
267 to_diff = '/tmp/package-diff/' + to_diff
270 os.chdir ('/tmp/package-diff')
271 untar (released_tarball (flags.from_version))
274 sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n')
275 # os.system ('cp -pr %s %s' % (srcdir, from_diff))
276 os.system ('mkdir -p %s '% (from_diff))
278 os.system ('tar cf - --exclude out --exclude out-www . \
279 | tar -xf - -C %s' % from_diff)
283 os.chdir ('/tmp/package-diff')
284 untar (released_tarball (flags.to_version))
287 sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n')
288 os.system ('mkdir -p %s '% (to_diff))
289 # os.system ('cp -pr %s %s' (to_src, to_diff))%
291 os.system ('tar -cf - --exclude out --exclude out-www . \
292 . | tar -xf - -C %s ' % to_diff)
295 makediff (from_diff, to_diff, patch_name)
297 os.chdir ('/tmp/package-diff')
298 sys.stderr.write ('cleaning ... ')
299 os.system ('rm -fr %s %s' % (from_diff, to_diff))
300 sys.stderr.write ('\n')