X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=tb-list.pl;h=e31304a37512f10964d3d3dc02a46c86cf66908a;hb=8b13342a48b077df1c1117087fa4c9c2e99c0984;hp=385e031c4fa22c6df28599c1b9d6e0ebe5d72588;hpb=f511dd7da24f770121c5fbcf34dc4158e10d2d2f;p=topbloke.git diff --git a/tb-list.pl b/tb-list.pl index 385e031..e31304a 100755 --- a/tb-list.pl +++ b/tb-list.pl @@ -57,13 +57,22 @@ foreach $sort (@sort) { our %patches; +use Data::Dumper; + foreach_patch($relatedto || $leaves || !$spec ? { } : $spec, $deleted || $deleted_only, - [0, !!$leaves, 0, $toposort || !!$relatedto], + [qw(B_deps +included)], sub { - my ($patch,$parsedname,@info) = @_; - $patches{$patch}{Info} = \@info; + my ($patch,$parsedname,$meta) = @_; + +print Dumper($parsedname); + $patches{$patch}{Meta} = $meta; $patches{$patch}{ParsedName} = $parsedname; + $patches{$patch}{Deps} = + grep { m/^[^-]/ } split /\n/, $meta->{'B_deps'}; + $patches{$patch}{Included} = { }; + $patches{$patch}{Included}{$_} = 1 + foreach split /\n/, $meta->{'+included'}; }); #----- selection ----- @@ -73,8 +82,8 @@ if ($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] }) { + next if defined $v->{Meta}{'deleted'}; + foreach my $dep (@{ $v->{Deps} }) { debug("leaves $p $dep"); next unless exists $patches{$dep}; $patches{$dep}{NotLeaf} = 1; @@ -86,7 +95,7 @@ if ($relatedto) { foreach my $p (keys %patches) { my $v = $patches{$p}; # mark Related=1 if any patch matching $relatedto includes us - foreach my $dep (keys %{ $v->{Info}[3] }) { + foreach my $dep (keys %{ $v->{Included} }) { next unless exists $patches{$dep}; my $depv = $patches{$dep}; next unless patch_matches_spec($depv->{ParsedName}, $relatedto); @@ -95,7 +104,7 @@ if ($relatedto) { } if (patch_matches_spec($v->{ParsedName}, $relatedto)) { # if we match $relatedto, mark all our inclusions as Related=1 - foreach my $dep (keys %{ $v->{Info}[3] }) { + foreach my $dep (keys %{ $v->{Included} }) { next unless exists $patches{$dep}; $patches{$dep}{Related} = 1; } @@ -109,8 +118,8 @@ our @output; foreach my $p (keys %patches) { my $v = $patches{$p}; - next if !$deleted && $v->{Info}[0]{Deleted}; - next if $deleted_only && !$v->{Info}[0]{Deleted}; + next if !$deleted && defined $v->{Meta}{'deleted'}; + next if $deleted_only && !defined $v->{Meta}{'deleted'}; next if $leaves && $v->{NotLeaf}; next if $relatedto && !$v->{Related}; next if $spec && !patch_matches_spec($v->{ParsedName}, $spec); @@ -151,7 +160,7 @@ sub sortsub () { my $ab = (qw(a b))[$ix]; my $ba = (qw(b a))[$ix]; my $r = (qw(1 -1))[$ix]; - $txt .= " return $r if \$v${ab}->{Info}[3]{\$$ba};\n"; + $txt .= " return $r if \$v${ab}->{Included}{\$$ba};\n"; } } else { die $sort; @@ -182,13 +191,16 @@ foreach my $p (@output) { my $v = $patches{$p}; my $pa = $v->{ParsedName}; my ($msgkind, $msg) = git_get_object("$pa->{Ref}:.topbloke/msg"); - die "$p $msgkind ?" unless $msgkind eq 'blob'; + if ($msgkind ne 'blob') { + warn "$p $msgkind ?"; + next; + } my $subject = $msg =~ m/^Subject:\s*(?:\[[^][]*\]\s*)?(.*\S)\s*$/mi ? $1 : "[no subject]"; printf("%1s%1s %s\@%s/%s/%-20s %s\n", $p eq $current_patch ? $ifcurrent : '', - $v->{Info}[0]{Deleted} ? 'D' : '', + defined $v->{Meta}{'deleted'} ? 'D' : '', $pa->{Email}, $pa->{Domain}, $pa->{Date}, $pa->{Nick}, $subject) or die $!;