#!/usr/bin/perl -w
use strict;
use SVK::Test;
plan tests => 13;
# working copy initialization
our $output;
my ($xd, $svk) = build_test('test');
my ($copath, $corpath) = get_copath ('log-xml');
my ($repospath, undef, $repos) = $xd->find_repos ('//', 1);
$svk->checkout ('//', $copath);
chdir ($copath);
# create some files, copy them and set a property
mkdir ('A');
overwrite_file ("A/foo", "foobar\nfnord\n");
overwrite_file ("A/bar", "foobar\n");
$svk->add ('A');
$svk->commit ('-m', 'init');
$svk->cp ('//A/foo', 'foo-cp');
$svk->cp ('//A/bar', 'bar-cp');
overwrite_file ("foo-cp", "foobar\nfnord\nnewline");
$svk->ps ('mmm', 'xxx', 'A/foo');
$svk->commit ('-m', 'cp & ps xml');
# check the output so far
is_output (
$svk, 'log', ['--xml'],
[
'',
'',
'',
qr{.*?},
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'cp & ps <bad>xml</bad>',
'',
'',
qr{.*?},
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'init',
'',
'',
],
);
{
local $ENV{SVKLOGOUTPUT} = 'xml';
is_output(
$svk, 'log', ['--quiet'],
[
'',
'',
'',
qr{.*?},
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'',
'',
qr{.*?},
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'',
'',
],
);
}
is_output(
$svk, 'log', ['--output', 'junk', '--xml', '-v'],
[
'Ignoring --output junk. Using --xml.',
'',
'',
'',
qr{.*?},
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'',
'/A/foo',
'/bar-cp',
'/foo-cp',
'',
'cp & ps <bad>xml</bad>',
'',
'',
qr{.*?},
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'',
'/A',
'/A/bar',
'/A/foo',
'',
'init',
'',
'',
],
);
# delete the author property
$svk->pd ('--revprop', '-r' => 2 , 'svn:author');
$svk->mirror ('/test/A', uri("$repospath/A"));
$svk->sync ('/test/A');
# check the "no author" behavior, etc
is_output(
$svk, 'log', ['--xml', '-v', '-l1', '/test/'],
[
'',
'',
'',
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'',
'/A/foo',
'',
'cp & ps <bad>xml</bad>',
'',
'',
],
);
is_output(
$svk, 'log', ['--xml', '-v', '-l1', '/test/A/'],
[
'',
'',
'',
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'',
'/A/foo',
'',
'cp & ps <bad>xml</bad>',
'',
'',
],
);
is_output (
$svk, 'log', ['--xml', '-q', '--verbose', '--limit', '1' ,'/test/A/'],
[
'',
'',
'',
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'',
'/A/foo',
'',
'',
'',
]
);
is_output(
$svk, 'log', ['--xml', '-v', '-r2@', '/test/A/'],
[
'',
'',
'',
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'',
'/A/foo',
'',
'cp & ps <bad>xml</bad>',
'',
'',
]
);
# try some bad revisions
is_output (
$svk, 'log', ['--xml', '-v', '-r5@', '/test/A/'],
["Can't find local revision for 5 on /A."]
);
is_output (
$svk, 'log', ['--xml', -r => 16384, -l1 => '/test/A'],
[
'Revision too large, show log from 3.',
'',
'',
'',
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'cp & ps <bad>xml</bad>',
'',
'',
]
);
is_output (
$svk, 'log', ['--xml', -r => 'asdf', '/test/A'],
['asdf is not a number.']
);
# remove A from the repo
$svk->update ('A');
$svk->rm (-m => 'bye', '//A');
is_output(
$svk, 'log', [ '--xml', -l1 => 'A' ],
[
'',
'',
'',
qr{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z},
'cp & ps <bad>xml</bad>',
'',
'',
],
);
# mangle a revision
$svk->pd(qw{ --revprop -r 3 svn:date });
$svk->pd(qw{ --revprop -r 3 svn:log });
$svk->update();
is_output (
$svk, 'log', [ '--xml', '-l1', '-v'],
[
'',
'',
'',
qr{.*?},
'',
'/A',
'',
'',
'',
],
);
# make sure non-existent filters die correctly.
is_output(
$svk, 'log', ['--output', 'bzzz'],
[
q{Can't load log filter 'bzzz'.},
]
);