Re: [PATCH] gitweb: Support for snapshot
- From
- Luben Tuikov <ltuikov@yahoo.com>
- Date
- Aug 18, 2006, 19:51 UTC
- Message-ID
- <20060818195148.66411.qmail@web31807.mail.mud.yahoo.com>
- In-Reply-To
- <44E54AC6.9010600@gmail.com>
--- "Aneesh Kumar K.V" <aneesh.kumar@gmail.com> wrote:
> This adds snapshort support in gitweb. To enable one need to > set gitweb.snapshot = true in the config file.
Could you use bzip2? It generates smaller files (better compression), which is a good thing when downloading over a network.
Luben
Show 106 quoted lines
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@gmail.com>
> ---
> gitweb/gitweb.perl | 41 +++++++++++++++++++++++++++++++++++++----
> 1 files changed, 37 insertions(+), 4 deletions(-)
>
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 04282fa..d6f96a3 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -15,6 +15,7 @@ use CGI::Carp qw(fatalsToBrowser);
> use Encode;
> use Fcntl ':mode';
> use File::Find qw();
> +use File::Basename qw(basename);
> binmode STDOUT, ':utf8';
>
> our $cgi = new CGI;
> @@ -175,6 +176,7 @@ my %actions = (
> "tag" => \&git_tag,
> "tags" => \&git_tags,
> "tree" => \&git_tree,
> + "snapshot" => \&git_snapshot,
> );
>
> $action = 'summary' if (!defined($action));
> @@ -1320,6 +1322,7 @@ sub git_difftree_body {
> sub git_shortlog_body {
> # uses global variable $project
> my ($revlist, $from, $to, $refs, $extra) = @_;
> + my $have_snapshot = git_get_project_config_bool('snapshot');
> $from = 0 unless defined $from;
> $to = $#{$revlist} if (!defined $to || $#{$revlist} < $to);
>
> @@ -1344,8 +1347,11 @@ sub git_shortlog_body {
> print "</td>\n" .
> "<td class=\"link\">" .
> $cgi->a({-href => href(action=>"commit", hash=>$commit)}, "commit") . " | " .
> - $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff") .
> - "</td>\n" .
> + $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff");
> + if ($have_snapshot) {
> + print " | " . $cgi->a({-href => href(action=>"snapshot", hash=>$commit)}, "snapshot");
> + }
> + print "</td>\n" .
> "</tr>\n";
> }
> if (defined $extra) {
> @@ -2112,6 +2118,29 @@ sub git_tree {
> git_footer_html();
> }
>
> +sub git_snapshot {
> +
> + if (!defined $hash) {
> + $hash = git_get_head_hash($project);
> + }
> +
> + my $filename = basename($project) . "-$hash.tar.gz";
> +
> + print $cgi->header(-type => 'application/x-tar',
> + -content-encoding => 'x-gzip',
> + '-content-disposition' => "inline; filename=\"$filename\"",
> + -status => '200 OK');
> +
> + open my $fd, "-|", "$GIT tar-tree $hash \'$project\' | gzip" 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) {
> @@ -2206,6 +2235,7 @@ sub git_commit {
> }
> my $refs = git_get_references();
> my $ref = format_ref_marker($refs, $co{'id'});
> + my $have_snapshot = git_get_project_config_bool('snapshot');
> my $formats_nav = '';
> if (defined $file_name && defined $co{'parent'}) {
> my $parent = $co{'parent'};
> @@ -2241,8 +2271,11 @@ sub git_commit {
> "<td class=\"sha1\">" .
> $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'}, hash_base=>$hash), class =>
> "list"}, $co{'tree'}) .
> "</td>" .
> - "<td class=\"link\">" . $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'},
> hash_base=>$hash)}, "tree") .
> - "</td>" .
> + "<td class=\"link\">" . $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'},
> hash_base=>$hash)}, "tree");
> + if ($have_snapshot) {
> + print " | " . $cgi->a({-href => href(action=>"snapshot", hash=>$hash)}, "snapshot");
> + }
> + print "</td>" .
> "</tr>\n";
> my $parents = $co{'parents'};
> foreach my $par (@$parents) {
> --
> 1.4.2.rc1.g83e1-dirty
>
>