-# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
# backend for a git-cat-file-workalike based on libgit2,
use Fcntl qw(LOCK_EX SEEK_SET);
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
use IO::Handle; # autoflush
+use PublicInbox::Git;
+
BEGIN {
my (%CFG, $c_src);
# PublicInbox::Spawn will set PERL_INLINE_DIRECTORY
- # to ~/.cache/public-inbox/inline-c if it exists
+ # to ~/.cache/public-inbox/inline-c if it exists and Inline::C works
my $inline_dir = $ENV{PERL_INLINE_DIRECTORY} //
die 'PERL_INLINE_DIRECTORY not defined';
my $f = "$inline_dir/.public-inbox.lock";
}
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
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
# can't trigger excessive retries:
- warn "I: $$ $oid missing, retrying in $git_dir\n";
+ warn "# $$ $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)) {
- warn "I: $$ $oid found after retry\n";
+ warn "# $$ $oid found after retry\n";
} else {
warn "W: $$ $oid missing after retry\n";
print "$oid missing\n"; # mimic git-cat-file