#!perl
my
$dist1
= make_dist_archive(
'AUTHOR/Dist-1 = PkgA~1; PkgB~1'
);
my
$dist2
= make_dist_archive(
'AUTHOR/Dist-2 = PkgB~2; PkgC~2'
);
my
$t
= Pinto::Tester->new;
$t
->run_ok(
Add
=> {
archives
=>
$dist1
,
author
=>
'AUTHOR'
,
stack
=>
'master'
} );
$t
->run_ok(
Copy
=> {
stack
=>
'master'
,
to_stack
=>
'foo'
} );
$t
->run_ok(
Add
=> {
archives
=>
$dist2
,
author
=>
'AUTHOR'
,
stack
=>
'foo'
} );
$t
->run_ok(
Pin
=> {
targets
=>
'PkgC'
,
stack
=>
'foo'
} );
local
$ENV
{PINTO_DIFF_STYLE} =
$PINTO_DIFF_STYLE_CONCISE
;
sub
linere {
map
{
qr{^ \Q$_\E $}
mx }
@_
}
subtest
'basic comparisons'
=>
sub
{
my
@expected
= (
'-[rl-] AUTHOR/Dist-1.tar.gz'
,
'+[rl!] AUTHOR/Dist-2.tar.gz'
,
);
my
$rev0
=
$t
->get_stack(
'master'
)->head->uuid;
my
$rev1
=
$t
->get_stack(
'foo'
)->head->uuid;
$t
->run_ok(
Diff
=> {
left
=>
$rev0
,
right
=>
$rev1
} );
$t
->stdout_like(
$_
)
for
linere(
@expected
);
$rev0
=
substr
(
$rev0
, 0, 4 );
$rev1
=
substr
(
$rev1
, 0, 4 );
$t
->run_ok(
Diff
=> {
left
=>
$rev0
,
right
=>
$rev1
} );
$t
->stdout_like(
$_
)
for
linere(
@expected
);
$t
->run_ok(
Diff
=> {
left
=>
'master'
,
right
=>
$rev1
} );
$t
->stdout_like(
$_
)
for
linere(
@expected
);
$t
->run_ok(
Diff
=> {
left
=>
$rev0
,
right
=>
$rev1
,
format
=>
'%o[%F] %a/%f %s %S'
} );
$t
->stdout_like(
$_
)
for
linere(
map
{
"$_ l LOCAL"
}
@expected
);
};
subtest
'basic comparisons with bogus data'
=>
sub
{
$t
->run_throws_ok(
Diff
=> {
left
=>
'foo'
,
right
=>
'bogus'
},
qr/does not match any stack or revision/
);
my
$rev0
=
$t
->get_stack(
'master'
)->head;
$rev0
->update( {
uuid
=>
'aaa'
.
$rev0
->uuid } );
my
$rev1
=
$t
->get_stack(
'foo'
)->head;
$rev1
->update( {
uuid
=>
'aaa'
.
$rev1
->uuid } );
$t
->run_throws_ok(
Diff
=> {
left
=>
undef
,
right
=>
'aaa'
},
qr/is ambiguous/
);
$t
->run_ok(
Default
=> {
none
=> 1 } );
$t
->run_throws_ok(
Diff
=> {
left
=>
undef
,
right
=>
'foo'
},
qr/default stack has not been set/
);
};
done_testing;