4 # TODO: CLEAN THIS UP, merge packagepython.py and release.py
25 sys
.stderr
.write ("can't open file: %s\n" % f
)
29 sys
.stderr
.write ("gulped emty file: %s\n" % f
)
36 return os
.environ
['MAILADDRESS']
38 return '(address unknown)'
52 'Generate a patch to go to current version\n'
53 ' -f, --from=FROM old is FROM\n'
54 ' -h, --help print this help\n'
55 ' --outdir=DIR generate in DIR\n'
56 ' -o, --output=NAME write patch to NAME\n'
57 ' -p, --package=DIR specify package\n'
58 ' -r, --release diff against latest release\n'
59 ' -t, --to=TO to version TO\n'
60 ' -F, --dir-from=FROM diff from directory FROM\n'
61 ' -T, --dir-to=TO diff to directory TO\n'
65 global from_diff
, to_diff
, original_dir
66 os
.chdir ('/tmp/package-diff')
67 sys
.stderr
.write ('Cleaning ... ')
68 os
.system ('rm -fr %s %s' % (from_diff
, to_diff
))
69 sys
.stderr
.write ('\n')
70 os
.chdir (original_dir
)
77 sys
.stderr
.write ("Can't find tarball: %s\n" % fn
)
80 sys
.stderr
.write ("Untarring: %s\n" % fn
)
81 os
.system ('gzip --quiet -dc ' + fn
+ '| tar xf - ')
84 def remove_automatic (dirnames
):
90 files
= files
+ find
.find (p
, d
)
92 sys
.stderr
.write ("Can't find dir: %s\n" % d
)
96 dirs
= map (lambda d
: find
.find ('out*', d
), dirnames
)
97 dirs
= reduce (lambda x
,y
: x
+ y
, dirs
)
102 if os
.path
.isdir (d
):
103 files
= files
+ find
.find ('*', d
)
109 sys
.stderr
.write ("can't remove: `" + f
+ "'\n'")
113 from packagepython
import *
114 return flags
.package
.name
+ '-' + version_tuple_to_str (v
)
117 return dirname (v
) + '.tar.gz'
119 def released_tarball(v
):
120 return flags
.package
.release_dir
+ tarball (v
)
123 def remove_configure (dir):
127 os
.system ('rm -f *.ly')
129 # should do 'make distclean ?'
130 os
.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')
133 os
.system ('rm -f stepmake/stepmake/stepmake stepmake/stepmake/bin')
136 # ugh, how to get rid of .tex files generated by lily?
137 pats
= ['configure', '*.diff', '*.diff.gz', '*.pyc', '*.txt']
139 header
= """Generated by %s,
144 cd %s-source-dir; patch -E -p1 < %s
146 Patches do not contain automatically generated files
147 or (urg) empty directories,
148 i.e., you should rerun autoconf, configure
153 def makediff (fromdir
, todir
, patch_name
):
155 from packagepython
import *
157 remove_automatic ([fromdir
, todir
])
160 remove_configure (fromdir
)
161 remove_configure (todir
)
166 if os
.path
.dirname (fromname
) == os
.path
.dirname (toname
):
167 fromname
= os
.path
.basename (fromname
)
168 toname
= os
.path
.basename (toname
)
169 fromdir
= '../' + fromname
171 f
= open (patch_name
, 'wb')
173 (mailaddress (), fromname
, toname
,
174 flags
.package
.name
, os
.path
.basename (patch_name
)))
178 sys
.stderr
.write ('diffing to %s... ' % patch_name
)
180 print ('diff -urN %s . >> %s' % (fromdir
, patch_name
))
181 os
.system ('diff -urN %s . >> %s' % (fromdir
, patch_name
))
182 os
.system ('gzip --quiet -9f %s' % patch_name
)
185 os
.environ
['GZIP'] = '-q'
186 print 'argv: ' + string
.join (sys
.argv
[1:])
187 (options
, files
) = getopt
.getopt (sys
.argv
[1:],
188 'hF:f:o:p:rT:t:', ['conf=', 'from=', 'dir-from=', 'dir-to=', 'help', 'outdir=', 'output=', 'package=', 'release', 'to='])
201 if o
== '--from' or o
== '-f':
203 elif o
== '--to' or o
== '-t':
205 elif o
== '--dir-from' or o
== '-F':
207 elif o
== '--dir-to' or o
== '-T':
209 elif o
== '--help' or o
== '-h':
212 elif o
== '--outdir':
216 elif o
== '--output' or o
== '-o':
218 elif o
== '-p' or o
== '--package':
220 elif o
== '--release' or o
== '-r':
225 sys
.path
.append (topdir
+ '/stepmake/bin')
226 from packagepython
import *
227 package
= Package (topdir
)
228 flags
.package
= package
229 packager
= Packager ()
232 from_package
= Package (from_src
)
233 flags
.from_version
= from_package
.version
235 flags
.from_version
= version_str_to_tuple (from_version
)
239 to_package
= Package (to_src
)
240 flags
.to_version
= to_package
.version
242 flags
.to_version
= version_str_to_tuple (to_version
)
245 if not flags
.to_version
:
246 flags
.to_version
= package
.version
248 if not flags
.from_version
:
249 flags
.from_version
= prev_version (flags
.to_version
)
253 flags
.from_version
= (flags
.from_version
[0],
254 flags
.from_version
[1], flags
.from_version
[2], '');
257 original_dir
= os
.getcwd ();
259 os
.system ('rm -rf /tmp/package-diff')
261 os
.mkdir ('/tmp/package-diff')
265 from_diff
= dirname (flags
.from_version
)
266 to_diff
= dirname (flags
.to_version
)
267 if to_diff
== from_diff
:
269 from_diff
= from_diff
+ '.src'
271 to_diff
= to_diff
+ '.src'
273 sys
.stderr
.write (patch_name
+ ': nothing to do: to == from = ' + from_diff
+ '\n')
276 def compat_abspath (path
):
277 return os
.path
.normpath (os
.path
.join (os
.getcwd (), path
))
279 if conf
and not outdir
:
280 outdir
= 'out-' + conf
284 patch_name
= compat_abspath (os
.path
.join (outdir
, to_diff
+ '.diff'))
286 from_diff
= '/tmp/package-diff/' + from_diff
287 to_diff
= '/tmp/package-diff/' + to_diff
290 os
.chdir ('/tmp/package-diff')
291 untar (released_tarball (flags
.from_version
))
292 os
.chdir (original_dir
)
294 sys
.stderr
.write ('copying ' + from_src
+ ' to ' + from_diff
+ '\n')
295 # os.system ('cp -pr %s %s' % (srcdir, from_diff))
296 os
.system ('mkdir -p %s '% (from_diff
))
298 os
.system ('tar cf - --exclude out --exclude out-www . \
299 | tar -xf - -C %s' % from_diff
)
303 os
.chdir ('/tmp/package-diff')
304 untar (released_tarball (flags
.to_version
))
305 os
.chdir (original_dir
)
307 sys
.stderr
.write ('copying ' + to_src
+ ' to ' + to_diff
+ '\n')
308 os
.system ('mkdir -p %s '% (to_diff
))
309 # os.system ('cp -pr %s %s' (to_src, to_diff))%
311 os
.system ('tar -cf - --exclude out --exclude out-www . \
312 . | tar -xf - -C %s ' % to_diff
)
315 makediff (from_diff
, to_diff
, patch_name
)