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 GNUmakefile config.cache config.h config.hh config.log config.make config.status configure')
83 os.system ('rm -f stepmake/GNUmakefile stepmake/config.hh stepmake/config.log stepmake/config.status 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))
144 state_vec = state_vec[:i]
147 f.write ('++state\n')
150 sys.stderr.write ('diffing to %s... ' % patch_name)
152 print ('diff -urN %s . >> %s' % (fromdir, patch_name))
153 os.system ('diff -urN %s . >> %s' % (fromdir, patch_name))
154 os.system ('gzip --quiet -9f %s' % patch_name)
157 os.environ['GZIP'] = '-q'
159 print 'argv: ' + join (sys.argv[2:])
160 (options, files) = getopt.getopt (sys.argv[1:],
161 'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to='])
172 if o == '--from' or o == '-f':
174 elif o == '--to' or o == '-t':
176 elif o == '--dir-from' or o == '-F':
178 elif o == '--dir-to' or o == '-T':
180 elif o == '--help' or o == '-h':
183 elif o == '--output' or o == '-o':
184 patch_name = os.path.join (os.getcwd (), a)
185 elif o == '-p' or o == '--package':
187 elif o == '--release' or o == '-r':
192 sys.path.append (topdir + '/stepmake/bin')
193 from packagepython import *
194 package = Package (topdir)
195 flags.package = package
196 packager = Packager ()
200 from_package = Package (from_src)
201 flags.from_version = from_package.version
203 flags.from_version = version_str_to_tuple (from_version)
207 to_package = Package (to_src)
208 flags.to_version = to_package.version
210 flags.to_version = version_str_to_tuple (to_version)
213 if not flags.to_version:
214 flags.to_version = package.version
216 if not flags.from_version:
217 flags.from_version = prev_version (flags.to_version)
221 flags.from_version = (flags.from_version[0],
222 flags.from_version[1], flags.from_version[2], '');
225 prev_cwd = os.getcwd ();
227 os.system ('rm -rf /tmp/package-diff')
229 os.mkdir ('/tmp/package-diff')
233 from_diff = dirname (flags.from_version)
234 to_diff = dirname (flags.to_version)
235 if to_diff == from_diff:
237 from_diff = from_diff + '.src'
239 to_diff = to_diff + '.src'
241 sys.stderr.write (name + ': nothing to do: to == from == ' + from_diff + '\n')
245 pn = to_diff + '.diff'
246 patch_name = os.path.join (os.getcwd (), pn)
248 from_diff = '/tmp/package-diff/' + from_diff
249 to_diff = '/tmp/package-diff/' + to_diff
252 os.chdir ('/tmp/package-diff')
253 untar (released_tarball (flags.from_version))
256 sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n')
257 # os.system ('cp -pr %s %s' % (srcdir, from_diff))
258 os.system ('mkdir -p %s '% (from_diff))
260 os.system ('tar cf - --exclude out --exclude out-www . \
261 | tar -xf - -C %s' % from_diff)
265 os.chdir ('/tmp/package-diff')
266 untar (released_tarball (flags.to_version))
269 sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n')
270 os.system ('mkdir -p %s '% (to_diff))
271 # os.system ('cp -pr %s %s' (to_src, to_diff))%
273 os.system ('tar -cf - --exclude out --exclude out-www . \
274 . | tar -xf - -C %s ' % to_diff)
277 makediff (from_diff, to_diff, patch_name)
279 os.chdir ('/tmp/package-diff')
280 sys.stderr.write ('cleaning ... ')
281 os.system ('rm -fr %s %s' % (from_diff, to_diff))
282 sys.stderr.write ('\n')