#!/usr/bin/perl -w use strict; use SVK::Test; plan tests => 24; # 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 overwrite_file ("foo", "1\n"); $svk->add('foo'); $svk->commit('-m', 'init'); overwrite_file("foo", "2\n"); $svk->commit('-m', 'added a needle'); overwrite_file("foo", "3\n"); $svk->commit('-m', 'only hay this time'); overwrite_file("foo", "4\n"); $svk->commit('-m', 'needle and a lot of hay'); # set some author properties to test the author filter $svk->ps(qw( --revprop -r 1 svn:author person )); $svk->ps(qw( --revprop -r 2 svn:author another )); $svk->pd(qw( --revprop -r 3 svn:author )); # delete author $svk->ps(qw( --revprop -r 4 svn:author person )); # sanity check the output is_output( $svk, 'log', [], [ qr/-+/, qr/r4:/, '', 'needle and a lot of hay', qr/-+/, qr/r3:/, '', 'only hay this time', qr/-+/, qr/r2:/, '', 'added a needle', qr/-+/, qr/r1:/, '', 'init', qr/-+/, ], ); is_output( $svk, 'log', [ '-q', '--filter', 'grep needle' ], [ qr/-+/, qr/r4:/, qr/-+/, qr/r2:/, qr/-+/, ], ); is_output( $svk, 'log', [ '-q', '--filter', 'grep NEEDLE' ], [ qr/-+/, qr/r4:/, qr/-+/, qr/r2:/, qr/-+/, ], ); is_output( $svk, 'log', [ '-q', '--filter', 'grep (?-i)NEEDLE' ], [ qr/-+/, ], ); # make sure an escaped '|' is part of the pattern is_output( $svk, 'log', [ '-q', '--filter', 'grep (needle\|hay)' ], [ qr/-+/, qr/r4:/, qr/-+/, qr/r3:/, qr/-+/, qr/r2:/, qr/-+/, ], ); is_output( $svk, 'log', [ '-q', '--filter', 'head 2' ], [ qr/-+/, qr/r4:/, qr/-+/, qr/r3:/, qr/-+/, ], ); # again, with space after the number... is_output( $svk, 'log', [ '-q', '--filter', 'head 2 ' ], [ qr/-+/, qr/r4:/, qr/-+/, qr/r3:/, qr/-+/, ], ); is_output( $svk, 'log', [ '-q', '--filter', 'grep needle | head 1' ], [ qr/-+/, qr/r4:/, qr/-+/, ], ); # There are two needle entries, but only one is in the first two, so # "head | grep" only finds one, while "grep | head" and grep with # --limit find both. is_output( $svk, 'log', [ '-q', '--filter', 'head 2 | grep needle' ], [ qr/-+/, qr/r4:/, qr/-+/, ], ); is_output( $svk, 'log', [ '-q', '--filter', 'grep needle | head 2' ], [ qr/-+/, qr/r4:/, qr/-+/, qr/r2:/, qr/-+/, ], ); is_output( $svk, 'log', [ '-q', '--limit', 2, '--filter', 'grep needle' ], [ qr/-+/, qr/r4:/, qr/-+/, qr/r2:/, qr/-+/, ], ); # the "init" message is not in the first two, so we should not find it # if we "head 2" first. is_output( $svk, 'log', [ '--filter', 'head 2 | grep init' ], [ qr/-+/, ], ); is_output( $svk, 'log', [ '--filter', 'grep init | head 2' ], [ qr/-+/, qr/r1:/, '', 'init', qr/-+/, ], ); # author filter is_output( $svk, 'log', [ '-q', '--filter', 'author person' ], [ qr/-+/, qr/r4:/, qr/-+/, qr/r1:/, qr/-+/, ], ); is_output( $svk, 'log', [ '-q', '--filter', 'author person,another' ], [ qr/-+/, qr/r4:/, qr/-+/, qr/r2:/, qr/-+/, qr/r1:/, qr/-+/, ], ); is_output( $svk, 'log', [ '-q', '--filter', 'author another, (none)' ], [ qr/-+/, qr/r3:/, qr/-+/, qr/r2:/, qr/-+/, ], ); # test some error conditions is_output( $svk, 'log', [ '--filter', 'grep }{' ], [ q(Grep: Invalid regular expression '}{'.), ], ); is_output( $svk, 'log', [ '--filter', 'head blah' ], [ q(Head: 'blah' is not numeric.), ], ); is_output( $svk, 'log', [ '--filter', 'head' ], [ q(Head: '' is not numeric.), ], ); is_output( $svk, 'log', [ '--filter', 'author' ], [ q(Author: at least one author name is required.), ], ); is_output( $svk, 'log', [ '--filter', 'std' ], [ q(Cannot use the output filter "std" in a selection pipeline.), q(Perhaps you meant "--output std". If not, take a look at), q("svk help log" for examples of using log filters.), ], ); is_output( $svk, 'log', [ '--filter', 'author joe | std' ], [ q(Cannot use the output filter "std" in a selection pipeline.), q(Perhaps you meant "--output std". If not, take a look at), q("svk help log" for examples of using log filters.), ], ); is_output( $svk, 'log', [ '--output', 'grep' ], [ q(Cannot use the selection filter "grep" as an output filter.), q(Perhaps you meant "--filter 'grep ...'". If not, take a look at), q("svk help log" for examples of using log filters.), ], ); is_output( $svk, 'log', [ '--output', 'std | xml' ], [ q(Output filters cannot be chained in a pipeline.), q(See "svk help log" for examples of using log filters.), ], );