#!@PYTHON@
+#
+# TODO: CLEAN THIS UP, merge packagepython.py and release.py
+#
-import find
+
+
+import fnmatch
import sys
import os
+import re
import string
import getopt
import pipes
+
+
+_debug = 0
+
+_prune = ['(*)']
+
+def find(pattern, dir = os.curdir):
+ list = []
+ names = os.listdir(dir)
+ names.sort()
+ for name in names:
+ if name in (os.curdir, os.pardir):
+ continue
+ fullname = os.path.join(dir, name)
+ if fnmatch.fnmatch(name, pattern):
+ list.append(fullname)
+ if os.path.isdir(fullname) and not os.path.islink(fullname):
+ for p in _prune:
+ if fnmatch.fnmatch(name, p):
+ if _debug: print "skip", `fullname`
+ break
+ else:
+ if _debug: print "descend into", `fullname`
+ list = list + find(pattern, fullname)
+ return list
+
+
topdir = ''
def gulp_file(f):
try:
'Generate a patch to go to current version\n'
' -f, --from=FROM old is FROM\n'
' -h, --help print this help\n'
+ ' --outdir=DIR generate in DIR\n'
+ ' -o, --output=NAME write patch to NAME\n'
' -p, --package=DIR specify package\n'
' -r, --release diff against latest release\n'
' -t, --to=TO to version TO\n'
' -T, --dir-to=TO diff to directory TO\n'
)
+def cleanup ():
+ global from_diff, to_diff, original_dir
+ os.chdir ('/tmp/package-diff')
+ sys.stderr.write ('Cleaning ... ')
+ os.system ('rm -fr %s %s' % (from_diff, to_diff))
+ sys.stderr.write ('\n')
+ os.chdir (original_dir)
+
def untar (fn):
# os.system ('pwd');
- sys.stderr.write ('untarring ' + fn + '\n')
+ try:
+ open (fn)
+ except:
+ sys.stderr.write ("Can't find tarball: %s\n" % fn)
+ cleanup ()
+ sys.exit (1)
+ sys.stderr.write ("Untarring: %s\n" % fn)
os.system ('gzip --quiet -dc ' + fn + '| tar xf - ')
sys.stderr.flush ()
files = []
for d in dirnames:
- for p in pats:
- files = files + find.find (p, d)
+ try:
+ for p in pats:
+ files = files + find (p, d)
+ except:
+ sys.stderr.write ("Can't find dir: %s\n" % d)
+ cleanup ()
+ sys.exit (1)
- dirs = map (lambda d: find.find ('out', d), dirnames)
+ dirs = map (lambda d: find ('out*', d), dirnames)
dirs = reduce (lambda x,y: x + y, dirs)
- print dirs
+ #print dirs
+
for d in dirs:
- files = files + find.find ('*', d)
+ if os.path.isdir (d):
+ files = files + find ('*', d)
for f in files:
try:
Patches do not contain automatically generated files
or (urg) empty directories,
-i.e., you should rerun autoconf, configure """
+i.e., you should rerun autoconf, configure
+"""
-def makediff (fromdir, todir, patch_name):
+def makediff (fromdir, todir, patch_name):
# urg, again?
from packagepython import *
toname = os.path.basename (toname)
fromdir = '../' + fromname
- f = open (patch_name, 'w')
+ f = open (patch_name, 'wb')
f.write (header %
(mailaddress (), fromname, toname,
flags.package.name, os.path.basename (patch_name)))
sys.stderr.write ('diffing to %s... ' % patch_name)
os.system ('pwd')
- print ('diff -urN %s . >> %s' % (fromdir, patch_name))
- os.system ('diff -urN %s . >> %s' % (fromdir, patch_name))
+ print ('diff -purN %s . >> %s' % (fromdir, patch_name))
+ os.system ('diff -purN %s . >> %s' % (fromdir, patch_name))
os.system ('gzip --quiet -9f %s' % patch_name)
os.environ['GZIP'] = '-q'
-print 'argv: ' + string.join (sys.argv[2:])
+print 'argv: ' + string.join (sys.argv[1:])
(options, files) = getopt.getopt (sys.argv[1:],
- 'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to='])
+ 'hF:f:o:p:rT:t:', ['conf=', 'from=', 'dir-from=', 'dir-to=', 'help', 'outdir=', 'output=', 'package=', 'release', 'to='])
patch_name = ''
+conf = ''
+outdir = ''
from_src = ''
to_src = ''
release=0
elif o == '--help' or o == '-h':
help ()
sys.exit (0)
+ elif o == '--outdir':
+ outdir = a
+ elif o == '--conf':
+ conf = a
elif o == '--output' or o == '-o':
- patch_name = os.path.join (os.getcwd (), a)
+ patch_name = a
elif o == '-p' or o == '--package':
topdir = a
elif o == '--release' or o == '-r':
flags.from_version[1], flags.from_version[2], '');
import tempfile
-prev_cwd = os.getcwd ();
+original_dir = os.getcwd ();
os.system ('rm -rf /tmp/package-diff')
try:
elif to_src:
to_diff = to_diff + '.src'
else:
- sys.stderr.write (name + ': nothing to do: to == from == ' + from_diff + '\n')
+ sys.stderr.write (patch_name + ': nothing to do: to == from = ' + from_diff + '\n')
sys.exit (1)
+def compat_abspath (path):
+ return os.path.normpath (os.path.join (os.getcwd (), path))
+
+if conf and not outdir:
+ outdir = 'out-' + conf
+
if not patch_name:
- pn = to_diff + '.diff'
- patch_name = os.path.join (os.getcwd (), pn)
+ to_diff + '.diff'
+patch_name = compat_abspath (os.path.join (outdir, to_diff + '.diff'))
from_diff = '/tmp/package-diff/' + from_diff
to_diff = '/tmp/package-diff/' + to_diff
if not from_src:
os.chdir ('/tmp/package-diff')
untar (released_tarball (flags.from_version))
- os.chdir (prev_cwd)
+ os.chdir (original_dir)
else:
sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n')
# os.system ('cp -pr %s %s' % (srcdir, from_diff))
if not to_src:
os.chdir ('/tmp/package-diff')
untar (released_tarball (flags.to_version))
- os.chdir (prev_cwd)
+ os.chdir (original_dir)
else:
sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n')
os.system ('mkdir -p %s '% (to_diff))
os.chdir (to_diff)
makediff (from_diff, to_diff, patch_name)
-os.chdir ('/tmp/package-diff')
-sys.stderr.write ('cleaning ... ')
-os.system ('rm -fr %s %s' % (from_diff, to_diff))
-sys.stderr.write ('\n')
-os.chdir (prev_cwd)
+cleanup ()