diff options
-rwxr-xr-x | gitweb/gitweb.perl | 17 | ||||
-rwxr-xr-x | t/t9500-gitweb-standalone-no-errors.sh | 28 |
2 files changed, 40 insertions, 5 deletions
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 1aceedec8e..8a32899655 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -436,12 +436,11 @@ my %allowed_options = ( our @extra_options = $cgi->param('opt'); if (defined @extra_options) { - foreach(@extra_options) - { - if (not grep(/^$_$/, keys %allowed_options)) { + foreach my $opt (@extra_options) { + if (not exists $allowed_options{$opt}) { die_error(undef, "Invalid option parameter"); } - if (not grep(/^$action$/, @{$allowed_options{$_}})) { + if (not grep(/^$action$/, @{$allowed_options{$opt}})) { die_error(undef, "Invalid option parameter for this action"); } } @@ -598,7 +597,6 @@ sub href(%) { action => "a", file_name => "f", file_parent => "fp", - extra_options => "opt", hash => "h", hash_parent => "hp", hash_base => "hb", @@ -608,6 +606,7 @@ sub href(%) { searchtext => "s", searchtype => "st", snapshot_format => "sf", + extra_options => "opt", ); my %mapping = @mapping; @@ -2285,9 +2284,17 @@ EOF printf('<link rel="alternate" title="%s log RSS feed" '. 'href="%s" type="application/rss+xml" />'."\n", esc_param($project), href(action=>"rss")); + printf('<link rel="alternate" title="%s log RSS feed (no merges)" '. + 'href="%s" type="application/rss+xml" />'."\n", + esc_param($project), href(action=>"rss", + extra_options=>"--no-merges")); printf('<link rel="alternate" title="%s log Atom feed" '. 'href="%s" type="application/atom+xml" />'."\n", esc_param($project), href(action=>"atom")); + printf('<link rel="alternate" title="%s log Atom feed (no merges)" '. + 'href="%s" type="application/atom+xml" />'."\n", + esc_param($project), href(action=>"atom", + extra_options=>"--no-merges")); } else { printf('<link rel="alternate" title="%s projects list" '. 'href="%s" type="text/plain; charset=utf-8"/>'."\n", diff --git a/t/t9500-gitweb-standalone-no-errors.sh b/t/t9500-gitweb-standalone-no-errors.sh index d948724566..fa32598b0c 100755 --- a/t/t9500-gitweb-standalone-no-errors.sh +++ b/t/t9500-gitweb-standalone-no-errors.sh @@ -521,4 +521,32 @@ test_expect_success \ 'gitweb_run "p=.git;a=log"' test_debug 'cat gitweb.log' +# ---------------------------------------------------------------------- +# extra options + +test_expect_success \ + 'opt: log --no-merges' \ + 'gitweb_run "p=.git;a=log;opt=--no-merges"' +test_debug 'cat gitweb.log' + +test_expect_success \ + 'opt: atom --no-merges' \ + 'gitweb_run "p=.git;a=log;opt=--no-merges"' +test_debug 'cat gitweb.log' + +test_expect_success \ + 'opt: "file" history --no-merges' \ + 'gitweb_run "p=.git;a=history;f=file;opt=--no-merges"' +test_debug 'cat gitweb.log' + +test_expect_success \ + 'opt: log --no-such-option (invalid option)' \ + 'gitweb_run "p=.git;a=log;opt=--no-such-option"' +test_debug 'cat gitweb.log' + +test_expect_success \ + 'opt: tree --no-merges (invalid option for action)' \ + 'gitweb_run "p=.git;a=tree;opt=--no-merges"' +test_debug 'cat gitweb.log' + test_done |