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

Re: [PATCH/RFC] gitweb: Create Gitweb::Git module

From
Jakub Narebski <jnareb@gmail.com>
Date
Jun 7, 2010, 08:42 UTC
Message-ID
<201006071042.42908.jnareb@gmail.com>
In-Reply-To
<1275859451-21787-1-git-send-email-pavan.sss1991@gmail.com>
Summary: minor complaints, mainly about _descriptions_.
On Sun, 6 June 2010, Pavan Kumar Sunkara wrote:
Show 5 quoted lines
> Subject: [PATCH/RFC] gitweb: Create Gitweb::Git module
>
> Create a Gitweb::Git module in 'gitweb/lib/Gitweb/Git.pm'
> to store essential git variables and subs regarding the
> gitweb.perl script

The pararaph above and the commit description (subject of this mail) do not tell us what does this new module Gitweb::Git is for, what does it contain. The description of module in header comment is also a bit lacking (see my comments below).

I know I suggested, among other forms, the above short form of commit description, but I think that in this case it is too short.

Perhaps (this is only a proposal):
  gitweb: Create Gitweb::Git module, to run git commands
  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.

I think you should also write why $GIT variable is moved to Gitweb::Git, even though it is variable which is configured during build, and one might think that it belongs to Gitweb::Config.

Perhaps something like this (it is only a proposal):
  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.
Or something like that.
Show 10 quoted lines
> 
> Subroutines moved:
> 	evaluate_git_version
> 	git_cmd
> 	quote_command
> 
> Subroutines yet to move: (Contains not yet packaged subs & vars)
> 	None
> 
> Update gitweb/Makefile to install gitweb modules alongside gitweb
It is not 'gitweb modules', but single gitweb module.
  Update gitweb/Makefile to install Gitweb::Git alongside gitweb.
> 
> Signed-off-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
> ---
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index e95aaf7..59a65a8 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
Show 5 quoted lines
> -# core git executable to use
> -# this can just be "git" if your webserver has a sensible PATH
> -our $GIT = "++GIT_BINDIR++/git";
> +#only this variable has it's root in Gitweb::Git
> +$GIT = "++GIT_BINDIR++/git";

Hmmm... is this comment really needed? It does not matter, at least not much, where given subroutine comes from. Only lack of 'our' indication that it is defined in other package.

Perhaps
  +# $GIT is from Gitweb::Git
or something like that?
Show 8 quoted lines
> @@ -77,7 +75,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;
>  	}
Nice side-effect.
Show 10 quoted lines
> @@ -197,13 +194,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++;
> -}

I guess that evaluate_git_version and $number_of_git_cmds are moved to Gitweb::Git because of technical reasons (for module to be self contained, and to avoid circular dependencies), isn't it?

Show 10 quoted lines
> @@ -492,10 +482,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;
>  }
O.K.
Show 11 quoted lines
> diff --git a/gitweb/lib/Gitweb/Git.pm b/gitweb/lib/Gitweb/Git.pm
> new file mode 100644
> index 0000000..9961e6d
> --- /dev/null
> +++ b/gitweb/lib/Gitweb/Git.pm
> @@ -0,0 +1,48 @@
> +#!/usr/bin/perl
> +#
> +# Gitweb::Git -- gitweb git package
> +#
> +# This program is licensed under the GPLv2

This description doesn't tell us much. What does "git package" mean? I would like to have description here what this package is for, and whet it (should) include.

Perhaps (this is only a proposal):
  +# Gitweb::Git -- gitweb's package dealing with running git commands
or something like that.
Show 13 quoted lines
> +
> +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;

One could think that this should belong to Gitweb::Config, but it is more about _git_ configuration than about _gitweb_ configuration. And there are technical reasons for having it there.

> +
> +our $number_of_git_cmds = 0;
I guess that counting git commands belong there...

By the way, can anyone check if it is correctly reset, and is counting number of git commands it took to process _a request_, also when running in FastCGI mode?

> +
> +# version of the core git binary
> +our $git_version;
Hmmm... wouldn't it be better to have this close to evaluate_git_version?
Also, does $git_version and evaluate_git_version belong in Gitweb::Git?
Show 9 quoted lines
> +
> +# 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;
> +}
O.K.
Show 9 quoted lines
> +
> +# 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'" } @_ );
> +}
O.K.
Show 8 quoted lines
> +
> +sub evaluate_git_version {
> +	$git_version = qx("$GIT" --version) =~ m/git version (.*)$/ ? $1 : "unknown";
> +	$number_of_git_cmds++;
> +}
> +
> +1;
> -- 
-- 
Jakub Narębski
Poland
Previous: Pavan Kumar SunkaraNext: Pavan Kumar Sunkara
Message 2 of 5 in “gitweb: Create Gitweb::Git module”
  1. gitweb: Create Gitweb::Git modulePavan Kumar Sunkara, Jun 6, 2010
  2. Jakub NarebskiJun 7, 2010
  3. Pavan Kumar SunkaraJun 7, 2010
  4. Petr BaudisJun 7, 2010
  5. Jakub NarebskiJun 7, 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.