From b018ba7021fc4acd8534d9c4eba69da00a593853 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 30 Jan 2019 08:47:43 +0000 Subject: git: use "git rev-parse --git-path" Using git worktrees was causing t/solver_git.t to fail on me. --- lib/PublicInbox/Git.pm | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'lib/PublicInbox/Git.pm') diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm index 3ad08112..e844884a 100644 --- a/lib/PublicInbox/Git.pm +++ b/lib/PublicInbox/Git.pm @@ -51,12 +51,21 @@ sub new { my @st; $st[7] = $st[10] = 0; # may contain {-tmp} field for File::Temp::Dir - bless { git_dir => $git_dir, st => \@st }, $class + bless { git_dir => $git_dir, st => \@st, -git_path => {} }, $class +} + +sub git_path ($$) { + my ($self, $path) = @_; + $self->{-git_path}->{$path} ||= do { + local $/ = "\n"; + chomp(my $str = $self->qx(qw(rev-parse --git-path), $path)); + $str; + }; } sub alternates_changed { my ($self) = @_; - my $alt = "$self->{git_dir}/objects/info/alternates"; + my $alt = git_path($self, 'objects/info/alternates'); my @st = stat($alt) or return 0; my $old_st = $self->{st}; # 10 - ctime, 7 - size @@ -239,7 +248,8 @@ sub cleanup { sub packed_bytes { my ($self) = @_; my $n = 0; - foreach my $p (glob("$self->{git_dir}/objects/pack/*.pack")) { + my $pack_dir = git_path($self, 'objects/pack'); + foreach my $p (glob("$pack_dir/*.pack")) { $n += -s $p; } $n -- cgit v1.2.3-24-ge0c7