git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[RFC/PATCH] gitweb: Prepare for splitting gitweb

From
Jakub Narebski <jnareb@gmail.com>
Date
Jun 11, 2010, 10:25 UTC
Message-ID
<1276251959-7948-1-git-send-email-jnareb@gmail.com>

Prepare gitweb for having been split into modules that are to be installed alongside gitweb in 'lib/' subdirectory, by adding

  use lib __DIR__.'/lib';

to gitweb.perl (to main gitweb script), and preparing for putting modules (relative path) in $(GITWEB_MODULES) in gitweb/Makefile.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
This patch is based on commit c0cb4ed (git-instaweb: Configure it to
work with new gitweb structure, 2010-05-28), which is top commit of
'ps/gitweb-soc' branch merged into next on 2010-06-03 (as commit
5db4adf).

It is an RFC patch adding infrastructure for splitting gitweb, or adding new functionality to gitweb via gitweb modules, without adding any gitweb module.

It is an RFC because:
1. I'm not sure if having such separate preparatory patch is good
   idea.  It would allow me to move gitweb output caching to proper
   modules, without waiting for gitweb splitting part of GSoC 2010
   project to stabilize.
2. I don't know if what I have written in gitweb/Makefile is portable
   enough.  In particular it uses $(sort WORDLIST), which is not used
   otherwise in git Makefiles.
3. Should there be information added to gitweb/INSTALL that one can
   put Perl modules in 'lib/' subdirectory?  This is why 'use lib ...'
   is moved earlier compared to original patch by Pavan..
 gitweb/Makefile    |    3 +++
 gitweb/gitweb.perl |    9 +++++++++
 2 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/gitweb/Makefile b/gitweb/Makefile
index d2584fe..4694959 100644
--- a/gitweb/Makefile
+++ b/gitweb/Makefile
@@ -55,6 +55,7 @@ PERL_PATH  ?= /usr/bin/perl
 bindir_SQ = $(subst ','\'',$(bindir))#'
 gitwebdir_SQ = $(subst ','\'',$(gitwebdir))#'
 gitwebstaticdir_SQ = $(subst ','\'',$(gitwebdir)/static)#'
+gitweblibdir_SQ = $(subst ','\'',$(gitwebdir)/lib)#'
 SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))#'
 PERL_PATH_SQ  = $(subst ','\'',$(PERL_PATH))#'
 DESTDIR_SQ    = $(subst ','\'',$(DESTDIR))#'
@@ -150,6 +151,8 @@ install: all
 	$(INSTALL) -m 755 $(GITWEB_PROGRAMS) '$(DESTDIR_SQ)$(gitwebdir_SQ)'
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitwebstaticdir_SQ)'
 	$(INSTALL) -m 644 $(GITWEB_FILES) '$(DESTDIR_SQ)$(gitwebstaticdir_SQ)'
+	$(foreach dir,$(sort $(dir $(GITWEB_MODULES))),test -d '$(DESTDIR_SQ)$(gitwebdir_SQ)/$dir' || $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitwebdir_SQ)/$dir')
+	$(foreach mod,$(GITWEB_MODULES),$(INSTALL) -m 644 $mod '$(DESTDIR_SQ)$(gitwebdir_SQ)/$mod')
 
 ### Cleaning rules
 
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 934aacb..023698f 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -9,6 +9,14 @@
 
 use strict;
 use warnings;
+
+use File::Spec;
+# __DIR__ is taken from Dir::Self __DIR__ fragment
+sub __DIR__ () {
+	File::Spec->rel2abs(join '', (File::Spec->splitpath(__FILE__))[0, 1]);
+}
+use lib __DIR__ . '/lib';
+
 use CGI qw(:standard :escapeHTML -nosticky);
 use CGI::Util qw(unescape);
 use CGI::Carp qw(fatalsToBrowser set_message);
@@ -16,6 +24,7 @@ use Encode;
 use Fcntl ':mode';
 use File::Find qw();
 use File::Basename qw(basename);
+
 binmode STDOUT, ':utf8';
 
 our $t0;
-- 
1.7.0.1
Next: Jakub Narebski
Message 1 of 2 in “gitweb: Prepare for splitting gitweb”
  1. gitweb: Prepare for splitting gitwebJakub Narebski, Jun 11, 2010
  2. [RFC/PATCHv2] gitweb: Prepare for splitting gitwebJakub Narebski, Jun 12, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.