Skip to content

Commit

Permalink
gitweb: Fix support for legacy gitweb config for snapshots
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jakub Narebski authored and Junio C Hamano committed Jul 22, 2007
1 parent 16a7fcf commit a781785
Showing 1 changed file with 20 additions and 7 deletions.
27 changes: 20 additions & 7 deletions gitweb/gitweb.perl
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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(
Expand All @@ -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,
Expand Down Expand Up @@ -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");
}

Expand Down

0 comments on commit a781785

Please sign in to comment.