add support for "last"
authorStefano Zacchiroli <zack@debian.org>
Sun, 27 Jan 2008 19:42:01 +0000 (20:42 +0100)
committerStefano Zacchiroli <zack@debian.org>
Sun, 27 Jan 2008 19:42:01 +0000 (20:42 +0100)
blog/posts/2008/01/bts_followup.mdwn
blog/posts/2008/01/bts_followup/bts
blog/posts/2008/01/bts_followup/followup.patch

index e357fb1..65b6206 100644 (file)
@@ -90,5 +90,7 @@ Changelog:
 replying to (the bug report is always on Cc though)
 * bug message number is now 1-based, following the convention of the BTS
 `get_bug_log` method
+* add the possibility to specify "last" (and even "last-1" and so on) for
+pointing to messages in the bug log starting from log bottom
 
 [[tag planet/debian debian devscripts lang/english hack]]
index e46f85f..35a2d5f 100755 (executable)
@@ -925,8 +925,9 @@ sub bts_select {
 Fire up a mail user agent to follow up to a given bug report, quoting the bug
 log text. Per default the text of the first message in the bug log is inlined
 for quoting purposes, you can specify an alternative one providing an optional
-bug log ID. The first message in the bug log has bug log ID 0, second message
-1, and so on.
+bug log ID. The first message in the bug log has bug log ID 1, second message
+2, and so on. Alternatively, "last" can be specified as a bug log ID to choose
+the last message, "last-1" to choose the next to last, and so on.
 
 =cut
 
@@ -937,7 +938,14 @@ sub bts_followup {
   $msglogid = 1 unless defined $msglogid;
   my $soap = SOAP::Lite->uri($soapurl)->proxy($soapproxyurl);
   my $log = $soap->get_bug_log($bug)->result();
-  my $msg = $log->[$msglogid-1];
+  my @logs = @$log;
+  my $msg;
+  if ($msglogid =~ /^last(-(\d+))?$/i) {
+    my $idx = defined $2 ? $#logs-$2 : $#logs;
+    $msg = $logs[$idx];
+  } else {
+    $msg = $logs[$msglogid-1];
+  }
   my %headers = parse_rfc822_headers($msg->{header});
 
   # extract data needed to compose the follow up email
index 653a856..b1c31ad 100644 (file)
@@ -1,5 +1,5 @@
 --- /usr/bin/bts       2008-01-11 21:59:45.000000000 +0100
-+++ bts        2008-01-26 16:04:34.000000000 +0100
++++ bts        2008-01-27 20:38:48.000000000 +0100
 @@ -266,6 +266,13 @@
  shell.  Default is 'mutt -f %s'.  (Also, %% will be substituted by a
  single % if this is needed.)
@@ -70,7 +70,7 @@
  if ($opt_sendmail and $opt_smtphost) {
      die "bts: --sendmail and --smtp-host mutually exclusive\n";
  }
-@@ -901,6 +920,69 @@
+@@ -901,6 +920,77 @@
       print map {qq($_\n)} @{$bugs};
  }
  
@@ -79,8 +79,9 @@
 +Fire up a mail user agent to follow up to a given bug report, quoting the bug
 +log text. Per default the text of the first message in the bug log is inlined
 +for quoting purposes, you can specify an alternative one providing an optional
-+bug log ID. The first message in the bug log has bug log ID 0, second message
-+1, and so on.
++bug log ID. The first message in the bug log has bug log ID 1, second message
++2, and so on. Alternatively, "last" can be specified as a bug log ID to choose
++the last message, "last-1" to choose the next to last, and so on.
 +
 +=cut
 +
 +  $msglogid = 1 unless defined $msglogid;
 +  my $soap = SOAP::Lite->uri($soapurl)->proxy($soapproxyurl);
 +  my $log = $soap->get_bug_log($bug)->result();
-+  my $msg = $log->[$msglogid-1];
++  my @logs = @$log;
++  my $msg;
++  if ($msglogid =~ /^last(-(\d+))?$/i) {
++    my $idx = defined $2 ? $#logs-$2 : $#logs;
++    $msg = $logs[$idx];
++  } else {
++    $msg = $logs[$msglogid-1];
++  }
 +  my %headers = parse_rfc822_headers($msg->{header});
 +
 +  # extract data needed to compose the follow up email
  =item clone <bug> [new IDs]
  
  The clone control command allows you to duplicate a bug report. It is useful
-@@ -2194,6 +2276,24 @@
+@@ -2194,6 +2284,24 @@
      return $header;
  }
  
  ##########  Browsing and caching subroutines
  
  # Mirrors a given thing; if the online version is no newer than our
-@@ -3217,6 +3317,11 @@
+@@ -3217,6 +3325,11 @@
  If this is set, specifies a mail reader to use instead of mutt.  Same as
  the --mailreader command line option.