@leroysheep / LeeRoySheep / commits / 9784b6cfb6

Meta/cook: use b4 mbox to attempt to grab all messages in the thread

Junio C Hamano committed May 21, 2026 at 16:19 UTC 9784b6cfb65cc263b2a680693e950197d3f36ea9
1 file changed +32 -18
cook
+32 -18
index ebe3f215ed..604544ac15 100755 --- a/cook +++ b/cook @@ -124,33 +124,47 @@ sub topic_relation { } } +my %msgid_to_in_reply_to = (); + sub get_message_parent { my ($mid) = @_; - my @line = (); - my %irt = (); + my $state = 0; + my ($message_id, $in_reply_to); + + if (exists $msgid_to_in_reply_to{$mid}) { + return $msgid_to_in_reply_to{$mid}; + } - open(my $fh, "-|", qw(b4 -q mbox --single-message -o-), "$mid"); + open(my $fh, "-|", qw(b4 -q mbox -o-), "$mid"); while (<$fh>) { - last if (/^$/); chomp; - if (/^\s/) { - $line[-1] .= $_; - } else { - push @line, $_; + if ($state == 0) { + if (/^$/) { + if (defined $message_id && defined $in_reply_to) { + $msgid_to_in_reply_to{$message_id} = $in_reply_to; + } + $state = 1; + $message_id = $in_reply_to = undef; + } elsif (/^message-id:\s*<(.*)>\s*$/i) { + $message_id = $1; + } elsif (/^in-reply-to:\s*<(.*)>\s*/i) { + $in_reply_to = $1; + } + next; + } elsif ($state == 1) { + if (/^From /) { + $state = 0; + } + next; } } - while (<$fh>) { # slurp - } close($fh); - for (@line) { - if (s/^in-reply-to:\s*//i) { - while (/\s*<([^<]*)>\s*(.*)/) { - $irt{$1} = $1; - $_ = $2; - } - } + + if (exists $msgid_to_in_reply_to{$mid}) { + return $msgid_to_in_reply_to{$mid}; + } else { + return (); } - keys %irt; } sub get_source {