This simplifies git_get_head_hash a lot; the method might eventually even go away. I haven't checked whether this causes an IO performance regression by instantiating a new Git repository instance, but in the end Git->repository will be as fast as possible and do no eager disk accesses. No benchmarking yet at this stage. Minor change: Moved the parameter shift in git_blob_plain to the top for readability. Signed-off-by: Lea Wiemann <LeWiemann@xxxxxxxxx> --- I have tested this by running the smoke-test.pl script on my small test repository -- this covers calls to git_get_head_hash -- and then recursively diffing the two resulting wget output directories before and after the change. The trees were essentially identical (save a few timestamps inside the snapshot files). For brevity, I'll refer to this test procedure as something like "smoke-test.pl showed no differences" in future patches. ;-) gitweb/gitweb.perl | 24 ++++++++---------------- 1 files changed, 8 insertions(+), 16 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 57a1905..0efd2f7 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -16,6 +16,7 @@ use Encode; use Fcntl ':mode'; use File::Find qw(); use File::Basename qw(basename); +use Git; binmode STDOUT, ':utf8'; BEGIN { @@ -1508,20 +1509,11 @@ sub git_cmd_str { # get HEAD ref of given project as hash sub git_get_head_hash { my $project = shift; - my $o_git_dir = $git_dir; - my $retval = undef; - $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 $o_git_dir) { - $git_dir = $o_git_dir; - } - return $retval; + my $directory = "$projectroot/$project"; + # Legacy side effect on $git_dir. This will eventually go + # away as the global $git_dir is eliminated. + $git_dir = $directory if (!defined $git_dir); + Git->repository(Directory => $directory)->parse_rev("HEAD"); } # get type of given object @@ -4377,8 +4369,9 @@ sub git_heads { } sub git_blob_plain { - my $expires; + my $type = shift; + my $expires; if (!defined $hash) { if (defined $file_name) { my $base = $hash_base || git_get_head_hash($project); @@ -4392,7 +4385,6 @@ sub git_blob_plain { $expires = "+1d"; } - my $type = shift; open my $fd, "-|", git_cmd(), "cat-file", "blob", $hash or die_error(undef, "Couldn't cat $file_name, $hash"); -- 1.5.5.GIT -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html