#!/usr/bin/perl -w
use Test::More tests => 28;
use strict;
our $output;
use SVK::Test;
my ($xd, $svk) = build_test();
$svk->mkdir ('-m', 'init', '//V');
my $tree = create_basic_tree ($xd, '//V');
my ($copath, $corpath) = get_copath ('replaced');
$svk->checkout ('//V', $copath);
$svk->rm ("$copath/A/be");
overwrite_file ("$copath/A/be", "foobar\n");
is_output ($svk, 'add', ["$copath/A/be"],
[__"R $copath/A/be"]);
is_output ($svk, 'status', [$copath],
[__"R $copath/A/be"]);
is_output ($svk, 'commit', ['-m', 'replace A/be', $copath],
['Committed revision 4.']);
$svk->rm ("$copath/A");
mkdir ("$copath/A");
overwrite_file ("$copath/A/be", "foobar\n2nd replace\n");
overwrite_file ("$copath/A/neu", "foobar\n2nd replace\n");
# XXX: notify flush and cb_unknown ordering
# XXX: A/be shouldn't be replace, it's actually an add. but this
# requires more .scheudle fix with anchor.
is_output ($svk, 'add', ["$copath/A"],
[__"A $copath/A/neu",
__"R $copath/A",
__"R $copath/A/be"]);
overwrite_file ("$copath/A/unused", "foobar\n2nd replace\n");
is_output ($svk, 'status', ["$copath"],
[__"R $copath/A",
__"R $copath/A/be",
__"A $copath/A/neu",
__"? $copath/A/unused",
__"D $copath/A/Q",
__"D $copath/A/Q/qu",
__"D $copath/A/Q/qz"]);
is_output ($svk, 'add', ['-N', "$copath/A"],
[__("$copath/A already added.")]);
$svk->revert ('-R', $copath);
is_output ($svk, 'status', [$copath],
[__"? $copath/A/neu",
__"? $copath/A/unused"], 'revert replaced tree items');
unlink ("$copath/A/neu");
unlink ("$copath/A/unused");
$svk->rm ("$copath/A");
mkdir ("$copath/A");
overwrite_file ("$copath/A/be", "foobar\n2nd replace\n");
overwrite_file ("$copath/A/neu", "foobar\n2nd replace\n");
$svk->add ("$copath/A");
is_output ($svk, 'commit', ['-m', 'replace A/be', $copath],
['Committed revision 5.']);
$svk->rm ("$copath/A");
$svk->status ($copath);
overwrite_file ("$copath/A", "dir replaced as file\n");
$svk->status ($copath);
is_output ($svk, 'add', ["$copath/A"],
[__"R $copath/A"]);
is_output ($svk, 'status', [$copath],
[__"R $copath/A",
__"D $copath/A/be",
__"D $copath/A/neu"], 'file replacing dir');
$svk->commit ('-m', 'commit the replace', $copath);
mkdir ("$copath/T1");
overwrite_file ("$copath/T1/T1", "foobar\n");
mkdir ("$copath/T2");
overwrite_file ("$copath/T2/T2", "foobar\n");
$svk->add ("$copath/T1");
$svk->add ("$copath/T2");
$svk->commit ('-m', 'commit', $copath);
$svk->rm ("$copath/T1/T1");
is_output ($svk, 'cp', ["$copath/T2/T2", "$copath/T1/T1"],
[__"A $copath/T1/T1"], 'replace with history');
is_output ($svk, 'st', [$copath],
[__"R + $copath/T1/T1"]);
is_output ($svk, 'st', ["$copath/T1/T1"],
[__"R + $copath/T1/T1"]);
$svk->commit ('-m', 'commit', $copath);
is_ancestor ($svk, '//V/T1/T1',
'/V/T2/T2', 7);
$svk->rm ("$copath/T1");
is_output ($svk, 'cp', ["$copath/T2", "$copath/T1"],
[__"A $copath/T1",
__"A $copath/T1/T2"]);
is_output ($svk, 'st', [$copath],
[__"R + $copath/T1"]);
append_file ("$copath/T1/T2", "hate\n");
is_output ($svk, 'st', [$copath],
[__"R + $copath/T1",
__"M + $copath/T1/T2"]);
$svk->commit ('-m', 'commit', $copath);
is_ancestor ($svk, '//V/T1',
'/V/T2', 7);
$svk->cp('//V@5' => '//Y', -m => 'branch pre-replace');
is_output($svk, 'sm', ['//V@6' => '//Y', -m => 'merge dir->file replace'],
['Auto-merging (5, 6) /V to /Y (base /V:5).',
'R A',
qr'New merge ticket: .*:/V:6',
'Committed revision 11.']);
is_output($svk, 'merge', [-c => -11, '//Y' => '//Y',
-m => 'revert merge dir->file replace'],
['R A',
'A A/be',
'A A/neu',
'Committed revision 12.']);
chdir($copath);
$svk->sw('//Y');
is_output($svk, 'merge', [-c => 11, '//Y'],
['R A']);
is_output($svk, 'st', [],
['R A',
__('D A/be'),
__('D A/neu'),
]);
ok(-f 'A');
is_output($svk, 'ci', [-m => 'message'],
['Committed revision 13.']);
is_output($svk, 'merge', [-c => -11, '//Y'],
['R A',
__('A A/be'),
__('A A/neu')]);
ok(-d 'A');
is_output($svk, 'st', [],
['R A',
__('A A/be'),
__('A A/neu')]);
is_output($svk, 'ci', [-m => 'message'],
['Committed revision 14.']);