diff options
author | Florian Forster <octo@verplant.org> | 2006-06-12 10:31:57 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-06-16 22:45:12 -0700 |
commit | 5996ca0836e21ab4e6be0a16a615eff965f18b8b (patch) | |
tree | 7b741ac6e738a8cf75626703525eae6d3cfef108 /gitweb | |
parent | gitweb: Adding a `blame' interface. (diff) | |
download | tgif-5996ca0836e21ab4e6be0a16a615eff965f18b8b.tar.xz |
gitweb: Make the `blame' interface in gitweb optional.
Since `git-annotate' is an expensive operation to run it may be
desirable to deactivate this functionality. This patch introduces
the `gitweb.blame' option to git-repo-config and disables the blame
support by default.
Signed-off-by: Florian Forster <octo@verplant.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'gitweb')
-rwxr-xr-x | gitweb/gitweb.cgi | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/gitweb/gitweb.cgi b/gitweb/gitweb.cgi index 91c075df3a..5eabe06daf 100755 --- a/gitweb/gitweb.cgi +++ b/gitweb/gitweb.cgi @@ -837,6 +837,25 @@ sub git_read_projects { return @list; } +sub git_get_project_config { + my $key = shift; + + return unless ($key); + $key =~ s/^gitweb\.//; + return if ($key =~ m/\W/); + + my $val = qx(git-repo-config --get gitweb.$key); + return ($val); +} + +sub git_get_project_config_bool { + my $val = git_get_project_config (@_); + if ($val and $val =~ m/true|yes|on/) { + return (1); + } + return; # implicit false +} + sub git_project_list { my @list = git_read_projects(); my @projects; @@ -1233,6 +1252,7 @@ sub git_tag { sub git_blame { my $fd; + die_error('403 Permission denied', "Permission denied.") if (!git_get_project_config_bool ('blame')); die_error('404 Not Found', "What file will it be, master?") if (!$file_name); $hash_base ||= git_read_head($project); die_error(undef, "Reading commit failed.") unless ($hash_base); @@ -1468,6 +1488,7 @@ sub git_blob { my $base = $hash_base || git_read_head($project); $hash = git_get_hash_by_path($base, $file_name, "blob") || die_error(undef, "Error lookup file."); } + my $have_blame = git_get_project_config_bool ('blame'); open my $fd, "-|", "$gitbin/git-cat-file blob $hash" or die_error(undef, "Open failed."); git_header_html(); if (defined $hash_base && (my %co = git_read_commit($hash_base))) { @@ -1479,8 +1500,10 @@ sub git_blob { " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commitdiff;h=$hash_base")}, "commitdiff") . " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=tree;h=$co{'tree'};hb=$hash_base")}, "tree") . "<br/>\n"; if (defined $file_name) { - print $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;h=$hash;hb=$hash_base;f=$file_name")}, "blame") . - " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob_plain;h=$hash;f=$file_name")}, "plain") . + if ($have_blame) { + print $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;h=$hash;hb=$hash_base;f=$file_name")}, "blame") . " | "; + } + print $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob_plain;h=$hash;f=$file_name")}, "plain") . " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;hb=HEAD;f=$file_name")}, "head") . "<br/>\n"; } else { print $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob_plain;h=$hash")}, "plain") . "<br/>\n"; |