* Running gitweb under mod_perl
@ 2006-08-24 12:43 Jakub Narebski
2006-08-24 12:46 ` Johannes Schindelin
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Jakub Narebski @ 2006-08-24 12:43 UTC (permalink / raw)
To: git
Could you tell me what should I do to run gitweb under mod_perl,
and not as CGI script? What should I put in Apache configuration
(Apache 2.0.54 if this matters, mod_perl 2.0.1)
--
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: Running gitweb under mod_perl 2006-08-24 12:43 Running gitweb under mod_perl Jakub Narebski @ 2006-08-24 12:46 ` Johannes Schindelin 2006-08-24 14:05 ` Dennis Stosberg 2006-08-24 17:49 ` Jakub Narebski 2 siblings, 0 replies; 12+ messages in thread From: Johannes Schindelin @ 2006-08-24 12:46 UTC (permalink / raw) To: Jakub Narebski; +Cc: git Hi, On Thu, 24 Aug 2006, Jakub Narebski wrote: > Could you tell me what should I do to run gitweb under mod_perl, > and not as CGI script? What should I put in Apache configuration > (Apache 2.0.54 if this matters, mod_perl 2.0.1) I have not checked closely, but it seems that git-instaweb supports mod_perl. Maybe you can find out what you have to do by inspecting git-instaweb? Hth, Dscho ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Running gitweb under mod_perl 2006-08-24 12:43 Running gitweb under mod_perl Jakub Narebski 2006-08-24 12:46 ` Johannes Schindelin @ 2006-08-24 14:05 ` Dennis Stosberg 2006-08-24 15:12 ` [PATCH] gitweb: Use --git-dir parameter instead of setting $ENV{'GIT_DIR'} Dennis Stosberg 2006-09-05 20:32 ` Running gitweb under mod_perl Jakub Narebski 2006-08-24 17:49 ` Jakub Narebski 2 siblings, 2 replies; 12+ messages in thread From: Dennis Stosberg @ 2006-08-24 14:05 UTC (permalink / raw) To: Jakub Narebski; +Cc: git Jakub Narebski wrote: > Could you tell me what should I do to run gitweb under mod_perl, > and not as CGI script? About two months ago I sent a set of three patches that made gitweb run with Apache::Registry: http://marc.theaimsgroup.com/?l=git&m=115089541911624 The first two patches have found their way into git, so the only thing left to do is to change the way the path to the git repository is passed to the git commands. I haven't updated that patch since then and with all the refactoring gitweb has seen it surely won't apply anymore, but if there's interest I can rebase it to current "next". > What should I put in Apache configuration (Apache 2.0.54 if this > matters, mod_perl 2.0.1) >From my configuration: <Directory /home/dennis/public_html/perl> Options -Indexes +ExecCGI AllowOverride None PerlSendHeader On SetHandler perl-script PerlHandler ModPerl::Registry </Directory> Regards, Dennis ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] gitweb: Use --git-dir parameter instead of setting $ENV{'GIT_DIR'} 2006-08-24 14:05 ` Dennis Stosberg @ 2006-08-24 15:12 ` Dennis Stosberg 2006-08-28 15:49 ` [PATCH (amend)] " Jakub Narebski 2006-09-05 20:32 ` Running gitweb under mod_perl Jakub Narebski 1 sibling, 1 reply; 12+ messages in thread From: Dennis Stosberg @ 2006-08-24 15:12 UTC (permalink / raw) To: Jakub Narebski; +Cc: git This makes it possible to run gitweb under mod_perl's Apache::Registry. Signed-off-by: Dennis Stosberg <dennis@stosberg.net> --- Gitweb has changed a lot since I last looked into it two months ago, so this patch is a little different from the former one. Only very superficially tested, but seems to work well. gitweb/gitweb.perl | 73 +++++++++++++++++++++++++++++----------------------- 1 files changed, 41 insertions(+), 32 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index ae13e3e..73b3663 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -65,6 +65,9 @@ require $GITWEB_CONFIG if -e $GITWEB_CON # version of the core git binary our $git_version = qx($GIT --version) =~ m/git version (.*)$/ ? $1 : "unknown"; +# path to the current git repository +our $git_dir; + $projects_list ||= $projectroot; if (! -d $git_temp) { mkdir($git_temp, 0700) || die_error(undef, "Couldn't mkdir $git_temp"); @@ -99,7 +102,7 @@ if (defined $project && $project) { if (!(-e "$projectroot/$project/HEAD")) { die_error(undef, "No such project"); } - $ENV{'GIT_DIR'} = "$projectroot/$project"; + $git_dir = "$projectroot/$project"; } else { git_project_list(); exit; @@ -375,21 +378,26 @@ sub git_get_referencing { ## ---------------------------------------------------------------------- ## git utility subroutines, invoking git commands +# returns path to the core git executable and the --git-dir parameter +sub git_cmd { + return $GIT, '--git-dir='.$git_dir; +} + # get HEAD ref of given project as hash sub git_read_head { my $project = shift; - my $oENV = $ENV{'GIT_DIR'}; + my $o_git_dir = $git_dir; my $retval = undef; - $ENV{'GIT_DIR'} = "$projectroot/$project"; - if (open my $fd, "-|", $GIT, "rev-parse", "--verify", "HEAD") { + $git_dir = "$projectroot/$project"; + if (open my $fd, "-|", git_cmd(), "rev-parse", "--verify", "HEAD") { my $head = <$fd>; close $fd; if (defined $head && $head =~ /^([0-9a-fA-F]{40})$/) { $retval = $1; } } - if (defined $oENV) { - $ENV{'GIT_DIR'} = $oENV; + if (defined $o_git_dir) { + $git_dir = $o_git_dir; } return $retval; } @@ -398,7 +406,7 @@ # get type of given object sub git_get_type { my $hash = shift; - open my $fd, "-|", $GIT, "cat-file", '-t', $hash or return; + open my $fd, "-|", git_cmd(), "cat-file", '-t', $hash or return; my $type = <$fd>; close $fd or return; chomp $type; @@ -412,7 +420,8 @@ sub git_get_project_config { $key =~ s/^gitweb\.//; return if ($key =~ m/\W/); - my $val = qx($GIT repo-config --get gitweb.$key); + my $git_command = join(' ', git_cmd()); + my $val = qx($git_command repo-config --get gitweb.$key); return ($val); } @@ -431,7 +440,7 @@ sub git_get_hash_by_path { my $tree = $base; - open my $fd, "-|", $GIT, "ls-tree", $base, "--", $path + open my $fd, "-|", git_cmd(), "ls-tree", $base, "--", $path or die_error(undef, "Open git-ls-tree failed"); my $line = <$fd>; close $fd or return undef; @@ -566,7 +575,7 @@ sub git_read_tag { my %tag; my @comment; - open my $fd, "-|", $GIT, "cat-file", "tag", $tag_id or return; + open my $fd, "-|", git_cmd(), "cat-file", "tag", $tag_id or return; $tag{'id'} = $tag_id; while (my $line = <$fd>) { chomp $line; @@ -607,7 +616,7 @@ sub git_read_commit { @commit_lines = @$commit_text; } else { $/ = "\0"; - open my $fd, "-|", $GIT, "rev-list", "--header", "--parents", "--max-count=1", $commit_id or return; + open my $fd, "-|", git_cmd(), "rev-list", "--header", "--parents", "--max-count=1", $commit_id or return; @commit_lines = split '\n', <$fd>; close $fd or return; $/ = "\n"; @@ -1219,7 +1228,7 @@ sub git_diff_print { if (defined $from) { $from_tmp = "$git_temp/gitweb_" . $$ . "_from"; open my $fd2, "> $from_tmp"; - open my $fd, "-|", $GIT, "cat-file", "blob", $from; + open my $fd, "-|", git_cmd(), "cat-file", "blob", $from; my @file = <$fd>; print $fd2 @file; close $fd2; @@ -1230,7 +1239,7 @@ sub git_diff_print { if (defined $to) { $to_tmp = "$git_temp/gitweb_" . $$ . "_to"; open my $fd2, "> $to_tmp"; - open my $fd, "-|", $GIT, "cat-file", "blob", $to; + open my $fd, "-|", git_cmd(), "cat-file", "blob", $to; my @file = <$fd>; print $fd2 @file; close $fd2; @@ -1292,7 +1301,7 @@ sub git_project_list { if (!defined $head) { next; } - $ENV{'GIT_DIR'} = "$projectroot/$pr->{'path'}"; + $git_dir = "$projectroot/$pr->{'path'}"; my %co = git_read_commit($head); if (!%co) { next; @@ -1418,7 +1427,7 @@ sub git_summary { "<tr><td>last change</td><td>$cd{'rfc2822'}</td></tr>\n" . "</table>\n"; - open my $fd, "-|", $GIT, "rev-list", "--max-count=17", git_read_head($project) + open my $fd, "-|", git_cmd(), "rev-list", "--max-count=17", git_read_head($project) or die_error(undef, "Open git-rev-list failed"); my @revlist = map { chomp; $_ } <$fd>; close $fd; @@ -1489,7 +1498,7 @@ sub git_blame2 { if ($ftype !~ "blob") { die_error("400 Bad Request", "Object is not a blob"); } - open ($fd, "-|", $GIT, "blame", '-l', $file_name, $hash_base) + open ($fd, "-|", git_cmd(), "blame", '-l', $file_name, $hash_base) or die_error(undef, "Open git-blame failed"); git_header_html(); my $formats_nav = @@ -1543,7 +1552,7 @@ sub git_blame { $hash = git_get_hash_by_path($hash_base, $file_name, "blob") or die_error(undef, "Error lookup file"); } - open ($fd, "-|", $GIT, "annotate", '-l', '-t', '-r', $file_name, $hash_base) + open ($fd, "-|", git_cmd(), "annotate", '-l', '-t', '-r', $file_name, $hash_base) or die_error(undef, "Open git-annotate failed"); git_header_html(); my $formats_nav = @@ -1654,7 +1663,7 @@ sub git_blob_plain { } } my $type = shift; - open my $fd, "-|", $GIT, "cat-file", "blob", $hash + open my $fd, "-|", git_cmd(), "cat-file", "blob", $hash or die_error(undef, "Couldn't cat $file_name, $hash"); $type ||= git_blob_plain_mimetype($fd, $file_name); @@ -1687,7 +1696,7 @@ sub git_blob { } } my $have_blame = git_get_project_config_bool ('blame'); - open my $fd, "-|", $GIT, "cat-file", "blob", $hash + open my $fd, "-|", git_cmd(), "cat-file", "blob", $hash or die_error(undef, "Couldn't cat $file_name, $hash"); my $mimetype = git_blob_plain_mimetype($fd, $file_name); if ($mimetype !~ m/^text\//) { @@ -1740,7 +1749,7 @@ sub git_tree { } } $/ = "\0"; - open my $fd, "-|", $GIT, "ls-tree", '-z', $hash + open my $fd, "-|", git_cmd(), "ls-tree", '-z', $hash or die_error(undef, "Open git-ls-tree failed"); my @entries = map { chomp; $_ } <$fd>; close $fd or die_error(undef, "Reading tree failed"); @@ -1821,7 +1830,7 @@ sub git_log { my $refs = read_info_ref(); my $limit = sprintf("--max-count=%i", (100 * ($page+1))); - open my $fd, "-|", $GIT, "rev-list", $limit, $hash + open my $fd, "-|", git_cmd(), "rev-list", $limit, $hash or die_error(undef, "Open git-rev-list failed"); my @revlist = map { chomp; $_ } <$fd>; close $fd; @@ -1892,7 +1901,7 @@ sub git_commit { if (!defined $parent) { $parent = "--root"; } - open my $fd, "-|", $GIT, "diff-tree", '-r', '-M', $parent, $hash + open my $fd, "-|", git_cmd(), "diff-tree", '-r', '-M', $parent, $hash or die_error(undef, "Open git-diff-tree failed"); my @difftree = map { chomp; $_ } <$fd>; close $fd or die_error(undef, "Reading git-diff-tree failed"); @@ -2116,7 +2125,7 @@ sub git_commitdiff { if (!defined $hash_parent) { $hash_parent = $co{'parent'} || '--root'; } - open my $fd, "-|", $GIT, "diff-tree", '-r', $hash_parent, $hash + open my $fd, "-|", git_cmd(), "diff-tree", '-r', $hash_parent, $hash or die_error(undef, "Open git-diff-tree failed"); my @difftree = map { chomp; $_ } <$fd>; close $fd or die_error(undef, "Reading git-diff-tree failed"); @@ -2207,7 +2216,7 @@ sub git_commitdiff_plain { if (!defined $hash_parent) { $hash_parent = $co{'parent'} || '--root'; } - open my $fd, "-|", $GIT, "diff-tree", '-r', $hash_parent, $hash + open my $fd, "-|", git_cmd(), "diff-tree", '-r', $hash_parent, $hash or die_error(undef, "Open git-diff-tree failed"); my @difftree = map { chomp; $_ } <$fd>; close $fd or die_error(undef, "Reading diff-tree failed"); @@ -2215,7 +2224,7 @@ sub git_commitdiff_plain { # try to figure out the next tag after this commit my $tagname; my $refs = read_info_ref("tags"); - open $fd, "-|", $GIT, "rev-list", "HEAD"; + open $fd, "-|", git_cmd(), "rev-list", "HEAD"; my @commits = map { chomp; $_ } <$fd>; close $fd; foreach my $commit (@commits) { @@ -2284,7 +2293,7 @@ sub git_history { git_print_page_path($file_name, $ftype); open my $fd, "-|", - $GIT, "rev-list", "--full-history", $hash_base, "--", $file_name; + git_cmd(), "rev-list", "--full-history", $hash_base, "--", $file_name; print "<table cellspacing=\"0\">\n"; my $alternate = 0; while (my $line = <$fd>) { @@ -2358,7 +2367,7 @@ sub git_search { my $alternate = 0; if ($commit_search) { $/ = "\0"; - open my $fd, "-|", $GIT, "rev-list", "--header", "--parents", $hash or next; + open my $fd, "-|", git_cmd(), "rev-list", "--header", "--parents", $hash or next; while (my $commit_text = <$fd>) { if (!grep m/$searchtext/i, $commit_text) { next; @@ -2408,7 +2417,7 @@ sub git_search { if ($pickaxe_search) { $/ = "\n"; - open my $fd, "-|", "$GIT rev-list $hash | $GIT diff-tree -r --stdin -S\'$searchtext\'"; + open my $fd, "-|", git_cmd()." rev-list $hash | ".git_cmd()." diff-tree -r --stdin -S\'$searchtext\'"; undef %co; my @files; while (my $line = <$fd>) { @@ -2471,7 +2480,7 @@ sub git_shortlog { my $refs = read_info_ref(); my $limit = sprintf("--max-count=%i", (100 * ($page+1))); - open my $fd, "-|", $GIT, "rev-list", $limit, $hash + open my $fd, "-|", git_cmd(), "rev-list", $limit, $hash or die_error(undef, "Open git-rev-list failed"); my @revlist = map { chomp; $_ } <$fd>; close $fd; @@ -2499,7 +2508,7 @@ ## feeds (RSS, OPML) sub git_rss { # http://www.notestips.com/80256B3A007F2692/1/NAMO5P9UPQ - open my $fd, "-|", $GIT, "rev-list", "--max-count=150", git_read_head($project) + open my $fd, "-|", git_cmd(), "rev-list", "--max-count=150", git_read_head($project) or die_error(undef, "Open git-rev-list failed"); my @revlist = map { chomp; $_ } <$fd>; close $fd or die_error(undef, "Reading git-rev-list failed"); @@ -2520,7 +2529,7 @@ sub git_rss { last; } my %cd = date_str($co{'committer_epoch'}); - open $fd, "-|", $GIT, "diff-tree", '-r', $co{'parent'}, $co{'id'} or next; + open $fd, "-|", git_cmd(), "diff-tree", '-r', $co{'parent'}, $co{'id'} or next; my @difftree = map { chomp; $_ } <$fd>; close $fd or next; print "<item>\n" . @@ -2573,7 +2582,7 @@ sub git_opml { if (!defined $head) { next; } - $ENV{'GIT_DIR'} = "$projectroot/$proj{'path'}"; + $git_dir = "$projectroot/$proj{'path'}"; my %co = git_read_commit($head); if (!%co) { next; -- 1.4.2 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH (amend)] gitweb: Use --git-dir parameter instead of setting $ENV{'GIT_DIR'} 2006-08-24 15:12 ` [PATCH] gitweb: Use --git-dir parameter instead of setting $ENV{'GIT_DIR'} Dennis Stosberg @ 2006-08-28 15:49 ` Jakub Narebski 2006-08-29 7:18 ` Dennis Stosberg 2006-08-29 7:19 ` [PATCH] use do() instead of require() to include configuration Dennis Stosberg 0 siblings, 2 replies; 12+ messages in thread From: Jakub Narebski @ 2006-08-28 15:49 UTC (permalink / raw) To: git; +Cc: Dennis Stosberg, Jakub Narebski From: Dennis Stosberg <dennis@stosberg.net> This makes it possible to run gitweb under mod_perl's Apache::Registry. Signed-off-by: Dennis Stosberg <dennis@stosberg.net> Signed-off-by: Jakub Narebski <jnareb@gmail.com> --- Updated to the 'next' version (v1.4.2-gc6063de). It needs fairly new git version, with --git-dir=<path> parameter to git wrapper, i.e. post v1.4.2-rc2-g6acbcb9 version. Dennis, could you check that it works for you in 'next' version of gitweb? The patch you sent is pre-rename even... gitweb/gitweb.perl | 90 +++++++++++++++++++++++++++++++--------------------- 1 files changed, 54 insertions(+), 36 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index ef09cf5..f421825 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -157,6 +157,9 @@ require $GITWEB_CONFIG if -e $GITWEB_CON # version of the core git binary our $git_version = qx($GIT --version) =~ m/git version (.*)$/ ? $1 : "unknown"; +# path to the current git repository +our $git_dir; + $projects_list ||= $projectroot; # ====================================================================== @@ -184,7 +187,7 @@ if (defined $project) { if (!(-e "$projectroot/$project/HEAD")) { die_error(undef, "No such project"); } - $ENV{'GIT_DIR'} = "$projectroot/$project"; + $git_dir = "$projectroot/$project"; } our $file_name = $cgi->param('f'); @@ -572,21 +575,31 @@ sub format_diff_line { ## ---------------------------------------------------------------------- ## git utility subroutines, invoking git commands +# returns path to the core git executable and the --git-dir parameter as list +sub git_cmd { + return $GIT, '--git-dir='.$git_dir; +} + +# returns path to the core git executable and the --git-dir parameter as string +sub git_cmd_str { + return join(' ', git_cmd()); +} + # get HEAD ref of given project as hash sub git_get_head_hash { my $project = shift; - my $oENV = $ENV{'GIT_DIR'}; + my $o_git_dir = $git_dir; my $retval = undef; - $ENV{'GIT_DIR'} = "$projectroot/$project"; - if (open my $fd, "-|", $GIT, "rev-parse", "--verify", "HEAD") { + $git_dir = "$projectroot/$project"; + if (open my $fd, "-|", git_cmd(), "rev-parse", "--verify", "HEAD") { my $head = <$fd>; close $fd; if (defined $head && $head =~ /^([0-9a-fA-F]{40})$/) { $retval = $1; } } - if (defined $oENV) { - $ENV{'GIT_DIR'} = $oENV; + if (defined $o_git_dir) { + $git_dir = $o_git_dir; } return $retval; } @@ -595,7 +608,7 @@ # get type of given object sub git_get_type { my $hash = shift; - open my $fd, "-|", $GIT, "cat-file", '-t', $hash or return; + open my $fd, "-|", git_cmd(), "cat-file", '-t', $hash or return; my $type = <$fd>; close $fd or return; chomp $type; @@ -609,7 +622,7 @@ sub git_get_project_config { $key =~ s/^gitweb\.//; return if ($key =~ m/\W/); - my @x = ($GIT, 'repo-config'); + my @x = (git_cmd(), 'repo-config'); if (defined $type) { push @x, $type; } push @x, "--get"; push @x, "gitweb.$key"; @@ -625,7 +638,7 @@ sub git_get_hash_by_path { my $tree = $base; - open my $fd, "-|", $GIT, "ls-tree", $base, "--", $path + open my $fd, "-|", git_cmd(), "ls-tree", $base, "--", $path or die_error(undef, "Open git-ls-tree failed"); my $line = <$fd>; close $fd or return undef; @@ -756,7 +769,7 @@ sub git_get_references { open $fd, "$projectroot/$project/info/refs" or return; } else { - open $fd, "-|", $GIT, "ls-remote", "." + open $fd, "-|", git_cmd(), "ls-remote", "." or return; } @@ -777,7 +790,7 @@ sub git_get_references { sub git_get_rev_name_tags { my $hash = shift || return undef; - open my $fd, "-|", $GIT, "name-rev", "--tags", $hash + open my $fd, "-|", git_cmd(), "name-rev", "--tags", $hash or return; my $name_rev = <$fd>; close $fd; @@ -825,7 +838,7 @@ sub parse_tag { my %tag; my @comment; - open my $fd, "-|", $GIT, "cat-file", "tag", $tag_id or return; + open my $fd, "-|", git_cmd(), "cat-file", "tag", $tag_id or return; $tag{'id'} = $tag_id; while (my $line = <$fd>) { chomp $line; @@ -866,7 +879,7 @@ sub parse_commit { @commit_lines = @$commit_text; } else { $/ = "\0"; - open my $fd, "-|", $GIT, "rev-list", "--header", "--parents", "--max-count=1", $commit_id + open my $fd, "-|", git_cmd(), "rev-list", "--header", "--parents", "--max-count=1", $commit_id or return; @commit_lines = split '\n', <$fd>; close $fd or return; @@ -1971,7 +1984,7 @@ sub git_project_list { if (!defined $head) { next; } - $ENV{'GIT_DIR'} = "$projectroot/$pr->{'path'}"; + $git_dir = "$projectroot/$pr->{'path'}"; my %co = parse_commit($head); if (!%co) { next; @@ -2090,7 +2103,8 @@ sub git_summary { } print "</table>\n"; - open my $fd, "-|", $GIT, "rev-list", "--max-count=17", git_get_head_hash($project) + open my $fd, "-|", git_cmd(), "rev-list", "--max-count=17", + git_get_head_hash($project) or die_error(undef, "Open git-rev-list failed"); my @revlist = map { chomp; $_ } <$fd>; close $fd; @@ -2168,7 +2182,7 @@ sub git_blame2 { if ($ftype !~ "blob") { die_error("400 Bad Request", "Object is not a blob"); } - open ($fd, "-|", $GIT, "blame", '-l', $file_name, $hash_base) + open ($fd, "-|", git_cmd(), "blame", '-l', $file_name, $hash_base) or die_error(undef, "Open git-blame failed"); git_header_html(); my $formats_nav = @@ -2233,7 +2247,7 @@ sub git_blame { $hash = git_get_hash_by_path($hash_base, $file_name, "blob") or die_error(undef, "Error lookup file"); } - open ($fd, "-|", $GIT, "annotate", '-l', '-t', '-r', $file_name, $hash_base) + open ($fd, "-|", git_cmd(), "annotate", '-l', '-t', '-r', $file_name, $hash_base) or die_error(undef, "Open git-annotate failed"); git_header_html(); my $formats_nav = @@ -2354,7 +2368,7 @@ sub git_blob_plain { } } my $type = shift; - open my $fd, "-|", $GIT, "cat-file", "blob", $hash + open my $fd, "-|", git_cmd(), "cat-file", "blob", $hash or die_error(undef, "Couldn't cat $file_name, $hash"); $type ||= blob_mimetype($fd, $file_name); @@ -2396,7 +2410,7 @@ sub git_blob { } } my $have_blame = gitweb_check_feature('blame'); - open my $fd, "-|", $GIT, "cat-file", "blob", $hash + open my $fd, "-|", git_cmd(), "cat-file", "blob", $hash or die_error(undef, "Couldn't cat $file_name, $hash"); my $mimetype = blob_mimetype($fd, $file_name); if ($mimetype !~ m/^text\//) { @@ -2461,7 +2475,7 @@ sub git_tree { } } $/ = "\0"; - open my $fd, "-|", $GIT, "ls-tree", '-z', $hash + open my $fd, "-|", git_cmd(), "ls-tree", '-z', $hash or die_error(undef, "Open git-ls-tree failed"); my @entries = map { chomp; $_ } <$fd>; close $fd or die_error(undef, "Reading tree failed"); @@ -2564,7 +2578,8 @@ sub git_snapshot { -content_disposition => "inline; filename=\"$filename\"", -status => '200 OK'); - open my $fd, "-|", "$GIT tar-tree $hash \'$project\' | $command" or + my $git_command = git_cmd_str(); + open my $fd, "-|", "$git_command tar-tree $hash \'$project\' | $command" or die_error(undef, "Execute git-tar-tree failed."); binmode STDOUT, ':raw'; print <$fd>; @@ -2584,7 +2599,7 @@ sub git_log { my $refs = git_get_references(); my $limit = sprintf("--max-count=%i", (100 * ($page+1))); - open my $fd, "-|", $GIT, "rev-list", $limit, $hash + open my $fd, "-|", git_cmd(), "rev-list", $limit, $hash or die_error(undef, "Open git-rev-list failed"); my @revlist = map { chomp; $_ } <$fd>; close $fd; @@ -2639,7 +2654,7 @@ sub git_commit { if (!defined $parent) { $parent = "--root"; } - open my $fd, "-|", $GIT, "diff-tree", '-r', @diff_opts, $parent, $hash + open my $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, $parent, $hash or die_error(undef, "Open git-diff-tree failed"); my @difftree = map { chomp; $_ } <$fd>; close $fd or die_error(undef, "Reading git-diff-tree failed"); @@ -2746,7 +2761,7 @@ sub git_blobdiff { if (defined $hash_base && defined $hash_parent_base) { if (defined $file_name) { # read raw output - open $fd, "-|", $GIT, "diff-tree", '-r', @diff_opts, $hash_parent_base, $hash_base, + open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, $hash_parent_base, $hash_base, "--", $file_name or die_error(undef, "Open git-diff-tree failed"); @difftree = map { chomp; $_ } <$fd>; @@ -2760,7 +2775,7 @@ sub git_blobdiff { # try to find filename from $hash # read filtered raw output - open $fd, "-|", $GIT, "diff-tree", '-r', @diff_opts, $hash_parent_base, $hash_base + open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, $hash_parent_base, $hash_base or die_error(undef, "Open git-diff-tree failed"); @difftree = # ':100644 100644 03b21826... 3b93d5e7... M ls-files.c' @@ -2794,7 +2809,7 @@ sub git_blobdiff { } # open patch output - open $fd, "-|", $GIT, "diff-tree", '-r', @diff_opts, + open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, '-p', $hash_parent_base, $hash_base, "--", $file_name or die_error(undef, "Open git-diff-tree failed"); @@ -2830,7 +2845,7 @@ sub git_blobdiff { } # open patch output - open $fd, "-|", $GIT, "diff", '-p', @diff_opts, $hash_parent, $hash + open $fd, "-|", git_cmd(), "diff", '-p', @diff_opts, $hash_parent, $hash or die_error(undef, "Open git-diff failed"); } else { die_error('404 Not Found', "Missing one of the blob diff parameters") @@ -2915,7 +2930,7 @@ sub git_commitdiff { my $fd; my @difftree; if ($format eq 'html') { - open $fd, "-|", $GIT, "diff-tree", '-r', @diff_opts, + open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, "--patch-with-raw", "--full-index", $hash_parent, $hash or die_error(undef, "Open git-diff-tree failed"); @@ -2926,7 +2941,7 @@ sub git_commitdiff { } } elsif ($format eq 'plain') { - open $fd, "-|", $GIT, "diff-tree", '-r', @diff_opts, + open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, '-p', $hash_parent, $hash or die_error(undef, "Open git-diff-tree failed"); @@ -3027,7 +3042,8 @@ sub git_history { git_print_page_path($file_name, $ftype, $hash_base); open my $fd, "-|", - $GIT, "rev-list", "--full-history", $hash_base, "--", $file_name; + git_cmd(), "rev-list", "--full-history", $hash_base, "--", $file_name; + git_history_body($fd, $refs, $hash_base, $ftype); close $fd; @@ -3067,7 +3083,7 @@ sub git_search { my $alternate = 0; if ($commit_search) { $/ = "\0"; - open my $fd, "-|", $GIT, "rev-list", "--header", "--parents", $hash or next; + open my $fd, "-|", git_cmd(), "rev-list", "--header", "--parents", $hash or next; while (my $commit_text = <$fd>) { if (!grep m/$searchtext/i, $commit_text) { next; @@ -3119,7 +3135,9 @@ sub git_search { if ($pickaxe_search) { $/ = "\n"; - open my $fd, "-|", "$GIT rev-list $hash | $GIT diff-tree -r --stdin -S\'$searchtext\'"; + my $git_command = git_cmd_str(); + open my $fd, "-|", "$git_command rev-list $hash | " . + "$git_command diff-tree -r --stdin -S\'$searchtext\'"; undef %co; my @files; while (my $line = <$fd>) { @@ -3186,7 +3204,7 @@ sub git_shortlog { my $refs = git_get_references(); my $limit = sprintf("--max-count=%i", (100 * ($page+1))); - open my $fd, "-|", $GIT, "rev-list", $limit, $hash + open my $fd, "-|", git_cmd(), "rev-list", $limit, $hash or die_error(undef, "Open git-rev-list failed"); my @revlist = map { chomp; $_ } <$fd>; close $fd; @@ -3214,7 +3232,7 @@ ## feeds (RSS, OPML) sub git_rss { # http://www.notestips.com/80256B3A007F2692/1/NAMO5P9UPQ - open my $fd, "-|", $GIT, "rev-list", "--max-count=150", git_get_head_hash($project) + open my $fd, "-|", git_cmd(), "rev-list", "--max-count=150", git_get_head_hash($project) or die_error(undef, "Open git-rev-list failed"); my @revlist = map { chomp; $_ } <$fd>; close $fd or die_error(undef, "Reading git-rev-list failed"); @@ -3237,7 +3255,7 @@ XML last; } my %cd = parse_date($co{'committer_epoch'}); - open $fd, "-|", $GIT, "diff-tree", '-r', @diff_opts, + open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, $co{'parent'}, $co{'id'} or next; my @difftree = map { chomp; $_ } <$fd>; @@ -3295,7 +3313,7 @@ XML if (!defined $head) { next; } - $ENV{'GIT_DIR'} = "$projectroot/$proj{'path'}"; + $git_dir = "$projectroot/$proj{'path'}"; my %co = parse_commit($head); if (!%co) { next; -- 1.4.1.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH (amend)] gitweb: Use --git-dir parameter instead of setting $ENV{'GIT_DIR'} 2006-08-28 15:49 ` [PATCH (amend)] " Jakub Narebski @ 2006-08-29 7:18 ` Dennis Stosberg 2006-08-29 7:19 ` [PATCH] use do() instead of require() to include configuration Dennis Stosberg 1 sibling, 0 replies; 12+ messages in thread From: Dennis Stosberg @ 2006-08-29 7:18 UTC (permalink / raw) To: Jakub Narebski; +Cc: git Jakub Narebski wrote: > Dennis, could you check that it works for you in 'next' > version of gitweb? The patch you sent is pre-rename even... Yes, it works for me. Signed-off-by: Dennis Stosberg <dennis@stosberg.net> There is another trivial failure with mod_perl: The configuration file will only be read on the first invocation of the script. I didn't notice it until today, because I never used a configuration file before. Regards, Dennis ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] use do() instead of require() to include configuration 2006-08-28 15:49 ` [PATCH (amend)] " Jakub Narebski 2006-08-29 7:18 ` Dennis Stosberg @ 2006-08-29 7:19 ` Dennis Stosberg 1 sibling, 0 replies; 12+ messages in thread From: Dennis Stosberg @ 2006-08-29 7:19 UTC (permalink / raw) To: Jakub Narebski; +Cc: git When run under mod_perl, require() will read and execute the configuration file on the first invocation only. On every subsequent invocation, all configuration variables will be reset to their default values. do() reads and executes the configuration file unconditionally. Signed-off-by: Dennis Stosberg <dennis@stosberg.net> --- gitweb/gitweb.perl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 352236b..39ebcf4 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -152,7 +152,7 @@ # - one might want to include '-B' optio our @diff_opts = ('-M'); # taken from git_commit our $GITWEB_CONFIG = $ENV{'GITWEB_CONFIG'} || "++GITWEB_CONFIG++"; -require $GITWEB_CONFIG if -e $GITWEB_CONFIG; +do $GITWEB_CONFIG if -e $GITWEB_CONFIG; # version of the core git binary our $git_version = qx($GIT --version) =~ m/git version (.*)$/ ? $1 : "unknown"; -- 1.4.2 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: Running gitweb under mod_perl 2006-08-24 14:05 ` Dennis Stosberg 2006-08-24 15:12 ` [PATCH] gitweb: Use --git-dir parameter instead of setting $ENV{'GIT_DIR'} Dennis Stosberg @ 2006-09-05 20:32 ` Jakub Narebski 1 sibling, 0 replies; 12+ messages in thread From: Jakub Narebski @ 2006-09-05 20:32 UTC (permalink / raw) To: git Dennis Stosberg wrote: > Jakub Narebski wrote: > >> What should I put in Apache configuration (Apache 2.0.54 if this >> matters, mod_perl 2.0.1) > > From my configuration: > > <Directory /home/dennis/public_html/perl> > Options -Indexes +ExecCGI > AllowOverride None > PerlSendHeader On > SetHandler perl-script > PerlHandler ModPerl::Registry > </Directory> I use mod_perl 2.0 version Alias /perl /var/www/perl <Directory /var/www/perl> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI </Directory> What is strange that ApacheBench is showing that mod_perl is _slower_ than CGI version: 3003.305 [ms] (mean) CGI vs 3500.589 [ms] (mean) mod_perl for summary page for git.git repository (my copy that is). I wonder if I misconfigured something... -- Jakub Narebski Warsaw, Poland ShadeHawk on #git ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Running gitweb under mod_perl 2006-08-24 12:43 Running gitweb under mod_perl Jakub Narebski 2006-08-24 12:46 ` Johannes Schindelin 2006-08-24 14:05 ` Dennis Stosberg @ 2006-08-24 17:49 ` Jakub Narebski 2006-08-24 19:32 ` Dennis Stosberg 2 siblings, 1 reply; 12+ messages in thread From: Jakub Narebski @ 2006-08-24 17:49 UTC (permalink / raw) To: git By the way, does the "static" variables works under mod_perl? i.e. { my $private_var = "something" sub some_sub { ... } sub other_sub { ... } } -- Jakub Narebski Warsaw, Poland ShadeHawk on #git ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Running gitweb under mod_perl 2006-08-24 17:49 ` Jakub Narebski @ 2006-08-24 19:32 ` Dennis Stosberg 2006-08-24 20:59 ` Jakub Narebski 0 siblings, 1 reply; 12+ messages in thread From: Dennis Stosberg @ 2006-08-24 19:32 UTC (permalink / raw) To: Jakub Narebski; +Cc: git Jakub Narebski wrote: > By the way, does the "static" variables works under mod_perl? i.e. > > { > my $private_var = "something" > > sub some_sub { > ... > } > > sub other_sub { > ... > } > } Depends on what you expect. The variable will remain shared between those subs over successive executions, but it will not be reinitialised to "something" -- at least not visibly to the subs: On the first invocation, $private_var is initialised and the two subroutines are created. Internally, they refer to the _instance_ of $private_var. The next time the script is run by mod_perl, $private_var gets initialised again, but the subs are persistent and still refer to the old instance. _Their_ copy of the variable will still be shared between them, but it will not be reset to "something". So it should work, but I would avoid such a construction if possible. Apache::Registry wraps the whole script in another function, which is called on each request, so your piece of code really looks somewhat like this: #!/usr/bin/perl sub handler { # do something { my $a = 'A'; sub sub_a { $a .= 'B' } sub sub_b { print $a."\n" } } sub_a(); sub_b(); } for(1..10) { handler() } Regards, Dennis ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Running gitweb under mod_perl 2006-08-24 19:32 ` Dennis Stosberg @ 2006-08-24 20:59 ` Jakub Narebski 2006-08-25 1:13 ` Randal L. Schwartz 0 siblings, 1 reply; 12+ messages in thread From: Jakub Narebski @ 2006-08-24 20:59 UTC (permalink / raw) To: git Dennis Stosberg wrote: > Jakub Narebski wrote: > >> By the way, does the "static" variables works under mod_perl? i.e. >> >> { >> my $private_var = "something" >> >> sub some_sub { >> ... >> } >> >> sub other_sub { >> ... >> } >> } > > Depends on what you expect. The variable will remain shared between > those subs over successive executions, but it will not be reinitialised > to "something" -- at least not visibly to the subs: Well, I wanted to share read-only variable, initialized once and not changed at all. It could be global variable, but it is used only by those two functions. > On the first invocation, $private_var is initialised and the two > subroutines are created. Internally, they refer to the _instance_ of > $private_var. The next time the script is run by mod_perl, $private_var > gets initialised again, but the subs are persistent and still refer to > the old instance. _Their_ copy of the variable will still be shared > between them, but it will not be reset to "something". I don't need to reinitialize $private_var -- it is not changed. > Apache::Registry wraps the whole script in another function, which > is called on each request, so your piece of code really looks somewhat > like this: > > #!/usr/bin/perl > sub handler { > # do something > { > my $a = 'A'; > sub sub_a { $a .= 'B' } > sub sub_b { print $a."\n" } > } > sub_a(); > sub_b(); > } > for(1..10) { handler() } Thanks for an explanation. Is there any way to check at _runtime_ if script is run under mod_perl, or would it be simplier (after script reorganization) for install time selection of using CGI, FastCGI, or Apache2::something...? -- Jakub Narebski Warsaw, Poland ShadeHawk on #git ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Running gitweb under mod_perl 2006-08-24 20:59 ` Jakub Narebski @ 2006-08-25 1:13 ` Randal L. Schwartz 0 siblings, 0 replies; 12+ messages in thread From: Randal L. Schwartz @ 2006-08-25 1:13 UTC (permalink / raw) To: Jakub Narebski; +Cc: git >>>>> "Jakub" == Jakub Narebski <jnareb@gmail.com> writes: Jakub> Is there any way to check at _runtime_ if script is run under mod_perl, Jakub> or would it be simplier (after script reorganization) for install time Jakub> selection of using CGI, FastCGI, or Apache2::something...? Yeah, look at the first few dozen lines of CGI.pm - it has to do different things based on whether it's being run under mod_perl. -- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 <merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/> Perl/Unix/security consulting, Technical writing, Comedy, etc. etc. See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training! ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2006-09-05 20:32 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-24 12:43 Running gitweb under mod_perl Jakub Narebski
2006-08-24 12:46 ` Johannes Schindelin
2006-08-24 14:05 ` Dennis Stosberg
2006-08-24 15:12 ` [PATCH] gitweb: Use --git-dir parameter instead of setting $ENV{'GIT_DIR'} Dennis Stosberg
2006-08-28 15:49 ` [PATCH (amend)] " Jakub Narebski
2006-08-29 7:18 ` Dennis Stosberg
2006-08-29 7:19 ` [PATCH] use do() instead of require() to include configuration Dennis Stosberg
2006-09-05 20:32 ` Running gitweb under mod_perl Jakub Narebski
2006-08-24 17:49 ` Jakub Narebski
2006-08-24 19:32 ` Dennis Stosberg
2006-08-24 20:59 ` Jakub Narebski
2006-08-25 1:13 ` Randal L. Schwartz
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).