chiark / gitweb /
list: support -c
[topbloke.git] / tb-list.pl
index e1fea3981c919b894943e03a36492730a8131025..1e952704a152cdf08da42eb617e51d1a5aaabe26 100755 (executable)
@@ -8,18 +8,28 @@ use strict;
 use Getopt::Long;
 use Topbloke;
 
+#----- option parsing -----
+
 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";
@@ -43,7 +53,7 @@ foreach $sort (@sort) {
     $toposort=1 if $sort eq $toposort;
 }
 
-$relatedto = $relatedto ? parse_patch_spec($relatedto) : undef;
+#----- list patches -----
 
 our %patches;
 
@@ -56,11 +66,16 @@ foreach_patch($relatedto || $leaves || !$spec ? { } : $spec,
                  $patches{$patch}{ParsedName} = $parsedname;
              });
 
+#----- 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;
        }
@@ -102,6 +117,8 @@ foreach my $p (keys %patches) {
     push @output, $p;
 }
 
+#----- sorting -----
+
 sub sortsub () {
     my $txt = "sub sort_cmp {\n    my \$r;\n";
     debug("@sort");
@@ -148,7 +165,7 @@ eval sortsub()." 1;" or die "$@ ?";
 
 @output = sort sort_cmp @output;
 
-use Data::Dumper;
+#----- printing -----
 
 my $current_branch = current_branch();
 my $current_patch = $current_branch->{Kind} eq 'tip'