summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Baudis <pasky@suse.cz>2008-10-02 16:36:52 +0200
committerShawn O. Pearce <spearce@spearce.org>2008-10-02 19:00:35 -0700
commitd627f68fbbe0480337cd56cce442ed8c1efa230e (patch)
treea6fca67306dcb72b4e81ecccb6560d39a5b9b070
parentf04f27e8b2a62f62d3ba168f1de4e45265830bff (diff)
downloadgit-d627f68fbbe0480337cd56cce442ed8c1efa230e.tar.gz
gitweb: Add support for extending the action bar with custom links
This makes it possible to easily extend gitweb with custom functionality, e.g. git-browser or web-based repository administration system like the repo.or.cz/Girocco duct tape. Signed-off-by: Petr Baudis <pasky@suse.cz> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rwxr-xr-xgitweb/gitweb.perl35
1 files changed, 34 insertions, 1 deletions
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 43da3a7932..453cbac7d8 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -275,6 +275,26 @@ our %feature = (
'forks' => {
'override' => 0,
'default' => [0]},
+
+ # Insert custom links to the action bar of all project pages.
+ # This enables you mainly to link to third-party scripts integrating
+ # into gitweb; e.g. git-browser for graphical history representation
+ # or custom web-based repository administration interface.
+
+ # The 'default' value consists of a list of triplets in the form
+ # (label, link, position) where position is the label after which
+ # to inster the link and link is a format string where %n expands
+ # to the project name, %f to the project path within the filesystem,
+ # %h to the current hash (h gitweb parameter) and %b to the current
+ # hash base (hb gitweb parameter).
+
+ # To enable system wide have in $GITWEB_CONFIG e.g.
+ # $feature{'actions'}{'default'} = [('graphiclog',
+ # '/git-browser/by-commit.html?r=%n', 'summary')];
+ # Project specific override is not supported.
+ 'actions' => {
+ 'override' => 0,
+ 'default' => []},
);
sub gitweb_check_feature {
@@ -2757,13 +2777,26 @@ sub git_print_page_nav {
}
}
}
+
$arg{'tree'}{'hash'} = $treehead if defined $treehead;
$arg{'tree'}{'hash_base'} = $treebase if defined $treebase;
+ my @actions = gitweb_check_feature('actions');
+ while (@actions) {
+ my ($label, $link, $pos) = (shift(@actions), shift(@actions), shift(@actions));
+ @navs = map { $_ eq $pos ? ($_, $label) : $_ } @navs;
+ # munch munch
+ $link =~ s#%n#$project#g;
+ $link =~ s#%f#$git_dir#g;
+ $treehead ? $link =~ s#%h#$treehead#g : $link =~ s#%h##g;
+ $treebase ? $link =~ s#%b#$treebase#g : $link =~ s#%b##g;
+ $arg{$label}{'_href'} = $link;
+ }
+
print "<div class=\"page_nav\">\n" .
(join " | ",
map { $_ eq $current ?
- $_ : $cgi->a({-href => href(%{$arg{$_}})}, "$_")
+ $_ : $cgi->a({-href => ($arg{$_}{_href} ? $arg{$_}{_href} : href(%{$arg{$_}}))}, "$_")
} @navs);
print "<br/>\n$extra<br/>\n" .
"</div>\n";