* [PATCH 01/11] feed: remove threading from index
@ 2015-08-20 2:57 7% Eric Wong
0 siblings, 0 replies; 1+ results
From: Eric Wong @ 2015-08-20 2:57 UTC (permalink / raw)
To: meta
We'll be making the index smarter for people with search
support enabled. Otherwise, it'll be chronological and
a bit dumb. At least it'll use less memory.
---
lib/PublicInbox/Feed.pm | 72 ++++++++++++++++---------------------------------
1 file changed, 23 insertions(+), 49 deletions(-)
diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm
index 95bde4f..253eed2 100644
--- a/lib/PublicInbox/Feed.pm
+++ b/lib/PublicInbox/Feed.pm
@@ -40,7 +40,7 @@ sub generate {
my $git = PublicInbox::GitCatFile->new($ctx->{git_dir});
each_recent_blob($ctx, sub {
- my ($add) = @_;
+ my ($add, undef) = @_;
add_to_feed($feed_opts, $feed, $add, $git);
});
$git = undef; # destroy pipes
@@ -50,7 +50,6 @@ sub generate {
sub generate_html_index {
my ($class, $ctx) = @_;
- require PublicInbox::Thread;
my $max = $ctx->{max} || MAX_PER_PAGE;
my $feed_opts = get_feedopts($ctx);
@@ -58,30 +57,27 @@ sub generate_html_index {
my $title = $feed_opts->{description} || '';
$title = PublicInbox::Hval->new_oneline($title)->as_html;
- my @messages;
- my $git_dir = $ctx->{git_dir};
- my $git = PublicInbox::GitCatFile->new($git_dir);
- my ($first, $last) = each_recent_blob($ctx, sub {
- mime_load_for_sort($git, $_[0], \@messages);
- });
- $git = undef; # destroy pipes.
-
- my $th = PublicInbox::Thread->new(@messages);
- $th->thread;
my $html = "<html><head><title>$title</title>" .
'<link rel="alternate" title="Atom feed"' . "\nhref=\"" .
$feed_opts->{atomurl} . "\"\ntype=\"application/atom+xml\"/>" .
'</head><body>' . PRE_WRAP;
- # sort child messages in chronological order
- $th->order(*PublicInbox::Thread::sort_ts);
-
- # except we sort top-level messages reverse chronologically
- my $state = [ $ctx->{srch}, {}, $first, 0 ];
- for (PublicInbox::Thread::rsort_ts($th->rootset)) {
- dump_msg($_, 0, \$html, $state)
- }
+ my $state;
+ my $git = PublicInbox::GitCatFile->new($ctx->{git_dir});
+ my (undef, $last) = each_recent_blob($ctx, sub {
+ my ($path, $commit) = @_;
+ unless (defined $state) {
+ $state = [ $ctx->{srch}, {}, $commit, 0 ];
+ }
+ my $mime = do_cat_mail($git, $_[0]) or return 0;
+ my $t = eval { str2time($mime->header('Date')) };
+ defined($t) or $t = 0;
+ $mime->header_set('X-PI-TS', $t);
+ $html .= PublicInbox::View->index_entry($mime, 0, $state);
+ 1;
+ });
Email::Address->purge_cache;
+ $git = undef; # destroy pipes.
my $footer = nav_footer($ctx->{cgi}, $last, $feed_opts, $state);
if ($footer) {
@@ -144,12 +140,12 @@ sub each_recent_blob {
my %deleted; # only an optimization at this point
my $last;
my $nr = 0;
- my @commits = ();
+ my ($cur_commit, $first_commit, $last_commit);
while (my $line = <$log>) {
if ($line =~ /$addmsg/o) {
my $add = $1;
- next if $deleted{$add};
- $nr += $cb->($add);
+ next if $deleted{$add}; # optimization-only
+ $nr += $cb->($add, $cur_commit);
if ($nr >= $max) {
$last = 1;
last;
@@ -157,24 +153,23 @@ sub each_recent_blob {
} elsif ($line =~ /$delmsg/o) {
$deleted{$1} = 1;
} elsif ($line =~ /^commit (${hex}{7,40})/o) {
- push @commits, $1;
+ $cur_commit = $1;
+ $first_commit = $1 unless defined $first_commit;
}
}
if ($last) {
while (my $line = <$log>) {
if ($line =~ /^commit (${hex}{7,40})/o) {
- push @commits, $1;
+ $last_commit = $1;
last;
}
}
- } else {
- push @commits, undef;
}
close $log; # we may EPIPE here
# for pagination
- ($commits[0], $commits[-1]);
+ ($first_commit, $last_commit);
}
# private functions below
@@ -279,16 +274,6 @@ sub add_to_feed {
1;
}
-sub dump_msg {
- my ($self, $level, $html, $state) = @_;
- my $mime = $self->message;
- if ($mime) {
- $$html .= PublicInbox::View->index_entry($mime, $level, $state);
- }
- dump_msg($self->child, $level+1, $html, $state) if $self->child;
- dump_msg($self->next, $level, $html, $state) if $self->next;
-}
-
sub do_cat_mail {
my ($git, $path) = @_;
my $mime = eval {
@@ -298,15 +283,4 @@ sub do_cat_mail {
$@ ? undef : $mime;
}
-sub mime_load_for_sort {
- my ($git, $path, $messages) = @_;
- my $mime = do_cat_mail($git, $path) or return 0;
-
- my $t = eval { str2time($mime->header('Date')) };
- defined($t) or $t = 0;
- $mime->header_set('X-PI-TS', $t);
- push @$messages, $mime;
- 1;
-}
-
1;
--
EW
^ permalink raw reply related [relevance 7%]
Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2015-08-20 2:57 7% [PATCH 01/11] feed: remove threading from index Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).