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])
64 sys.stderr.write ("can't remove: `" + f + "'\n'")
68 from packagepython import *
69 return flags.package.name + '-' + version_tuple_to_str (v)
72 return dirname (v) + '.tar.gz'
74 def released_tarball(v):
75 return flags.package.release_dir + tarball (v)
78 def remove_configure (dir):
81 os.system ('rm -f *.ly')
83 # should do 'make distclean ?'
84 os.system ('rm -rf debian/out')
85 os.system ('rm -f GNUmakefile config.cache config.h config.hh config.log config.make config.status configure')
86 os.system ('rm -f stepmake/GNUmakefile stepmake/config.hh stepmake/config.log stepmake/config.status stepmake/config.make')
89 os.system ('rm -f stepmake/stepmake/stepmake')
90 os.system ('rm -f stepmake/stepmake/bin')
93 # ugh, how to get rid of .tex files generated by lily?
94 pats = ['configure', '*.diff', '*.diff.gz', '*.pyc', '*.txt']
96 header = 'Generated by %s using %s,\
97 \nFrom = %s, To = %s\n\
101 cd %s-source-dir; patch -E -p1 < %s\n\
103 Patches do not contain automatically generated files \n\
104 or (urg) empty directories, \n\
105 i.e., you should rerun autoconf, configure \n\
106 and possibly make outdirs.\n\n'
108 def makediff (fromdir, todir, patch_name):
111 from packagepython import *
113 remove_automatic ([fromdir, todir])
116 remove_configure (fromdir)
117 remove_configure (todir)
122 if os.path.dirname (fromname) == os.path.dirname (toname):
123 fromname = os.path.basename (fromname)
124 toname = os.path.basename (toname)
125 fromdir = '../' + fromname
127 f = open (patch_name, 'w')
129 (mailaddress (), program_id (), fromname, toname,
130 flags.package.name, os.path.basename (patch_name)))
133 f.write ('--state\n')
134 state_vec = gulp_file ('make/STATE-VECTOR')
135 from_str = version_tuple_to_str (flags.from_version)
136 to_str = version_tuple_to_str (flags.to_version)
137 i = regex.search (from_str, state_vec)
139 f.write (from_str + '\n')
141 state_vec = state_vec[i:]
142 i = regex.search (to_str, state_vec)
144 f.write (to_str + '\n')
146 i = i + len (version_tuple_to_str (flags.to_version))
147 state_vec = state_vec[:i]
150 f.write ('++state\n')
153 sys.stderr.write ('diffing to %s... ' % patch_name)
155 print ('diff -urN %s . >> %s' % (fromdir, patch_name))
156 os.system ('diff -urN %s . >> %s' % (fromdir, patch_name))
157 os.system ('gzip --quiet -9f %s' % patch_name)
160 os.environ['GZIP'] = '-q'
162 print 'argv: ' + join (sys.argv[2:])
163 (options, files) = getopt.getopt (sys.argv[1:],
164 'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to='])
175 if o == '--from' or o == '-f':
177 elif o == '--to' or o == '-t':
179 elif o == '--dir-from' or o == '-F':
181 elif o == '--dir-to' or o == '-T':
183 elif o == '--help' or o == '-h':
186 elif o == '--output' or o == '-o':
187 patch_name = os.path.join (os.getcwd (), a)
188 elif o == '-p' or o == '--package':
190 elif o == '--release' or o == '-r':
195 sys.path.append (topdir + '/stepmake/bin')
196 from packagepython import *
197 package = Package (topdir)
198 flags.package = package
199 packager = Packager ()
203 from_package = Package (from_src)
204 flags.from_version = from_package.version
206 flags.from_version = version_str_to_tuple (from_version)
210 to_package = Package (to_src)
211 flags.to_version = to_package.version
213 flags.to_version = version_str_to_tuple (to_version)
216 if not flags.to_version:
217 flags.to_version = package.version
219 if not flags.from_version:
220 flags.from_version = prev_version (flags.to_version)
224 flags.from_version = (flags.from_version[0],
225 flags.from_version[1], flags.from_version[2], '');
228 prev_cwd = os.getcwd ();
230 os.system ('rm -rf /tmp/package-diff')
232 os.mkdir ('/tmp/package-diff')
236 from_diff = dirname (flags.from_version)
237 to_diff = dirname (flags.to_version)
238 if to_diff == from_diff:
240 from_diff = from_diff + '.src'
242 to_diff = to_diff + '.src'
244 sys.stderr.write (name + ': nothing to do: to == from == ' + from_diff + '\n')
248 pn = to_diff + '.diff'
249 patch_name = os.path.join (os.getcwd (), pn)
251 from_diff = '/tmp/package-diff/' + from_diff
252 to_diff = '/tmp/package-diff/' + to_diff
255 os.chdir ('/tmp/package-diff')
256 untar (released_tarball (flags.from_version))
259 sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n')
260 # os.system ('cp -pr %s %s' % (srcdir, from_diff))
261 os.system ('mkdir -p %s '% (from_diff))
263 os.system ('tar cf - --exclude out --exclude out-www . \
264 | tar -xf - -C %s' % from_diff)
268 os.chdir ('/tmp/package-diff')
269 untar (released_tarball (flags.to_version))
272 sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n')
273 os.system ('mkdir -p %s '% (to_diff))
274 # os.system ('cp -pr %s %s' (to_src, to_diff))%
276 os.system ('tar -cf - --exclude out --exclude out-www . \
277 . | tar -xf - -C %s ' % to_diff)
280 makediff (from_diff, to_diff, patch_name)
282 os.chdir ('/tmp/package-diff')
283 sys.stderr.write ('cleaning ... ')
284 os.system ('rm -fr %s %s' % (from_diff, to_diff))
285 sys.stderr.write ('\n')