--- "Aneesh Kumar K.V" <aneesh.kumar@xxxxxxxxx> 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 > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxx> > --- > 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 > > - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html