From 7fac06d0fe56090e88ff6817699195dfa4afb730 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Thu, 2 Oct 2008 12:24:47 +0200 Subject: [PATCH] [PATCH] gitweb: Add support for extending the action bar with custom links --- .topdeps | 1 + .topmsg | 9 +++++++++ gitweb/gitweb.perl | 35 ++++++++++++++++++++++++++++++++++- 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 .topdeps create mode 100644 .topmsg diff --git a/.topdeps b/.topdeps new file mode 100644 index 0000000000..43b8c659cb --- /dev/null +++ b/.topdeps @@ -0,0 +1 @@ +vanilla/master diff --git a/.topmsg b/.topmsg new file mode 100644 index 0000000000..fba04336f0 --- /dev/null +++ b/.topmsg @@ -0,0 +1,9 @@ +From: Petr Baudis +To: git@vger.kernel.org +Subject: [PATCH] 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 diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index da474d082c..9fbc9f88ed 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 "
\n" . (join " | ", map { $_ eq $current ? - $_ : $cgi->a({-href => href(%{$arg{$_}})}, "$_") + $_ : $cgi->a({-href => ($arg{$_}{_href} ? $arg{$_}{_href} : href(%{$arg{$_}}))}, "$_") } @navs); print "
\n$extra
\n" . "
\n"; -- 2.11.4.GIT