X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FFeed.pm;h=a5828a8e16bf9f475c1897b60f7cd4279e064c24;hb=8968889e3ebfa09dd2c80fe8b917b83ac13ff356;hp=1201dd1165a03d3e0fc3ca3ed81b3dfe3bbf735f;hpb=f564327fd1e694056a4b13ed398cabd8d0d4c173;p=public-inbox.git diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm index 1201dd11..a5828a8e 100644 --- a/lib/PublicInbox/Feed.pm +++ b/lib/PublicInbox/Feed.pm @@ -9,7 +9,7 @@ use Email::Address; use Email::MIME; use Date::Parse qw(strptime); use PublicInbox::Hval; -use PublicInbox::GitCatFile; +use PublicInbox::Git; use PublicInbox::View; use PublicInbox::MID qw/mid_clean mid2path/; use POSIX qw/strftime/; @@ -55,7 +55,8 @@ sub atom_header { qq(\n) . qq{} . qq{$title} . - qq({url}"/>) . + qq() . qq({atomurl}"/>) . qq(mailto:$feed_opts->{id_addr}); } @@ -66,7 +67,7 @@ sub emit_atom { my $max = $ctx->{max} || MAX_PER_PAGE; my $feed_opts = get_feedopts($ctx); my $x = atom_header($feed_opts); - my $git = PublicInbox::GitCatFile->new($ctx->{git_dir}); + my $git = $ctx->{git} ||= PublicInbox::Git->new($ctx->{git_dir}); each_recent_blob($ctx, sub { my ($path, undef, $ts) = @_; if (defined $x) { @@ -75,7 +76,6 @@ sub emit_atom { } add_to_feed($feed_opts, $fh, $path, $git); }); - $git = undef; # destroy pipes end_feed($fh); } @@ -105,11 +105,10 @@ sub emit_atom_thread { $feed_opts->{url} = $html_url; $feed_opts->{emit_header} = 1; - my $git = PublicInbox::GitCatFile->new($ctx->{git_dir}); + my $git = $ctx->{git} ||= PublicInbox::Git->new($ctx->{git_dir}); foreach my $msg (@{$res->{msgs}}) { add_to_feed($feed_opts, $fh, mid2path($msg->mid), $git); } - $git = undef; # destroy pipes end_feed($fh); } @@ -122,26 +121,25 @@ sub emit_html_index { my $title = $feed_opts->{description} || ''; $title = PublicInbox::Hval->new_oneline($title)->as_html; - my $atom_url = $feed_opts->{atomurl}; my ($footer, $param, $last); my $state = { ctx => $ctx, seen => {}, anchor_idx => 0 }; my $srch = $ctx->{srch}; - my $top = "$title (Atom feed)"; + my $top = "$title (Atom feed)"; if ($srch) { - $top = qq{$top} . + $top = qq{
$top} .
 			  qq{ } .
 			  qq{} .
-			  qq{} .
-			  PublicInbox::View::PRE_WRAP;
+			  q{
}
 	} else {
-		$top = PublicInbox::View::PRE_WRAP . $top . "\n";
+		$top = '
' . $top . "\n";
 	}
 
 	$fh->write("$title" .
 		   "" .
+		   "href=\"new.atom\"\ntype=\"application/atom+xml\"/>" .
+		   PublicInbox::Hval::STYLE .
 		   "$top");
 
 	# if the 'r' query parameter is given, it is a legacy permalink
@@ -167,7 +165,7 @@ sub emit_html_index {
 
 sub emit_index_nosrch {
 	my ($ctx, $state, $fh) = @_;
-	my $git = PublicInbox::GitCatFile->new($ctx->{git_dir});
+	my $git = $ctx->{git} ||= PublicInbox::Git->new($ctx->{git_dir});
 	my (undef, $last) = each_recent_blob($ctx, sub {
 		my ($path, $commit, $ts, $u, $subj) = @_;
 		$state->{first} ||= $commit;
@@ -196,7 +194,7 @@ sub nav_footer {
 		$head = $cgi->path_info;
 		$head = qq!head!;
 	}
-	my $atom = "{atomurl}\">Atom";
+	my $atom = "{atomurl}\">Atom feed";
 	"page: $next $head $atom";
 }
 
@@ -219,14 +217,11 @@ sub each_recent_blob {
 	# get recent messages
 	# we could use git log -z, but, we already know ssoma will not
 	# leave us with filenames with spaces in them..
-	my @cmd = ('git', "--git-dir=$ctx->{git_dir}",
-			qw/log --no-notes --no-color --raw -r
-			   --abbrev=16 --abbrev-commit/,
-			"--format=%h%x00%ct%x00%an%x00%s%x00");
-	push @cmd, $range;
-
-	my $pid = open(my $log, '-|', @cmd) or
-		die('open `'.join(' ', @cmd) . " pipe failed: $!\n");
+	my $git = $ctx->{git} ||= PublicInbox::Git->new($ctx->{git_dir});
+	my $log = $git->popen(qw/log --no-notes --no-color --raw -r
+				--abbrev=16 --abbrev-commit/,
+				"--format=%h%x00%ct%x00%an%x00%s%x00",
+				$range);
 	my %deleted; # only an optimization at this point
 	my $last;
 	my $nr = 0;
@@ -289,14 +284,7 @@ sub get_feedopts {
 
 	my $url_base;
 	if ($cgi) {
-		my $base;
-		if (ref($cgi) eq 'CGI') {
-			$base = $cgi->url(-base);
-		} else {
-			$base = $cgi->base->as_string;
-			$base =~ s!/\z!!;
-		}
-		$url_base = "$base/$listname";
+		$url_base = $cgi->base->as_string . $listname;
 		if (my $mid = $ctx->{mid}) { # per-thread feed:
 			$rv{atomurl} = "$url_base/$mid/t.atom";
 		} else {