git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] gitweb.perl - Optionally send archives as .zip files
@ 2007-05-20 15:46 Mark Levedahl
  2007-05-22 12:28 ` Petr Baudis
  0 siblings, 1 reply; 3+ messages in thread
From: Mark Levedahl @ 2007-05-20 15:46 UTC (permalink / raw)
  To: git; +Cc: Mark Levedahl

git-archive already knows how to generate an archive as a tar or a zip
file, but gitweb did not. zip archvies are much more usable in a Windows
environment due to native support and this patch allows a site admin the
option to deliver zip rather than tar files. The selection is done by
inserting

$feature{'snapshot'}{'default'} = ['x-zip', 'zip', ''];

in gitweb_config.perl.

Tar files remain the default option.

Signed-off-by: Mark Levedahl <mdl123@verizon.net>
---
 gitweb/gitweb.perl |   25 +++++++++++++++++--------
 1 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 21864c6..273cad2 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -129,7 +129,7 @@ our %feature = (
 	# $feature{'snapshot'}{'default'} = [undef];
 	# To have project specific config enable override in $GITWEB_CONFIG
 	# $feature{'snapshot'}{'override'} = 1;
-	# and in project config gitweb.snapshot = none|gzip|bzip2;
+	# and in project config gitweb.snapshot = none|gzip|bzip2|zip;
 	'snapshot' => {
 		'sub' => \&feature_snapshot,
 		'override' => 0,
@@ -227,6 +227,8 @@ sub feature_snapshot {
 		return ('x-gzip', 'gz', 'gzip');
 	} elsif ($val eq 'bzip2') {
 		return ('x-bzip2', 'bz2', 'bzip2');
+	} elsif ($val eq 'zip') {
+		return ('x-zip', 'zip', '');
 	} elsif ($val eq 'none') {
 		return ();
 	}
@@ -3912,19 +3914,26 @@ sub git_snapshot {
 		$hash = git_get_head_hash($project);
 	}

-	my $filename = decode_utf8(basename($project)) . "-$hash.tar.$suffix";
+	my $git = git_cmd_str();
+	my $name = $project;
+	$name =~ s/\047/\047\\\047\047/g;
+	my $filename = decode_utf8(basename($project));
+	my $cmd;
+	if ($suffix eq 'zip') {
+		$filename .= "-$hash.$suffix";
+		$cmd = "$git archive --format=zip --prefix=\'$name\'/ $hash";
+	} else {
+		$filename .= "-$hash.tar.$suffix";
+		$cmd = "$git archive --format=tar --prefix=\'$name\'/ $hash | $command";
+	}

 	print $cgi->header(
 		-type => "application/$ctype",
 		-content_disposition => 'inline; filename="' . "$filename" . '"',
 		-status => '200 OK');

-	my $git = git_cmd_str();
-	my $name = $project;
-	$name =~ s/\047/\047\\\047\047/g;
-	open my $fd, "-|",
-		"$git archive --format=tar --prefix=\'$name\'/ $hash | $command"
-		or die_error(undef, "Execute git-tar-tree failed");
+	open my $fd, "-|", $cmd
+		or die_error(undef, "Execute git-archive failed");
 	binmode STDOUT, ':raw';
 	print <$fd>;
 	binmode STDOUT, ':utf8'; # as set at the beginning of gitweb.cgi
--
1.5.2.rc3.95.gb3c7e

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] gitweb.perl - Optionally send archives as .zip files
  2007-05-20 15:46 [PATCH] gitweb.perl - Optionally send archives as .zip files Mark Levedahl
@ 2007-05-22 12:28 ` Petr Baudis
  2007-05-23 22:09   ` Junio C Hamano
  0 siblings, 1 reply; 3+ messages in thread
From: Petr Baudis @ 2007-05-22 12:28 UTC (permalink / raw)
  To: Mark Levedahl; +Cc: git

 Hi,

On Sun, May 20, 2007 at 05:46:46PM CEST, Mark Levedahl wrote:
> git-archive already knows how to generate an archive as a tar or a zip
> file, but gitweb did not. zip archvies are much more usable in a Windows
> environment due to native support and this patch allows a site admin the
> option to deliver zip rather than tar files. The selection is done by
> inserting
> 
> $feature{'snapshot'}{'default'} = ['x-zip', 'zip', ''];
> 
> in gitweb_config.perl.
> 
> Tar files remain the default option.
> 
> Signed-off-by: Mark Levedahl <mdl123@verizon.net>

Acked-by: Petr Baudis <pasky@suse.cz>

Maybe the code should decide based on program value being 'zip' rather
than suffix value, but that's just dubious nit-picking.

> @@ -3912,19 +3914,26 @@ sub git_snapshot {
>  		$hash = git_get_head_hash($project);
>  	}
> 
> -	my $filename = decode_utf8(basename($project)) . "-$hash.tar.$suffix";
> +	my $git = git_cmd_str();
> +	my $name = $project;
> +	$name =~ s/\047/\047\\\047\047/g;

By the way, this really looks like an entry to our very own would-be
"git obfuscation of the month" contest. Why did whoever made the code
not just write that ' there?  (I know it's been in the original code
too.)

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Ever try. Ever fail. No matter. // Try again. Fail again. Fail better.
		-- Samuel Beckett

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] gitweb.perl - Optionally send archives as .zip files
  2007-05-22 12:28 ` Petr Baudis
@ 2007-05-23 22:09   ` Junio C Hamano
  0 siblings, 0 replies; 3+ messages in thread
From: Junio C Hamano @ 2007-05-23 22:09 UTC (permalink / raw)
  To: Petr Baudis; +Cc: Mark Levedahl, git

Petr Baudis <pasky@suse.cz> writes:

>  Hi,
>
> On Sun, May 20, 2007 at 05:46:46PM CEST, Mark Levedahl wrote:
>> git-archive already knows how to generate an archive as a tar or a zip
>> file, but gitweb did not. zip archvies are much more usable in a Windows
>> environment due to native support and this patch allows a site admin the
>> option to deliver zip rather than tar files. The selection is done by
>> inserting
>> 
>> $feature{'snapshot'}{'default'} = ['x-zip', 'zip', ''];
>> 
>> in gitweb_config.perl.
>> 
>> Tar files remain the default option.
>> 
>> Signed-off-by: Mark Levedahl <mdl123@verizon.net>
>
> Acked-by: Petr Baudis <pasky@suse.cz>

Ok, will apply to 'master'.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-05-23 22:09 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-20 15:46 [PATCH] gitweb.perl - Optionally send archives as .zip files Mark Levedahl
2007-05-22 12:28 ` Petr Baudis
2007-05-23 22:09   ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).