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 +++++++++++++--- lib/PublicInbox/SolverGit.pm | 5 +++-- 2 files changed, 16 insertions(+), 5 deletions(-) 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 diff --git a/lib/PublicInbox/SolverGit.pm b/lib/PublicInbox/SolverGit.pm index d7875333..59d2c93c 100644 --- a/lib/PublicInbox/SolverGit.pm +++ b/lib/PublicInbox/SolverGit.pm @@ -272,8 +272,9 @@ EOF my $f = 'objects/info/alternates'; open $fh, '>', "$git_dir/$f" or die "open: $f: $!"; - print($fh (map { "$_->{git_dir}/objects\n" } @{$self->{gits}})) or - die "print $f: $!"; + foreach my $git (@{$self->{gits}}) { + print $fh $git->git_path('objects'),"\n" or die "print $f: $!"; + } close $fh or die "close: $f: $!"; my $tmp_git = $self->{tmp_git} = PublicInbox::Git->new($git_dir); $tmp_git->{-tmp} = $self->{tmp}; -- cgit v1.2.3-24-ge0c7