- my $all;
- $gcf->cat_file($buf, sub {
- my ($in, $left) = @_;
- my $x = read($in, $all, $$left);
- $$left -= $x;
- });
- {
- open my $fh, '<', $big_data or die "open failed: $!\n";
- local $/;
- is($all, <$fh>, 'entire read matches');
+SKIP: {
+ require_git(2.6, 7) or skip('need git 2.6+ for --batch-all-objects', 7);
+ my ($alt, $alt_obj) = tmpdir();
+ my $hash_obj = [ 'git', "--git-dir=$alt", qw(hash-object -w --stdin) ];
+ PublicInbox::Import::init_bare($alt);
+ open my $fh, '<', "$alt/config" or die "open failed: $!\n";
+ chomp(my $remote = xqx($hash_obj, undef, { 0 => $fh }));
+ my $gcf = PublicInbox::Git->new($dir);
+ is($gcf->cat_file($remote), undef, "remote file not found");
+ open $fh, '>>', "$dir/objects/info/alternates" or
+ die "open failed: $!\n";
+ print $fh "$alt/objects\n" or die "print failed: $!\n";
+ close $fh or die "close failed: $!";
+ my $found = $gcf->cat_file($remote);
+ open $fh, '<', "$alt/config" or die "open failed: $!\n";
+ my $config = eval { local $/; <$fh> };
+ is($$found, $config, 'alternates reloaded');
+
+ # with the async interface
+ my ($async_alt, $async_dir_obj) = tmpdir();
+ PublicInbox::Import::init_bare($async_alt);
+ my @exist = map { chomp; [ split / / ] } (xqx(['git', "--git-dir=$dir",
+ qw(cat-file --batch-all-objects --batch-check)]));
+ my $results = [];
+ my $cb = sub {
+ my ($bref, $oid, $type, $size) = @_;
+ push @$results, [ $oid, $type, $size ];