[PATCHv2 GSOC 03/11] gitweb: Create Gitweb::Git module

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Pavan Kumar Sunkara
Date: Thursday, July 15, 2010 - 12:29 am

Create a Gitweb::Git module in  'gitweb/lib/Gitweb/Git.pm'
to deal with running git commands (and also processing output
of git commands with external programs) from gitweb.

This module is intended as standalone module, which does not require
(include) other gitweb' modules to avoid circular dependencies.  That
is why it includes $GIT variable, even though this variable is
configured during building gitweb.  On the other hand $GIT is more
about git configuration, than gitweb configuration.

Subroutines moved:
	evaluate_git_version
	git_cmd
	quote_command

Update gitweb/Makefile to install Gitweb::Git module alongside gitweb

Signed-off-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
---
 gitweb/Makefile          |    3 ++
 gitweb/gitweb.perl       |   35 ++++----------------------------
 gitweb/lib/Gitweb/Git.pm |   48 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 56 insertions(+), 30 deletions(-)
 create mode 100644 gitweb/lib/Gitweb/Git.pm

diff --git a/gitweb/Makefile b/gitweb/Makefile
index c7610b3..5035c2e 100644
--- a/gitweb/Makefile
+++ b/gitweb/Makefile
@@ -111,6 +111,9 @@ endif
 
 GITWEB_FILES += static/git-logo.png static/git-favicon.png
 
+# Modules: Gitweb::*
+GITWEB_MODULES += lib/Gitweb/Git.pm
+
 GITWEB_REPLACE = \
 	-e 's|++GIT_VERSION++|$(GIT_VERSION)|g' \
 	-e 's|++GIT_BINDIR++|$(bindir)|g' \
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index bda7da3..778ac13 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -27,11 +27,12 @@ use File::Basename qw(basename);
 
 binmode STDOUT, ':utf8';
 
+use Gitweb::Git;
+
 our $t0;
 if (eval { require Time::HiRes; 1; }) {
 	$t0 = [Time::HiRes::gettimeofday()];
 }
-our $number_of_git_cmds = 0;
 
 BEGIN {
 	CGI->compile() if $ENV{'MOD_PERL'};
@@ -75,9 +76,8 @@ sub evaluate_uri {
 	our $home_link = $my_uri || "/";
 }
 
-# core git executable to use
-# this can just be "git" if your webserver has a sensible PATH
-our $GIT = "++GIT_BINDIR++/git";
+# $GIT is from Gitweb::Git
+$GIT = "++GIT_BINDIR++/git";
 
 # absolute fs-path which will be prepended to the project path
 #our $projectroot = "/pub/scm";
@@ -482,7 +482,6 @@ sub gitweb_get_feature {
 		$feature{$name}{'override'},
 		@{$feature{$name}{'default'}});
 	# project specific override is possible only if we have project
-	our $git_dir; # global variable, declared later
 	if (!$override || !defined $git_dir) {
 		return @defaults;
 	}
@@ -616,13 +615,6 @@ sub get_loadavg {
 	return 0;
 }
 
-# version of the core git binary
-our $git_version;
-sub evaluate_git_version {
-	our $git_version = qx("$GIT" --version) =~ m/git version (.*)$/ ? $1 : "unknown";
-	$number_of_git_cmds++;
-}
-
 sub check_loadavg {
 	if (defined $maxload && get_loadavg() > $maxload) {
 		die_error(503, "The load average on the server is too high");
@@ -972,10 +964,8 @@ sub evaluate_and_validate_params {
 	}
 }
 
-# path to the current git repository
-our $git_dir;
 sub evaluate_git_dir {
-	our $git_dir = "$projectroot/$project" if $project;
+	$git_dir = "$projectroot/$project" if $project;
 }
 
 our (@snapshot_fmts, $git_avatar);
@@ -2230,21 +2220,6 @@ sub get_feed_info {
 ## ----------------------------------------------------------------------
 ## git utility subroutines, invoking git commands
 
-# returns path to the core git executable and the --git-dir parameter as list
-sub git_cmd {
-	$number_of_git_cmds++;
-	return $GIT, '--git-dir='.$git_dir;
-}
-
-# quote the given arguments for passing them to the shell
-# quote_command("command", "arg 1", "arg with ' and ! characters")
-# => "'command' 'arg 1' 'arg with '\'' and '\!' characters'"
-# Try to avoid using this function wherever possible.
-sub quote_command {
-	return join(' ',
-		map { my $a = $_; $a =~ s/(['!])/'\\$1'/g; "'$a'" } @_ );
-}
-
 # get HEAD ref of given project as hash
 sub git_get_head_hash {
 	return git_get_full_hash(shift, 'HEAD');
diff --git a/gitweb/lib/Gitweb/Git.pm b/gitweb/lib/Gitweb/Git.pm
new file mode 100644
index 0000000..467497c
--- /dev/null
+++ b/gitweb/lib/Gitweb/Git.pm
@@ -0,0 +1,48 @@
+#!/usr/bin/perl
+#
+# Gitweb::Git -- gitweb's package dealing with running git commands
+#
+# This program is licensed under the GPLv2
+
+package Gitweb::Git;
+
+use strict;
+use warnings;
+use Exporter qw(import);
+
+our @EXPORT = qw($GIT $number_of_git_cmds $git_version $git_dir
+                 git_cmd quote_command evaluate_git_version);
+
+# core git executable to use
+# this can just be "git" if your webserver has a sensible PATH
+our $GIT;
+
+our $number_of_git_cmds = 0;
+
+# version of the core git binary
+our $git_version;
+
+# path to the current git repository
+our $git_dir;
+
+# returns path to the core git executable and the --git-dir parameter as list
+sub git_cmd {
+	$number_of_git_cmds++;
+	return $GIT, '--git-dir='.$git_dir;
+}
+
+# quote the given arguments for passing them to the shell
+# quote_command("command", "arg 1", "arg with ' and ! characters")
+# => "'command' 'arg 1' 'arg with '\'' and '\!' characters'"
+# Try to avoid using this function wherever possible.
+sub quote_command {
+	return join(' ',
+		map { my $a = $_; $a =~ s/(['!])/'\\$1'/g; "'$a'" } @_ );
+}
+
+sub evaluate_git_version {
+	$git_version = qx("$GIT" --version) =~ m/git version (.*)$/ ? $1 : "unknown";
+	$number_of_git_cmds++;
+}
+
+1;
-- 
1.7.1.455.g8f441

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCHv2 00/11] Splitting gitweb, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 01/11] gitweb: fix esc_url, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 02/11] gitweb: Prepare for splitting gitweb, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 03/11] gitweb: Create Gitweb::Git module, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 04/11] gitweb: Create Gitweb::Config module, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 05/11] gitweb: Create Gitweb::Request module, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 06/11] gitweb: Create Gitweb::Escape module, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 07/11] gitweb: Create Gitweb::RepoConfig module, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 08/11] gitweb: Create Gitweb::View module, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 09/11] gitweb: Create Gitweb::Util module, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 10/11] gitweb: Create Gitweb::Format module, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
[PATCHv2 GSOC 11/11] gitweb: Create Gitweb::Parse module, Pavan Kumar Sunkara, (Thu Jul 15, 12:29 am)
Re: [PATCHv2 GSOC 01/11] gitweb: fix esc_url, Jakub Narebski, (Thu Jul 15, 6:52 am)
Re: [PATCHv2 GSOC 01/11] gitweb: fix esc_url, Junio C Hamano, (Thu Jul 15, 11:57 am)
Re: [PATCHv2 GSOC 01/11] gitweb: fix esc_url, Jakub Narebski, (Thu Jul 15, 12:32 pm)
Re: [PATCHv2 GSOC 03/11] gitweb: Create Gitweb::Git module, Jakub Narebski, (Thu Jul 15, 1:13 pm)
Re: [PATCHv2 GSOC 09/11] gitweb: Create Gitweb::Util module, Jakub Narebski, (Sun Jul 18, 10:45 am)
Re: [PATCHv2 00/11] Splitting gitweb, Sverre Rabbelier, (Sun Aug 1, 1:44 pm)
Re: [PATCHv2 00/11] Splitting gitweb, Jakub Narebski, (Mon Aug 2, 8:03 am)