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)
63 from packagepython import *
64 return flags.package.name + '-' + version_tuple_to_str (v)
67 return dirname (v) + '.tar.gz'
69 def released_tarball(v):
70 return flags.package.release_dir + tarball (v)
73 def remove_configure (dir):
76 os.system ('rm -f *.ly')
78 # should do 'make distclean ?'
79 os.system ('rm -rf debian/out')
80 os.system ('rm -f Makefile config.cache config.h config.hh config.log config.make config.status')
81 os.system ('rm -f stepmake/Makefile stepmake/config.hh stepmake/config.log stepmake/config.make')
84 os.system ('rm -f stepmake/stepmake/stepmake')
85 os.system ('rm -f stepmake/stepmake/bin')
88 # ugh, how to get rid of .tex files generated by lily?
89 pats = ['.dstreamrc', 'configure', '*.diff', '*.diff.gz', '*.lsm', '*.pyc', '*.spec', '*.txt']
91 header = 'Generated by %s using %s,\
92 \nFrom = %s, To = %s\n\
96 cd %s-source-dir; patch -E -p1 < %s\n\
98 Patches do not contain automatically generated files \n\
99 or (urg) empty directories, \n\
100 i.e., you should rerun autoconf, configure \n\
101 and possibly make outdirs.\n\n'
103 def makediff (fromdir, todir, patch_name):
106 from packagepython import *
108 remove_automatic ([fromdir, todir])
111 remove_configure (fromdir)
112 remove_configure (todir)
117 if os.path.dirname (fromname) == os.path.dirname (toname):
118 fromname = os.path.basename (fromname)
119 toname = os.path.basename (toname)
120 fromdir = '../' + fromname
122 f = open (patch_name, 'w')
124 (mailaddress (), program_id (), fromname, toname,
125 flags.package.name, os.path.basename (patch_name)))
128 f.write ('--state\n')
129 state_vec = gulp_file ('make/STATE-VECTOR')
130 from_str = version_tuple_to_str (flags.from_version)
131 to_str = version_tuple_to_str (flags.to_version)
132 i = regex.search (from_str, state_vec)
134 f.write (from_str + '\n')
136 state_vec = state_vec[i:]
137 i = regex.search (to_str, state_vec)
139 f.write (to_str + '\n')
141 i = i + len (version_tuple_to_str (flags.to_version)) + 1
142 state_vec = state_vec[:i]
144 f.write ('++state\n')
147 sys.stderr.write ('diffing to %s... ' % patch_name)
149 print ('diff -urN %s . >> %s' % (fromdir, patch_name))
150 os.system ('diff -urN %s . >> %s' % (fromdir, patch_name))
151 os.system ('gzip --quiet -9f %s' % patch_name)
154 os.environ['GZIP'] = '-q'
156 print 'argv: ' + join (sys.argv[2:])
157 (options, files) = getopt.getopt (sys.argv[1:],
158 'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to='])
169 if o == '--from' or o == '-f':
171 elif o == '--to' or o == '-t':
173 elif o == '--dir-from' or o == '-F':
175 elif o == '--dir-to' or o == '-T':
177 elif o == '--help' or o == '-h':
180 elif o == '--output' or o == '-o':
181 patch_name = os.path.join (os.getcwd (), a)
182 elif o == '-p' or o == '--package':
184 elif o == '--release' or o == '-r':
189 sys.path.append (topdir + '/stepmake/bin')
190 from packagepython import *
191 package = Package (topdir)
192 flags.package = package
193 packager = Packager ()
197 from_package = Package (from_src)
198 flags.from_version = from_package.version
200 flags.from_version = version_str_to_tuple (from_version)
204 to_package = Package (to_src)
205 flags.to_version = to_package.version
207 flags.to_version = version_str_to_tuple (to_version)
210 if not flags.to_version:
211 flags.to_version = package.version
213 if not flags.from_version:
214 flags.from_version = prev_version (flags.to_version)
218 flags.from_version = (flags.from_version[0],
219 flags.from_version[1], flags.from_version[2], '');
222 prev_cwd = os.getcwd ();
224 os.system ('rm -rf /tmp/package-diff')
226 os.mkdir ('/tmp/package-diff')
230 from_diff = dirname (flags.from_version)
231 to_diff = dirname (flags.to_version)
232 if to_diff == from_diff:
234 from_diff = from_diff + '.src'
236 to_diff = to_diff + '.src'
238 sys.stderr.write (name + ': nothing to do: to == from == ' + from_diff + '\n')
242 pn = to_diff + '.diff'
243 patch_name = os.path.join (os.getcwd (), pn)
245 from_diff = '/tmp/package-diff/' + from_diff
246 to_diff = '/tmp/package-diff/' + to_diff
249 os.chdir ('/tmp/package-diff')
250 untar (released_tarball (flags.from_version))
253 sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n')
254 # os.system ('cp -pr %s %s' % (srcdir, from_diff))
255 os.system ('mkdir -p %s '% (from_diff))
257 os.system ('tar cf - --exclude out --exclude out-www . \
258 | tar -xf - -C %s' % from_diff)
262 os.chdir ('/tmp/package-diff')
263 untar (released_tarball (flags.to_version))
266 sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n')
267 os.system ('mkdir -p %s '% (to_diff))
268 # os.system ('cp -pr %s %s' (to_src, to_diff))%
270 os.system ('tar -cf - --exclude out --exclude out-www . \
271 . | tar -xf - -C %s ' % to_diff)
274 makediff (from_diff, to_diff, patch_name)
276 os.chdir ('/tmp/package-diff')
277 sys.stderr.write ('cleaning ... ')
278 os.system ('rm -fr %s %s' % (from_diff, to_diff))
279 sys.stderr.write ('\n')