From 465e9facb22bd633853a2977d728c48d053b787f Mon Sep 17 00:00:00 2001 From: Soren Hansen Date: Mon, 3 Sep 2007 10:53:11 +0200 Subject: [PATCH] Add tool to automatically submit patches to Debian. --- fileindebian | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 fileindebian diff --git a/fileindebian b/fileindebian new file mode 100755 index 0000000..0e65ee7 --- /dev/null +++ b/fileindebian @@ -0,0 +1,72 @@ +#!/usr/bin/python + +from debian_bundle.changelog import Changelog +import re, os, sys +from tempfile import mkstemp + +def get_most_recent_debian_version(changelog): + for v in changelog.get_versions(): + if not re.search('(ubuntu|build)', v.full_version): + return v.full_version + +def get_bug_body(changelog): + return '''In Ubuntu, we've applied the attached patch to achieve the following: +%s +We thought you might be interested in doing the same. +''' % ("\n".join([a for a in changelog._blocks[0].changes()])) + +def gen_debdiff(changelog): + pkg = changelog.package + + oldver = changelog._blocks[1].version + newver = changelog._blocks[0].version + + olddsc = '../%s_%s.dsc' % (pkg, oldver) + newdsc = '../%s_%s.dsc' % (pkg, newver) + + check_file(olddsc) + check_file(newdsc) + + print "Generating debdiff between %s and %s" % (oldver, newver) + (fd, debdiff) = mkstemp() + os.close(fd) + cmd = 'debdiff %s %s | filterdiff -x "*changelog*" > %s' % (olddsc, newdsc, debdiff) + run_cmd(cmd) + + return debdiff + +def check_file(fname): + if not os.path.exists(fname): + print "Couldn't find %s\n" % fname + sys.exit(1) + +def edit_debdiff(debdiff): + cmd = 'sensible-editor %s' % (debdiff) + run_cmd(cmd) + +def submit_bugreport(body, debdiff, changelog): + cmd = 'reportbug -A %s -B debian -i %s -V %s %s' % (debdiff, body, deb_version, changelog.package) + run_cmd(cmd) + +def run_cmd(cmd): + if os.getenv('DEBUG'): + print "%s\n" % cmd + os.system(cmd) + +check_file('debian/changelog') + +changelog = Changelog(file('debian/changelog').read()) + +deb_version = get_most_recent_debian_version(changelog) +bug_body = get_bug_body(changelog) + +fd, body = mkstemp() +fp = os.fdopen(fd, 'w') +fp.write(bug_body) +fp.close() + +debdiff = gen_debdiff(changelog) +edit_debdiff(debdiff) +submit_bugreport(body, debdiff, changelog) +os.unlink(body) +os.unlink(debdiff)