1#!/usr/bin/perl -w 2use Test::More tests => 27; 3use strict; 4use SVK::Test; 5our $output; 6my ($xd, $svk) = build_test(); 7my ($copath, $corpath) = get_copath ('status'); 8my ($repospath, undef, $repos) = $xd->find_repos ('//', 1); 9$svk->checkout ('//', $copath); 10chdir ($copath); 11mkdir ('A'); 12mkdir ('A/deep'); 13overwrite_file ("A/foo", "foobar"); 14overwrite_file ("A/foo~", "foobar"); 15overwrite_file ("A/bar", "foobar"); 16overwrite_file ("A/deep/baz", "foobar"); 17 18is_output_like ($svk, 'status', ['--help'], qr'SYNOPSIS'); 19 20is_output ($svk, 'status', [], 21 ['? A'], 'status - unknown'); 22is_output ($svk, 'status', ['-q'], 23 [], ' -q'); 24is_output ($svk, 'status', ['--quiet'], 25 [], ' --quiet'); 26 27$svk->add ('-N', 'A'); 28$svk->add ('A/foo'); 29is_output ($svk, 'status', [], 30 [ map __($_), 'A A', '? A/bar', '? A/deep', 'A A/foo'], 'status - unknown'); 31chdir('A'); 32is_output ($svk, 'status', ['../A'], 33 [ map __($_), 'A ../A', '? ../A/bar', '? ../A/deep', 'A ../A/foo'], 'status - unknown'); 34chdir('..'); 35$svk->add ('A/deep'); 36$svk->commit ('-m', 'add a bunch for files'); 37overwrite_file ("A/foo", "fnord"); 38overwrite_file ("A/another", "fnord"); 39$svk->add ('A/another'); 40$svk->ps ('someprop', 'somevalue', 'A/foo', 'A/another'); 41is_output ($svk, 'status', [], 42 [ map __($_), 'MM A/foo', 'A A/another', '? A/bar'], 'status - modified file and prop'); 43$svk->commit ('-m', 'some modification'); 44overwrite_file ("A/foo", "fnord\nmore"); 45$svk->commit ('-m', 'more modification'); 46rmtree (['A/deep']); 47unlink ('A/another'); 48is_output ($svk, 'status', [], 49 [ map __($_), '! A/another', '! A/deep', '? A/bar'], 'status - absent file and dir'); 50$svk->revert ('-R', 'A'); 51unlink ('A/deep/baz'); 52$svk->status; 53$svk->delete ('A/deep'); 54$svk->delete ('A/another'); 55is_output ($svk, 'status', [], 56 [ map __($_), '? A/bar', 'D A/another', 'D A/deep', 'D A/deep/baz'], 'status - deleted file and dir'); 57 58is_output ($svk, 'status', ['-q'], 59 [ map __($_), 'D A/another', 'D A/deep', 'D A/deep/baz'], ' -q'); 60 61$svk->revert ('-R', 'A'); 62overwrite_file ("A/foo", "foo"); 63$svk->merge ('-r1:2', '//A', 'A'); 64is_output ($svk, 'status', [], 65 [ map __($_), 'C A/foo', '? A/bar'], 'status - conflict'); 66$svk->resolved ('A/foo'); 67$svk->revert ('-R', 'A'); 68overwrite_file ("A/foo", "foo"); 69$svk->merge ('-r2:3', '//A', 'A'); 70is_output ($svk, 'status', [], 71 [ map __($_), 'C A/foo', '? A/bar'], 'status - conflict'); 72$svk->revert ('A/foo'); 73$svk->ps ('someprop', 'somevalue', '.'); 74$svk->ps ('someprop', 'somevalue', 'A'); 75chdir ('A'); 76is_output ($svk, 'status', [], 77 [ map __($_), '? bar', ' M .']); 78chdir ('..'); 79$svk->revert ('-R', '.'); 80$svk->ps ('someprop', 'somevalue', 'A/deep/baz'); 81is_output ($svk, 'status', ['A/deep'], 82 [__(' M A/deep/baz')], 'prop only'); 83$svk->revert ('-R', '.'); 84rmtree (['A/deep']); 85overwrite_file ("A/deep", "dir replaced with file.\n"); 86unlink('A/another'); 87mkdir('A/another'); 88 89is_output ($svk, 'status', [], 90 [map __($_), 91 '? A/bar', 92 '~ A/another', 93 '~ A/deep'], 'obstructure'); 94 95is_output ($svk, 'status', [], 96 [map __($_), 97 '? A/bar', 98 '~ A/another', 99 '~ A/deep'], 'obstructure - make sure it is not signatured'); 100 101# XXX: revert should hint about moving away obstructed entries 102$svk->revert ('-R', '.'); 103# fixup 104rmtree (['A/another']); 105$svk->revert ('-R', '.'); 106 107is_output($svk, 'st', [], [__('? A/bar'), 108 __('~ A/deep')]); 109 110$svk->mkdir ('-p', '-m', ' ', '//A/deeper/deeper'); 111$svk->up; 112append_file ("A/deeper/deeper/baz", "baz"); 113$svk->add ("A/deeper/deeper/baz"); 114$svk->rm ('-m', 'delete', '//A/deeper'); 115overwrite_file ("A/deeper/deeper/baz", "boo"); 116$svk->up; 117chdir ('A'); 118TODO: { 119local $TODO = 'target_condensed and report being .'; 120is_output ($svk, 'status', ['deeper/deeper'], 121 [__('C deeper'), 122 __('C deeper/deeper'), 123 __('C deeper/deeper/baz') 124 ]); 125} 126chdir ('..'); 127$svk->revert ('-R', 'A'); 128$svk->add ('A/deeper'); 129$svk->ps ('foo', 'bar', 'A/deeper'); 130$svk->ps ('bar', 'ksf', 'A/deeper'); 131is_output ($svk, 'st', [], 132 [map {__($_)} 133 ('? A/bar', 134 'A A/deeper', 135 'A A/deeper/deeper', 136 'A A/deeper/deeper/baz', 137 '~ A/deep')]); 138my $cowner = $ENV{USER}; 139$svk->ps ('-r2', '--revprop', 'svn:author', 'user2'); 140$svk->ps ('-r3', '--revprop', 'svn:author', 'user3'); 141$svk->ps ('-r5', '--revprop', 'svn:author', 'user5'); 142is_output ($svk, 'st', ['--verbose'], 143 [map {__($_)} 144 (' 5 2 user2 A/another', 145 ' 5 3 user3 A/foo', 146 '? A/bar', 147 'A 0 ? ? A/deeper', 148 'A 0 ? ? A/deeper/deeper', 149 'A 0 ? ? A/deeper/deeper/baz', 150 '~ ? ? ? A/deep', 151 ' 5 5 user5 A', 152 ' 5 5 user5 .')]); 153overwrite_file ("A/bar.o", "binary stuff\n"); 154is_output ($svk, 'status', ['--no-ignore'], 155 [map {__($_)} 156 ('? A/bar', 157 'I A/bar.o', 158 'A A/deeper', 159 'A A/deeper/deeper', 160 'A A/deeper/deeper/baz', 161 'I A/foo~', 162 '~ A/deep')]); 163$svk->ps ('svn:ignore', 'test', 'A/deeper'); 164overwrite_file ("A/deeper/test", "fnord\nmore"); 165is_output ($svk, 'status', ['--quiet', '--no-ignore'], 166 [map {__($_)} 167 ('I A/bar.o', 168 'A A/deeper', 169 'A A/deeper/deeper', 170 'A A/deeper/deeper/baz', 171 'I A/deeper/test', 172 'I A/foo~', 173 '~ A/deep')]); 174is_output ($svk, 'status', ['--non-recursive', 'A'], 175 [map {__($_)} 176 ('? A/bar', 177 'A A/deeper', 178 '~ A/deep')]); 179$svk->ci ('A/deeper', '-m', 'added deeper'); 180$svk->ps ('-r6', '--revprop', 'svn:author', 'user6'); 181$svk->cp ('A/deeper', 'A/deeper-copy'); 182is_output ($svk, 'st', ['--verbose'], 183 [map {__($_)} 184 (' 6 2 user2 A/another', 185 ' 6 6 user6 A/deeper/deeper/baz', 186 ' 6 6 user6 A/deeper/deeper', 187 ' 6 6 user6 A/deeper', 188 ' 6 3 user3 A/foo', 189 '? A/bar', 190 'A + - 6 user6 A/deeper-copy', 191 ' + - 6 user6 A/deeper-copy/deeper/baz', 192 ' + - 6 user6 A/deeper-copy/deeper', 193 '~ ? ? ? A/deep', 194 ' 6 6 user6 A', 195 ' 6 6 user6 .')]); 196append_file ("A/deeper-copy/deeper/baz", "more baz"); 197is_output ($svk, 'st', ['--verbose'], 198 [map {__($_)} 199 (' 6 2 user2 A/another', 200 ' 6 6 user6 A/deeper/deeper/baz', 201 ' 6 6 user6 A/deeper/deeper', 202 ' 6 6 user6 A/deeper', 203 ' 6 3 user3 A/foo', 204 '? A/bar', 205 'A + - 6 user6 A/deeper-copy', 206 'M + - 6 user6 A/deeper-copy/deeper/baz', 207 ' + - 6 user6 A/deeper-copy/deeper', 208 '~ ? ? ? A/deep', 209 ' 6 6 user6 A', 210 ' 6 6 user6 .')]); 211 212overwrite_file("A/deeper-copy/bah", "ignore me"); 213is_output($svk, 'ignore', ["A/bar", "A/deeper-copy/bah"], 214 [ ' M A', 215 __(' M A/deeper-copy')]); 216$svk->diff('A'); 217 218is_output($svk, 'status', ['--verbose'], 219 [map {__($_)} 220 (' 6 2 user2 A/another', 221 ' 6 6 user6 A/deeper/deeper/baz', 222 ' 6 6 user6 A/deeper/deeper', 223 ' 6 6 user6 A/deeper', 224 ' 6 3 user3 A/foo', 225 'A + - 6 user6 A/deeper-copy', 226 'M + - 6 user6 A/deeper-copy/deeper/baz', 227 ' + - 6 user6 A/deeper-copy/deeper', 228 '~ ? ? ? A/deep', 229 ' M 6 6 user6 A', 230 ' 6 6 user6 .')]); 231