On Sun, Aug 10, 2008 at 10:23:19PM -0300, Stefano Zacchiroli wrote:
> On Sun, Aug 10, 2008 at 07:49:21PM -0400, James Vega wrote:
> > I'd throw my vote in for that (and that's what my current version of
> > the patch uses).
> 
> Did you forget to attach it?

Attached is just the changes against bts.pl.  I've added some
documentation (comments welcome) and implemented a suggest adn had for
only displaying key/value pairs if there's actually a value to display.

The downside I see to using tabs is that the separation between the
key/value pairs is rather random.

Example output:
[EMAIL PROTECTED]:0 % bts status 300000
bug_num 300000
source  unknown
done    NoèlKöthe <[EMAIL PROTECTED]>
found_versions  0.51-2
fixed   crypt-ssleay/0.51-3 =>
date    1111072040
fixed_versions  crypt-ssleay/0.51-3
found   0.51-2 =>
msgid   <[EMAIL PROTECTED]>
id      300000
severity        minor
location        archive
log_modified    1111656819
subject libcrypt-ssleay-perl: package description typo(s) and the like
originator      Florian Zumbiehl <[EMAIL PROTECTED]>
pending done
archived        1
package libcrypt-ssleay-perl

-- 
James
GPG Key: 1024D/61326D40 2003-09-02 James Vega <[EMAIL PROTECTED]>
Index: scripts/bts.pl
===================================================================
--- scripts/bts.pl	(revision 1586)
+++ scripts/bts.pl	(working copy)
@@ -47,6 +47,8 @@
 use Getopt::Long;
 use Encode;
 
+use Scalar::Util qw(looks_like_number);
+
 # Funny UTF-8 warning messages from HTML::Parse should be ignorable (#292671)
 $SIG{'__WARN__'} = sub { warn $_[0] unless $_[0] =~ /^Parsing of undecoded UTF-8 will give garbage when decoding entities/; };
 
@@ -949,6 +951,68 @@
     print map {qq($_\n)} @{$bugs};
 }
 
+=item status [<bug> | file:<file>] ...
+
+Uses the SOAP interface to output status information for the given bugs
+(or as read from the listed files -- use '-' to indicate STDIN).
+
+Empty status fields are not displayed.
+
+=cut
+
+sub bts_status {
+    my @args = @_;
+
+    my @bugs;
+    for my $bug (@args) {
+	if (looks_like_number($bug)) {
+	    push @bugs,$bug;
+	}
+	elsif (m{^file:(.+)}) {
+	    my $file = $1;
+	    my $fh;
+	    if ($file eq '-') {
+		$fh = \*STDIN;
+	    }
+	    else {
+		$fh = IO::File->new($file,'r') or
+		die "Unable to open $file for reading: $!";
+	    }
+	    while (<$fh>) {
+		chomp;
+		next if /^\s*\#/;
+		s/\s//g;
+		next unless looks_like_number($_);
+		push @bugs,$_;
+	    }
+	}
+    }
+    my $bugs = Devscripts::Debbugs::status(@bugs);
+    my $first = 1;
+    for my $bug (keys %{$bugs}) {
+	print "\n" if not $first;
+	$first = 0;
+	my @keys = grep {$_ ne 'bug_num'}
+	keys %{$bugs->{$bug}};
+	for my $key ('bug_num',@keys) {
+	    my $out;
+	    if (ref($bugs->{$bug}{$key}) eq 'ARRAY') {
+		$out .= join(',',@{$bugs->{$bug}{$key}});
+	    }
+	    elsif (ref($bugs->{$bug}{$key}) eq 'HASH') {
+		$out .= join(',',
+		    map { $_ .' => '. ($bugs->{$bug}{$key}{$_}||'') }
+		    keys %{$bugs->{$bug}{$key}}
+		);
+	    }
+	    else {
+		$out .= $bugs->{$bug}{$key}||'';
+	    }
+	    print "$key\t$out\n" if $out;
+	}
+    }
+}
+
 =item clone <bug> [new IDs]
 
 The clone control command allows you to duplicate a bug report. It is useful

Attachment: signature.asc
Description: Digital signature

Reply via email to