Re: gitweb / cg-export
- From
Junio C Hamano <junkio@cox.net>
- Date
- Aug 16, 2006, 18:01 UTC
- Message-ID
- <7v4pwc4l0y.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <44E2F911.6060002@gmail.com>
"Aneesh Kumar K.V" <aneesh.kumar@gmail.com> writes:
> How about the below on top of latest git > > -aneesh
This looks Ok (except "$project" needs to be shell quoted on the pipe-open line and possibly in the URL; there may be some other minor details I missed). It needs to be protected by elective, opt-in configuration variable, similarly to how "blame" is done, since I suspect this would be rather expensive.
Show 42 quoted lines
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 37a6284..b9b522a 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -175,6 +175,7 @@ my %actions = (
> "tag" => \&git_tag,
> "tags" => \&git_tags,
> "tree" => \&git_tree,
> + "snapshot" => \&git_snapshot,
> );
>
> $action = 'summary' if (!defined($action));
> @@ -1334,6 +1335,7 @@ sub git_shortlog_body {
> "<td class=\"link\">" .
> $cgi->a({-href => href(action=>"commit", hash=>$commit)}, "commit") . " | " .
> $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff") .
> + " | " .$cgi->a({-href => "$my_uri/$project.tar.gz?" . esc_param("p=$project;a=snapshot;h=$commit")}, "snapshot") .
> "</td>\n" .
> "</tr>\n";
> }
> @@ -2097,6 +2099,21 @@ sub git_tree {
> git_footer_html();
> }
>
> +sub git_snapshot {
> + if (!defined $hash) {
> + $hash = git_get_head_hash($project);
> + }
> + print $cgi->header(-type=>'application/x-tar',
> + -Content-Encoding=>'x-gzip', -status=> '200 OK');
> + open my $fd, "-|", "$GIT tar-tree $hash $project | gzip -c9" or die_error(undef, "Execute git-tar-tree failed.");
> + binmode STDOUT, ':raw';
> + print <$fd>;
> + binmode STDOUT, ':utf8'; # as set at the beginning of gitweb.cgi
> + close $fd;
> +
> +
> +}
> +
> sub git_log {
> my $head = git_get_head_hash($project);
> if (!defined $hash) {