Package: devscripts
Version: 2.10.26
Severity: wishlist
Tags: patch
User: [EMAIL PROTECTED]
Usertags: origin-ubuntu intrepid ubuntu-patch
Hi,
bzr has an option to commit called "--fixes" which allows a revision
property to be set which associates the revision with a particular bug.
For a while now bzr has had built in support for the Debian BTS and
Launchpad.
When the message that is going to be used for the commit contains
"Closes:" statements it would be great to automatically pass the
--fixes argument, so that the user gets the association with no
effort.
The attached patch does this, please consider applying it.
It uses Dpkg::Changelog from dpkg-dev to find the bug numbers,
and then turns it in to the appropriate command line arguments
for "bzr commit".
Thanks,
James
diff -Nru devscripts-2.10.26ubuntu10/scripts/debcommit.pl devscripts-2.10.26ubuntu11/scripts/debcommit.pl
--- devscripts-2.10.26ubuntu10/scripts/debcommit.pl 2008-04-30 09:20:28.000000000 +0100
+++ devscripts-2.10.26ubuntu11/scripts/debcommit.pl 2008-08-26 13:01:22.000000000 +0100
@@ -159,12 +159,18 @@
summary. If multiple changes were detected then an editor will be spawned to
allow the message to be fine-tuned.
+=item B<bzr>
+
+If the changelog entry used for the commit message closes any bugs then --fixes
+options to "bzr commit" will be generated to associate the revision and the bugs.
+
=cut
use warnings;
use strict;
use Getopt::Long;
use Cwd;
+use Dpkg::Changelog;
use File::Basename;
use File::Temp;
my $progname = basename($0);
@@ -413,6 +419,18 @@
return (system($prog, @_) != 0) ? 0 : 1;
}
+sub bzr_find_fixes {
+ my $message=shift;
+
+ my $debian_closes = Dpkg::Changelog::find_closes($message);
+ my $launchpad_closes = Dpkg::Changelog::find_launchpad_closes($message);
+
+ my @fixes_arg = ();
+ map { push(@fixes_arg, ("--fixes", "deb:".$_)) } @$debian_closes;
+ map { push(@fixes_arg, ("--fixes", "lp:".$_)) } @$launchpad_closes;
+ return @fixes_arg;
+}
+
sub commit {
my $message=shift;
@@ -420,7 +438,7 @@
if (@files_to_commit and $all);
my $action_rc; # return code of external command
- if ($prog =~ /^(cvs|svn|svk|bzr|hg)$/) {
+ if ($prog =~ /^(cvs|svn|svk|hg)$/) {
$action_rc = $diffmode
? action($prog, "diff", @files_to_commit)
: action($prog, "commit", "-m", $message, @files_to_commit);
@@ -464,6 +482,15 @@
) if @files_to_commit;
$action_rc = action($prog, $diffmode ? "diff" : "commit", @args);
}
+ elsif ($prog eq 'bzr') {
+ if ($diffmode) {
+ $action_rc = action($prog, "diff", @files_to_commit);
+ } else {
+ my @fixes_arg = bzr_find_fixes($message);
+ $action_rc = action($prog, "commit", "-m", $message,
+ @fixes_arg, @files_to_commit);
+ }
+ }
else {
die "debcommit: unknown program $prog";
}