We must use `git rev-parse --git-path objects' instead of
blindly appending '/objects' to $GIT_DIR, since appending
doesn't work when $GIT_DIR is a worktree.
---
 lib/PublicInbox/Gcf2.pm | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/lib/PublicInbox/Gcf2.pm b/lib/PublicInbox/Gcf2.pm
index 02cd0de2..2ba2efff 100644
--- a/lib/PublicInbox/Gcf2.pm
+++ b/lib/PublicInbox/Gcf2.pm
@@ -80,7 +80,8 @@ EOM
 }
 
 sub add_alt ($$) {
-       my ($gcf2, $objdir) = @_;
+       my ($gcf2, $git_dir) = @_;
+       my $objdir = PublicInbox::Git->new($git_dir)->git_path('objects');
 
        # libgit2 (tested 0.27.7+dfsg.1-0.2 and 0.28.3+dfsg.1-1~bpo10+1
        # in Debian) doesn't handle relative epochs properly when nested
@@ -120,7 +121,7 @@ sub loop (;$) {
        while (<STDIN>) {
                chomp;
                my ($oid, $git_dir) = split(/ /, $_, 2);
-               $seen{$git_dir} //= add_alt($gcf2, "$git_dir/objects");
+               $seen{$git_dir} //= add_alt($gcf2, $git_dir);
                if (!$gcf2->cat_oid(1, $oid)) {
                        # retry once if missing.  We only get unabbreviated OIDs
                        # from SQLite or Xapian DBs, here, so malicious clients
@@ -128,7 +129,7 @@ sub loop (;$) {
                        warn "I: $$ $oid missing, retrying in $git_dir\n";
 
                        $gcf2 = new();
-                       %seen = ($git_dir => add_alt($gcf2,"$git_dir/objects"));
+                       %seen = ($git_dir => add_alt($gcf2, $git_dir);
                        $check_at = clock_gettime(CLOCK_MONOTONIC) + $exp;
 
                        if ($gcf2->cat_oid(1, $oid)) {

Reply via email to