+sub thread_to_s {
+ my ($msgs) = @_;
+ my $rootset = PublicInbox::SearchThread::thread($msgs, sub {
+ [ sort { $a->{id} cmp $b->{id} } @{$_[0]} ] });
+ my $st = '';
+ my @q = map { (0, $_) } @$rootset;
+ while (@q) {
+ my $level = shift @q;
+ my $node = shift @q or next;
+ $st .= (" "x$level). "$node->{id}\n";
+ my $cl = $level + 1;
+ unshift @q, map { ($cl, $_) } @{$node->{children}};
+ }
+ $st;
+}