use Test::More;
use File::Temp qw/tempdir/;
my $dir = tempdir('pi-git-XXXXXX', TMPDIR => 1, CLEANUP => 1);
-use Cwd qw/getcwd/;
use PublicInbox::Spawn qw(popen_rd);
-use_ok 'PublicInbox::Git';
eval { require IPC::Run } or plan skip_all => 'IPC::Run missing';
+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' ];
- my $fi_data = getcwd().'/t/git.fast-import-data';
+ my $fi_data = './t/git.fast-import-data';
ok(-r $fi_data, "fast-import data readable (or run test at top level)");
IPC::Run::run($cmd, '<', $fi_data);
is($?, 0, 'fast-import succeeded');
{
my $gcf = PublicInbox::Git->new($dir);
+ is($gcf->modified, 749520000, 'modified time detected from commit');
my $f = 'HEAD:foo.txt';
my @x = $gcf->check($f);
is(scalar @x, 3, 'returned 3 element array for existing file');
my $cmd = [ 'git', "--git-dir=$dir", qw(hash-object -w --stdin) ];
# need a big file, use the AGPL-3.0 :p
- my $big_data = getcwd().'/COPYING';
+ my $big_data = './COPYING';
ok(-r $big_data, 'COPYING readable');
my $size = -s $big_data;
ok($size > 8192, 'file is big enough');
my $nl = scalar @ref;
ok($nl > 1, "qx returned array length of $nl");
- $gcf->qx(qw(repack -adbq));
+ $gcf->qx(qw(repack -adq));
ok($gcf->packed_bytes > 0, 'packed size is positive');
}
open $fh, '<', "$alt/config" or die "open failed: $!\n";
my $config = eval { local $/; <$fh> };
is($$found, $config, 'alternates reloaded');
+
+ ok($gcf->cleanup(time - 30), 'cleanup did not expire');
+ ok(!$gcf->cleanup(time + 30), 'cleanup can expire');
+ ok(!$gcf->cleanup, 'cleanup idempotent');
+
+ my $t = $gcf->modified;
+ ok($t <= time, 'repo not modified in the future');
+ isnt($t, 0, 'repo not modified in 1970')
}
+use_ok 'PublicInbox::Git', qw(git_unquote git_quote);
+my $s;
+is("foo\nbar", git_unquote($s = '"foo\\nbar"'), 'unquoted newline');
+is("Eléanor", git_unquote($s = '"El\\303\\251anor"'), 'unquoted octal');
+is(git_unquote($s = '"I\"m"'), 'I"m', 'unquoted dq');
+is(git_unquote($s = '"I\\m"'), 'I\\m', 'unquoted backslash');
+
+is(git_quote($s = "Eléanor"), '"El\\303\\251anor"', 'quoted octal');
+is(git_quote($s = "hello\"world"), '"hello\"world"', 'quoted dq');
+is(git_quote($s = "hello\\world"), '"hello\\\\world"', 'quoted backslash');
+is(git_quote($s = "hello\nworld"), '"hello\\nworld"', 'quoted LF');
+
done_testing();