#!perl -w # Copyright (C) 2020 all contributors # License: AGPL-3.0+ eval { require PublicInbox::Gcf2 }; die "libgit2 development package or Inline::C missing for $0: $@\n" if $@; my $gcf2 = PublicInbox::Gcf2::new(); use IO::Handle; # autoflush STDERR->autoflush(1); STDOUT->autoflush(1); while () { chomp; my ($oid, $git_dir) = split(/ /, $_, 2); $gcf2->add_alternate("$git_dir/objects"); 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"; $gcf2 = PublicInbox::Gcf2::new(); $gcf2->add_alternate("$git_dir/objects"); if ($gcf2->cat_oid(1, $oid)) { warn "I: $$ $oid found after retry\n"; } else { warn "W: $$ $oid missing after retry\n"; print "$oid missing\n"; # mimic git-cat-file } } }