X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fgit.t;h=7f96293fb25a1511452ce1e242822afa5791b49f;hb=4790a0dbd7b297e087713c6ff2e63bf7deee4d04;hp=4532921ddea305d16078654614ac313b5a7b000b;hpb=b140961420c0f240c9c3f55e83c52cfc3efa709d;p=public-inbox.git
diff --git a/t/git.t b/t/git.t
index 4532921d..7f96293f 100644
--- a/t/git.t
+++ b/t/git.t
@@ -1,13 +1,14 @@
-# Copyright (C) 2015 all contributors
-# License: AGPL-3.0+ (https://www.gnu.org/licenses/agpl-3.0.txt)
+# Copyright (C) 2015-2018 all contributors
+# License: AGPL-3.0+
use strict;
use warnings;
use Test::More;
use File::Temp qw/tempdir/;
-my $dir = tempdir(CLEANUP => 1);
+my $dir = tempdir('pi-git-XXXXXX', TMPDIR => 1, CLEANUP => 1);
use Cwd qw/getcwd/;
+use PublicInbox::Spawn qw(popen_rd);
-use_ok 'PublicInbox::GitCatFile';
+use_ok 'PublicInbox::Git';
{
is(system(qw(git init -q --bare), $dir), 0, 'created git directory');
my @cmd = ('git', "--git-dir=$dir", 'fast-import', '--quiet');
@@ -26,7 +27,7 @@ use_ok 'PublicInbox::GitCatFile';
}
{
- my $gcf = PublicInbox::GitCatFile->new($dir);
+ my $gcf = PublicInbox::Git->new($dir);
my $f = 'HEAD:foo.txt';
my @x = $gcf->check($f);
is(scalar @x, 3, 'returned 3 element array for existing file');
@@ -95,7 +96,7 @@ if (1) {
is(0, $?, 'hashed object successfully');
chomp $buf;
- my $gcf = PublicInbox::GitCatFile->new($dir);
+ my $gcf = PublicInbox::Git->new($dir);
my $rsize;
is($gcf->cat_file($buf, sub {
$rsize = ${$_[1]};
@@ -129,6 +130,37 @@ if (1) {
local $/;
is($all, <$fh>, 'entire read matches');
};
+
+ my $ref = $gcf->qx(qw(cat-file blob), $buf);
+ is($all, $ref, 'qx read giant single string');
+
+ my @ref = $gcf->qx(qw(cat-file blob), $buf);
+ is($all, join('', @ref), 'qx returned array when wanted');
+ my $nl = scalar @ref;
+ ok($nl > 1, "qx returned array length of $nl");
+
+ $gcf->qx(qw(repack -adbq));
+ ok($gcf->packed_bytes > 0, 'packed size is positive');
+}
+
+if ('alternates reloaded') {
+ my $alt = tempdir('pi-git-XXXXXX', TMPDIR => 1, CLEANUP => 1);
+ my @cmd = ('git', "--git-dir=$alt", qw(hash-object -w --stdin));
+ is(system(qw(git init -q --bare), $alt), 0, 'create alt directory');
+ open my $fh, '<', "$alt/config" or die "open failed: $!\n";
+ my $rd = popen_rd(\@cmd, {}, { 0 => fileno($fh) } );
+ close $fh or die "close failed: $!";
+ chomp(my $remote = <$rd>);
+ 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" 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');
}
done_testing();