chiark
/
gitweb
/
~ian
/
topbloke.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix a few bugs in THEORY
[topbloke.git]
/
tb-list.pl
diff --git
a/tb-list.pl
b/tb-list.pl
index 1e952704a152cdf08da42eb617e51d1a5aaabe26..c23f6a00e58d394fd4604065e36d08b7195ed08e 100755
(executable)
--- a/
tb-list.pl
+++ b/
tb-list.pl
@@
-59,11
+59,16
@@
our %patches;
foreach_patch($relatedto || $leaves || !$spec ? { } : $spec,
$deleted || $deleted_only,
foreach_patch($relatedto || $leaves || !$spec ? { } : $spec,
$deleted || $deleted_only,
- [
0, !!$leaves, 0, $toposort || !!$relatedto
],
+ [
qw(B_deps +included)
],
sub {
sub {
- my ($patch,$parsedname,
@info
) = @_;
- $patches{$patch}{
Info} = \@info
;
+ my ($patch,$parsedname,
$meta
) = @_;
+ $patches{$patch}{
Meta} = $meta
;
$patches{$patch}{ParsedName} = $parsedname;
$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 -----
});
#----- selection -----
@@
-73,8
+78,8
@@
if ($leaves) {
foreach my $p (keys %patches) {
debug("leaves $p");
my $v = $patches{$p};
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;
debug("leaves $p $dep");
next unless exists $patches{$dep};
$patches{$dep}{NotLeaf} = 1;
@@
-86,7
+91,7
@@
if ($relatedto) {
foreach my $p (keys %patches) {
my $v = $patches{$p};
# mark Related=1 if any patch matching $relatedto includes us
foreach my $p (keys %patches) {
my $v = $patches{$p};
# mark Related=1 if any patch matching $relatedto includes us
- foreach my $dep (keys %{ $v->{In
fo}[3]
}) {
+ foreach my $dep (keys %{ $v->{In
cluded}
}) {
next unless exists $patches{$dep};
my $depv = $patches{$dep};
next unless patch_matches_spec($depv->{ParsedName}, $relatedto);
next unless exists $patches{$dep};
my $depv = $patches{$dep};
next unless patch_matches_spec($depv->{ParsedName}, $relatedto);
@@
-95,7
+100,7
@@
if ($relatedto) {
}
if (patch_matches_spec($v->{ParsedName}, $relatedto)) {
# if we match $relatedto, mark all our inclusions as Related=1
}
if (patch_matches_spec($v->{ParsedName}, $relatedto)) {
# if we match $relatedto, mark all our inclusions as Related=1
- foreach my $dep (keys %{ $v->{In
fo}[3]
}) {
+ foreach my $dep (keys %{ $v->{In
cluded}
}) {
next unless exists $patches{$dep};
$patches{$dep}{Related} = 1;
}
next unless exists $patches{$dep};
$patches{$dep}{Related} = 1;
}
@@
-109,8
+114,8
@@
our @output;
foreach my $p (keys %patches) {
my $v = $patches{$p};
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);
next if $leaves && $v->{NotLeaf};
next if $relatedto && !$v->{Related};
next if $spec && !patch_matches_spec($v->{ParsedName}, $spec);
@@
-150,8
+155,8
@@
sub sortsub () {
foreach my $ix (qw(0 1)) {
my $ab = (qw(a b))[$ix];
my $ba = (qw(b a))[$ix];
foreach my $ix (qw(0 1)) {
my $ab = (qw(a b))[$ix];
my $ba = (qw(b a))[$ix];
- my $r = (qw(
-1
1))[$ix];
- $txt .= " return $r if \$v${ab}->{In
fo}[3]
{\$$ba};\n";
+ my $r = (qw(
1 -
1))[$ix];
+ $txt .= " return $r if \$v${ab}->{In
cluded}
{\$$ba};\n";
}
} else {
die $sort;
}
} else {
die $sort;
@@
-168,20
+173,30
@@
eval sortsub()." 1;" or die "$@ ?";
#----- printing -----
my $current_branch = current_branch();
#----- 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};
my $pa = $v->{ParsedName};
my ($msgkind, $msg) = git_get_object("$pa->{Ref}:.topbloke/msg");
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",
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 ?
'>'
: '',
-
$v->{Info}[0]{Deleted
} ? 'D' : '',
+ $p eq $current_patch ?
$ifcurrent
: '',
+
defined $v->{Meta}{'deleted'
} ? 'D' : '',
$pa->{Email}, $pa->{Domain}, $pa->{Date}, $pa->{Nick},
$subject)
or die $!;
$pa->{Email}, $pa->{Domain}, $pa->{Date}, $pa->{Nick},
$subject)
or die $!;