#!/usr/bin/perl -w
use Test::More tests => 24;
use strict;
use File::Path;
use Cwd;
use SVK::Test;
my ($xd, $svk) = build_test();
my ($repospath, undef, $repos) = $xd->find_repos ('//', 1);
my $uuid = $repos->fs->get_uuid;
our ($output, $answer);
$svk->mkdir(-m => 'trunk', '//trunk');
my ($copath, $corpath) = get_copath ('smerge-tree');
$svk->checkout ('//trunk', $copath);
chdir($copath);
$svk->mkdir('dir');
overwrite_file('dir/file', "foo\n");
$svk->add('dir');
$svk->ci(-m => 'add tree');
$svk->copy (-m => 'local', '//trunk', '//local');
$svk->switch('//local');
overwrite_file('dir/file', "bar\n");
$svk->ci(-m => 'change file in local');
$svk->rm(-m => 'remove dir with the file in trunk' => '//trunk/dir');
is_output ($svk, 'smerge', ['-C' => '//trunk' => '//local'], [
'Auto-merging (2, 5) /trunk to /local (base /trunk:2).',
'C dir',
'C dir/file',
"New merge ticket: $uuid:/trunk:5",
'Empty merge.',
'2 conflicts found.',
]);
$ENV{SVKRESOLVE} = 't'; # thiers(delete //local/dir/file)
is_output ($svk, 'smerge', ['-m' => 'smerge tree conflict', '//trunk' => '//local'], [
'Auto-merging (2, 5) /trunk to /local (base /trunk:2).',
'D dir',
"New merge ticket: $uuid:/trunk:5",
'Committed revision 6.',
]);
$svk->switch('//trunk');
is_output ($svk, 'st', [], []);
{
mkdir 'dir';
overwrite_file('dir/file', "foo\n");
$svk->add('dir');
$svk->ci(-m => 'add tree');
$svk->sm (-m => 'smerge', '//trunk', '//local');
$svk->switch('//local');
is_output ($svk, 'cat', ['//local/dir/file'], [ 'foo' ]);
is_output ($svk, 'cat', ['dir/file'], [ 'foo' ]);
# overwrite_file('dir/file', 'bar');
# { local $TODO = "something strange happens here";
# is_output ($svk, 'st', [], [ 'M dir/file' ]);
# is_output ($svk, 'ci', [-m => 'change the file in local', 'dir/file'], [ 'M dir/file' ]);
# }
overwrite_file('dir/file', "foobar\n");
is_output ($svk, 'st', [], [ __('M dir/file') ]);
is_output ($svk, 'ci', [-m => 'change the file in local', 'dir/file'], [ 'Committed revision 9.' ]);
$svk->rm(-m => 'remove the dir in trunk' => '//trunk/dir');
is_output ($svk, 'smerge', [-C => '//trunk' => '//local'], [
'Auto-merging (7, 10) /trunk to /local (base /trunk:7).',
'C dir',
'C dir/file',
"New merge ticket: $uuid:/trunk:10",
'Empty merge.',
'2 conflicts found.',
]);
$ENV{'SVKRESOLVE'} = 'y';
is_output ($svk, 'smerge', [-m => 'merge', '//trunk' => '//local'], [
'Auto-merging (7, 10) /trunk to /local (base /trunk:7).',
'G dir',
'G dir/file',
"New merge ticket: $uuid:/trunk:10",
'Committed revision 11.',
]);
is_output ($svk, 'cat', ['//local/dir/file'], [ 'foobar' ]);
$svk->rm(-m => 'remove manually', '//local/dir');
$svk->sm(-m => 'smerge', '//trunk' => '//local');
$svk->switch('//trunk');
is_output ($svk, 'st', [], []);
}
{
$svk->mkdir('dir');
overwrite_file('dir/file', "foo\n");
$svk->add('dir');
$svk->ci(-m => 'add tree');
$svk->sm (-m => 'smerge', '//trunk', '//local');
$svk->switch('//local');
overwrite_file('dir/new_local_file', "bar\n");
$svk->add('dir/new_local_file');
$svk->ci(-m => 'add new file in local');
is_output ($svk, 'cat', ['//local/dir/new_local_file'], [ 'bar' ]);
$svk->rm(-m => 'remove the dir in trunk' => '//trunk/dir');
is_output ($svk, 'smerge', [-C => '//trunk' => '//local'], [
'Auto-merging (13, 16) /trunk to /local (base /trunk:13).',
'C dir',
'D dir/file',
'C dir/new_local_file',
"New merge ticket: $uuid:/trunk:16",
'Empty merge.',
'2 conflicts found.',
]);
$ENV{'SVKRESOLVE'} = 'y';
is_output ($svk, 'smerge', [-m => 'merge', '//trunk' => '//local'], [
'Auto-merging (13, 16) /trunk to /local (base /trunk:13).',
'G dir',
'D dir/file',
'G dir/new_local_file',
"New merge ticket: $uuid:/trunk:16",
'Committed revision 17.',
]);
is_output ($svk, 'cat', ['//local/dir/new_local_file'], [ 'bar' ]);
$svk->rm(-m => 'remove manually', '//local/dir');
$svk->sm(-m => 'smerge', '//trunk' => '//local');
$svk->switch('//trunk');
is_output ($svk, 'st', [], []);
}
{
$svk->mkdir('dir');
overwrite_file('dir/file', "foo\n");
$svk->add('dir');
$svk->ci(-m => 'add tree');
$svk->sm (-m => 'smerge', '//trunk', '//local');
$svk->switch('//local');
overwrite_file('dir/new_local_file', "bar\n");
$svk->add('dir/new_local_file');
$svk->ci(-m => 'add new file in local');
$svk->rm(-m => 'remove the dir in trunk' => '//trunk/dir');
is_output ($svk, 'smerge', [-C => '//trunk' => '//local'], [
'Auto-merging (19, 22) /trunk to /local (base /trunk:19).',
'C dir',
'D dir/file',
'C dir/new_local_file',
"New merge ticket: $uuid:/trunk:22",
'Empty merge.',
'2 conflicts found.',
]);
{ local $TODO = "not yet implemented";
# their - empty, base - empty, yours - our content
# SVK::Resolve thinks we have no conflict and leave the
# content even if we want to delete it :)
$ENV{'SVKRESOLVE'} = 't';
is_output ($svk, 'smerge', [-m => 'merge', '//trunk' => '//local'], [
'Auto-merging (19, 22) /trunk to /local (base /trunk:19).',
'D dir',
'D dir/file',
'D dir/new_local_file',
"New merge ticket: $uuid:/trunk:22",
'Committed revision 23.',
]);
is_output ($svk, 'ls', ['//local'], [ '' ]);
# XXX: delete this lines when you'll drop TODO
$svk->rm(-m => 'remove manually', '//local/dir');
$svk->sm(-m => 'smerge', '//trunk' => '//local');
}
$svk->switch('//trunk');
is_output ($svk, 'st', [], []);
}
{
$svk->mkdir(-p => 'dir/sub');
$svk->ci(-m => 'add tree');
$svk->sm (-m => 'smerge', '//trunk', '//local');
$svk->switch('//local');
$svk->rm('dir/sub');
$svk->ci(-m => 'delete subdir in local');
overwrite_file('dir/sub', "bar\n");
$svk->add('dir/sub');
$svk->ci(-m => 'add file in place of subdir');
$svk->rm(-m => 'remove the dir in trunk' => '//trunk/dir');
is_output ($svk, 'smerge', [-C => '//trunk' => '//local'], [
'Auto-merging (25, 29) /trunk to /local (base /trunk:25).',
'C dir',
'C dir/sub',
"New merge ticket: $uuid:/trunk:29",
'Empty merge.',
'2 conflicts found.',
]);
{ local $TODO = "not yet implemented";
$ENV{'SVKRESOLVE'} = 't';
is_output ($svk, 'smerge', [-m => 'merge', '//trunk' => '//local'], [
'Auto-merging (25, 29) /trunk to /local (base /trunk:25).',
'D dir',
'D dir/sub',
"New merge ticket: $uuid:/trunk:29",
'Committed revision 30.',
]);
is_output ($svk, 'ls', ['//local'], [ '' ]);
# XXX: delete this lines when you'll drop TODO
$svk->rm(-m => 'remove manually', '//local/dir');
$svk->sm(-m => 'smerge', '//trunk' => '//local');
}
$svk->switch('//trunk');
is_output ($svk, 'st', [], []);
}