If the site admin configures the list of committags, there's no way for a project to get the defaults back short of enumerating them explicitly. Worse yet, when the distribution upgrades the default list, perhaps to push more pre-existing functionality into committags, the project would have to discover this and upgrade its configuration to match the new defaults. Add a special _defaults_ list entry which, in the project config, expands to the build-time default list configured for that variable. A project may use this to append or prepend to the default configuration, even as the default configuration changes with new releases. --- gitweb/INSTALL | 5 +++++ gitweb/gitweb.perl | 18 +++++++++++++----- t/t9502-gitweb-committags.sh | 29 +++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/gitweb/INSTALL b/gitweb/INSTALL index 15c0128..83e6a5e 100644 --- a/gitweb/INSTALL +++ b/gitweb/INSTALL @@ -143,6 +143,11 @@ And then let each project configure its bug tracker URL: git config gitweb.committag.bugzilla.url 'http://bts.example.com?bug=' +In a project config, the build-time list of committags can be accessed +with the special _defaults_ entry. + + git config gitweb.committags '_defaults_, bugzilla' + Gitweb repositories ------------------- diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index d413f22..707e76e 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -334,6 +334,13 @@ our %committags = ( }, ); +sub make_list_feature { + my ($name, $hash) = @_; + $hash->{'build_default'} = [@{$hash->{'default'}}]; + $hash->{'sub'} = sub { feature_list($name, @_) }; + return @_; +} + # You define site-wide feature defaults here; override them with # $GITWEB_CONFIG as necessary. our %feature = ( @@ -378,8 +385,7 @@ our %feature = ( # $feature{'snapshot'}{'override'} = 1; # and in project config, a comma-separated list of formats or "none" # to disable. Example: gitweb.snapshot = tbz2,zip; - 'snapshot' => { - 'sub' => sub { feature_list('snapshot', @_) }, + make_list_feature 'snapshot' => { 'override' => 0, 'default' => ['tgz']}, @@ -549,8 +555,7 @@ our %feature = ( # $feature{'committags'}{'override'} = 1; # and in project config gitweb.committags = sha1, url, bugzilla # to enable those three committags for that project - 'committags' => { - 'sub' => sub { feature_list('committags', @_) }, + make_list_feature 'committags' => { 'override' => 0, 'default' => ['signoff', 'sha1']}, @@ -621,7 +626,10 @@ sub feature_list { my ($cfg) = git_get_project_config($key); if ($cfg) { - return ($cfg eq 'none' ? () : split(/\s*[,\s]\s*/, $cfg)); + return () if $cfg eq 'none'; + return map { + $_ eq '_defaults_' ? @{$feature{$key}{'build_default'}} : $_ + } split(/\s*[,\s]\s*/, $cfg); } return @defaults; diff --git a/t/t9502-gitweb-committags.sh b/t/t9502-gitweb-committags.sh index cbe607b..7d16329 100755 --- a/t/t9502-gitweb-committags.sh +++ b/t/t9502-gitweb-committags.sh @@ -276,5 +276,34 @@ test_expect_success 'custom committags: ignored when disabled' ' test_debug 'cat gitweb.log' test_debug 'grep -F "foo" gitweb.output' +# ---------------------------------------------------------------------- +# default keyword +# +echo default_test > file.txt +git add file.txt +git commit -q -F - file.txt <<END +Lets see what's enabled... + +Bug 1234 +567890ab +See msg-id <x@xxx> + +Signed-off-by: A U Thor <at@xxxxxxxxxxx> +END +echo ' +$feature{"committags"}{"default"} = ["sha1", "messageid"]; +$feature{"committags"}{"override"} = 1; +' >> gitweb_config.perl +git config gitweb.committags '_defaults_, bugzilla' +# All these committags should be in effect except messageid +test_expect_success '_defaults_ keyword: restores build-time default' ' + gitweb_run "p=.git;a=commit;h=HEAD" && + grep -q "Bug <a[^>]*>1234</a>" gitweb.output && + grep -q "<a[^>]*>567890ab</a>" gitweb.output && + grep -q "See msg-id <x@xxx>" gitweb.output && + grep -q "<span[^>]*>Signed-off-by:" gitweb.output +' +test_debug 'cat gitweb.log' +test_debug 'for i in Bug 5678 msg-id Signed-off; do grep $i gitweb.output; done' test_done -- 1.6.4.4 -- 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