Re: [PATCH] gitweb: Support for snapshot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



--- "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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]