chiark / gitweb /
FORMAT: put deps etc. in base branch where we need them
[topbloke.git] / tb-list.pl
index 620f7599650aec3b2baff315263728ab8ea12f87..385e031c4fa22c6df28599c1b9d6e0ebe5d72588 100755 (executable)
@@ -15,13 +15,21 @@ Getopt::Long::Configure(qw(bundling));
 our $deleted=0;
 our $deleted_only=0;
 our $current=0;
-our $relatedto=0;
+our $relatedto;
 our $leaves=0;
 our $sort='';
 
 GetOptions("d|deleted!" => \$deleted,         # including deleted patches
           "deleted-only!" => \$deleted_only, # only deleted patches
-          "r|related=s" => \$relatedto,     # only patches related to this one
+          "r|related=s" => sub {             # only patches related to that
+              $relatedto = parse_patch_spec($_[1]);
+          },
+          "c|related-current" => sub {      # only patches related to current
+              my $current_branch = current_branch();
+              die "-c only permitted when on a topbloke branch\n"
+                  unless $current_branch->{Kind} =~ m/^(?:tip|base)$/;
+              $relatedto = $current_branch;
+          },
           "l|last|leaf|leaves" => \$leaves, # only leaf patches
           "sort=s" => \$sort,
     ) or die "bad options\n";
@@ -45,8 +53,6 @@ foreach $sort (@sort) {
     $toposort=1 if $sort eq $toposort;
 }
 
-$relatedto = $relatedto ? parse_patch_spec($relatedto) : undef;
-
 #----- list patches -----
 
 our %patches;
@@ -63,10 +69,13 @@ foreach_patch($relatedto || $leaves || !$spec ? { } : $spec,
 #----- selection -----
 
 if ($leaves) {
+    debug("leaves");
     foreach my $p (keys %patches) {
+       debug("leaves $p");
        my $v = $patches{$p};
        next if $v->{Info}[0]{Deleted};
        foreach my $dep (keys %{ $v->{Info}[1] }) {
+           debug("leaves $p $dep");
            next unless exists $patches{$dep};
            $patches{$dep}{NotLeaf} = 1;
        }
@@ -141,7 +150,7 @@ sub sortsub () {
            foreach my $ix (qw(0 1)) {
                my $ab = (qw(a b))[$ix];
                my $ba = (qw(b a))[$ix];
-               my $r = (qw(-1 1))[$ix];
+               my $r = (qw(1 -1))[$ix];
                $txt .= "    return $r if \$v${ab}->{Info}[3]{\$$ba};\n";
            }
         } else {
@@ -159,8 +168,15 @@ eval sortsub()." 1;" or die "$@ ?";
 #----- printing -----
 
 my $current_branch = current_branch();
-my $current_patch = $current_branch->{Kind} eq 'tip'
-    ? $current_branch->{Fullname} : '';
+my $current_patch = '';
+my $ifcurrent;
+if ($current_branch->{Kind} eq 'tip') {
+    $current_patch = $current_branch->{Fullname};
+    $ifcurrent = '>';
+} elsif ($current_branch->{Kind} eq 'base') {
+    $current_patch = $current_branch->{Fullname};
+    $ifcurrent = '#';
+}
 
 foreach my $p (@output) {
     my $v = $patches{$p};
@@ -171,7 +187,7 @@ foreach my $p (@output) {
        $msg =~ m/^Subject:\s*(?:\[[^][]*\]\s*)?(.*\S)\s*$/mi
        ? $1 : "[no subject]";  
     printf("%1s%1s %s\@%s/%s/%-20s %s\n",
-          $p eq $current_patch ? '>' : '',
+          $p eq $current_patch ? $ifcurrent : '',
           $v->{Info}[0]{Deleted} ? 'D' : '',
           $pa->{Email}, $pa->{Domain}, $pa->{Date}, $pa->{Nick},
           $subject)