Code

gitweb: Fix support for legacy gitweb config for snapshots
authorJakub Narebski <jnareb@gmail.com>
Sun, 22 Jul 2007 21:41:20 +0000 (23:41 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 22 Jul 2007 23:35:50 +0000 (16:35 -0700)
Earlier commit which cleaned up snapshot support and introduced
support for multiple snapshot formats changed the format of
$feature{'snapshot'}{'default'} (gitweb configuration) and
gitweb.snapshot configuration variable (repository configuration).
It supported old gitweb.snapshot values of 'gzip', 'bzip2' and 'zip'
and tried to support, but failed to do that, old values of
$feature{'snapshot'}{'default'}; at least those corresponding to
old gitweb.snapshot values of 'gzip', 'bzip2' and 'zip', i.e.
  ['x-gzip', 'gz', 'gzip']
  ['x-bzip2', 'bz2', 'bzip2']
  ['x-zip', 'zip', '']

This commit moves legacy configuration support out of feature_snapshot
subroutine to separate filter_snapshot_fmts subroutine. The
filter_snapshot_fmts is used on result on result of
gitweb_check_feature('snapshot').  This way feature_snapshot deals
_only_ with repository config.

As a byproduct you can now use 'gzip' and 'bzip2' as aliases to 'tgz'
and 'tbz2' also in $feature{'snapshot'}{'default'}, not only in
gitweb.snapshot.

While at it do some whitespace cleanup: use tabs for indent, but
spaces for align.

Noticed-by: Matt McCutchen <hashproduct@gmail.com>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Tested-by: Matt McCutchen <hashproduct@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
gitweb/gitweb.perl

index c4f88245aa23ccbab07cc109a8478f1dd9ed8fdb..fdfce311fd733ec8437de1f6975e7b552e295263 100755 (executable)
@@ -307,10 +307,6 @@ sub feature_snapshot {
 
        if ($val) {
                @fmts = ($val eq 'none' ? () : split /\s*[,\s]\s*/, $val);
-               @fmts = grep { defined } map {
-                       exists $known_snapshot_format_aliases{$_} ?
-                               $known_snapshot_format_aliases{$_} : $_ } @fmts;
-               @fmts = grep(exists $known_snapshot_formats{$_}, @fmts);
        }
 
        return @fmts;
@@ -356,6 +352,18 @@ sub check_export_ok {
                (!$export_ok || -e "$dir/$export_ok"));
 }
 
+# process alternate names for backward compatibility
+# filter out unsupported (unknown) snapshot formats
+sub filter_snapshot_fmts {
+       my @fmts = @_;
+
+       @fmts = map {
+               exists $known_snapshot_format_aliases{$_} ?
+                      $known_snapshot_format_aliases{$_} : $_} @fmts;
+       @fmts = grep(exists $known_snapshot_formats{$_}, @fmts);
+
+}
+
 our $GITWEB_CONFIG = $ENV{'GITWEB_CONFIG'} || "++GITWEB_CONFIG++";
 do $GITWEB_CONFIG if -e $GITWEB_CONFIG;
 
@@ -1299,9 +1307,11 @@ sub format_diff_line {
 sub format_snapshot_links {
        my ($hash) = @_;
        my @snapshot_fmts = gitweb_check_feature('snapshot');
+       @snapshot_fmts = filter_snapshot_fmts(@snapshot_fmts);
        my $num_fmts = @snapshot_fmts;
        if ($num_fmts > 1) {
                # A parenthesized list of links bearing format names.
+               # e.g. "snapshot (_tar.gz_ _zip_)"
                return "snapshot (" . join(' ', map
                        $cgi->a({
                                -href => href(
@@ -1313,8 +1323,10 @@ sub format_snapshot_links {
                , @snapshot_fmts) . ")";
        } elsif ($num_fmts == 1) {
                # A single "snapshot" link whose tooltip bears the format name.
+               # i.e. "_snapshot_"
                my ($fmt) = @snapshot_fmts;
-               return $cgi->a({
+               return
+                       $cgi->a({
                                -href => href(
                                        action=>"snapshot",
                                        hash=>$hash,
@@ -4302,11 +4314,12 @@ sub git_tree {
 
 sub git_snapshot {
        my @supported_fmts = gitweb_check_feature('snapshot');
+       @supported_fmts = filter_snapshot_fmts(@supported_fmts);
 
        my $format = $cgi->param('sf');
        unless ($format =~ m/[a-z0-9]+/
-               && exists($known_snapshot_formats{$format})
-               && grep($_ eq $format, @supported_fmts)) {
+               && exists($known_snapshot_formats{$format})
+               && grep($_ eq $format, @supported_fmts)) {
                die_error(undef, "Unsupported snapshot format");
        }