6 use Cwd qw/cwd abs_path/;
7 use File::Spec::Functions qw/catdir catfile/;
8 use File::Temp qw/tempfile tempdir/;
10 use Test::More tests => 2 + 3 * 2;
15 my ($tree, $prefix) = @_;
17 my $r = delete $tree->{_};
18 while (my ($d, $v) = each %$tree) {
20 my $dir = catdir $prefix, $d;
21 mkdir $dir or die "mkdir($dir): $!";
22 my @r = build($v, $dir);
25 ref eq 'main' ? @{$_}[1 .. 3]
26 : map { catdir($d, $_) } @{$_}[1 .. 3]
29 my $file = catfile($prefix, $d);
30 open my $fh, '>', $file or die "open($file): $!";
35 return $r ? bless $r, 'main' : @ret;
40 refs => { dummy => 1 },
41 objects => { dummy => 1 },
46 return $bare ? [ $n, "$n.git", "$n.git", "$n.git" ]
47 : [ $n, catdir($n, '.git'), $n, "$n.git" ]
50 my $tmpdir = tempdir(CLEANUP => 1);
52 chdir $tmpdir or die "chdir($tmpdir): $!";
53 my @expected = sort { $a->[1] cmp $b->[1] } build({
61 refs => { dummy => 1 },
72 refs => { dummy => 1 },
73 objects => { dummy => 1 },
82 chdir $cwd or die "chdir($cwd): $!";
84 is(@expected, 3, 'only three valid git repos');
85 is(grep({ ref eq 'ARRAY' } @expected), 3, 'all of them are array references');
89 map({ catdir($tmpdir, $_) } @{$_}[1 .. 3]),
94 for my $cmd (qw/commit FAIL/) {
95 my ($fh, $filename) = tempfile(UNLINK => 1);
96 my $ar = App::Rgit->new(
97 git => abs_path('t/bin/git'),
100 args => [ abs_path($filename), $cmd, qw/^n ^g ^w ^b ^G ^W ^B ^R ^^n/ ]
102 isnt($ar, undef, "each $cmd has a defined object");
104 my $fail = $cmd eq 'FAIL' ? 1 : 0;
105 is($exit, $fail << 8, "each $cmd returned $fail");
106 my @lines = split /\n/, do { local $/; <$fh> };
107 my $res = [ map [ split /\|/, $_ ], @lines ];
108 my $exp = [ map [ $cmd, @$_ ], $fail ? $expected[0] : @expected ];
109 is_deeply($res, $exp, "each $cmd did the right thing");