test-fileset.t
369 lines
| 6.6 KiB
| text/troff
|
Tads3Lexer
/ tests / test-fileset.t
Patrick Mezard
|
r17362 | $ fileset() { | ||
> hg debugfileset "$@" | ||||
> } | ||||
$ hg init repo | ||||
$ cd repo | ||||
$ echo a > a1 | ||||
$ echo a > a2 | ||||
$ echo b > b1 | ||||
Patrick Mezard
|
r17364 | $ echo b > b2 | ||
Patrick Mezard
|
r17362 | $ hg ci -Am addfiles | ||
adding a1 | ||||
adding a2 | ||||
adding b1 | ||||
Patrick Mezard
|
r17364 | adding b2 | ||
Patrick Mezard
|
r17362 | |||
Test operators and basic patterns | ||||
Yuya Nishihara
|
r25255 | $ fileset -v a1 | ||
('symbol', 'a1') | ||||
Patrick Mezard
|
r17362 | a1 | ||
Yuya Nishihara
|
r25255 | $ fileset -v 'a*' | ||
('symbol', 'a*') | ||||
Patrick Mezard
|
r17362 | a1 | ||
a2 | ||||
Yuya Nishihara
|
r25255 | $ fileset -v '"re:a\d"' | ||
('string', 're:a\\d') | ||||
Patrick Mezard
|
r17362 | a1 | ||
a2 | ||||
Yuya Nishihara
|
r25255 | $ fileset -v 'a1 or a2' | ||
(or | ||||
('symbol', 'a1') | ||||
('symbol', 'a2')) | ||||
Patrick Mezard
|
r17362 | a1 | ||
a2 | ||||
$ fileset 'a1 | a2' | ||||
a1 | ||||
a2 | ||||
$ fileset 'a* and "*1"' | ||||
a1 | ||||
$ fileset 'a* & "*1"' | ||||
a1 | ||||
$ fileset 'not (r"a*")' | ||||
b1 | ||||
Patrick Mezard
|
r17364 | b2 | ||
Patrick Mezard
|
r17362 | $ fileset '! ("a*")' | ||
b1 | ||||
Patrick Mezard
|
r17364 | b2 | ||
Patrick Mezard
|
r17363 | $ fileset 'a* - a1' | ||
a2 | ||||
Matt Mackall
|
r19470 | $ fileset 'a_b' | ||
Yuya Nishihara
|
r26233 | $ fileset '"\xy"' | ||
hg: parse error: invalid \x escape | ||||
[255] | ||||
Patrick Mezard
|
r17362 | |||
Patrick Mezard
|
r17364 | Test files status | ||
$ rm a1 | ||||
$ hg rm a2 | ||||
$ echo b >> b2 | ||||
$ hg cp b1 c1 | ||||
$ echo c > c2 | ||||
$ echo c > c3 | ||||
$ cat > .hgignore <<EOF | ||||
> \.hgignore | ||||
> 2$ | ||||
> EOF | ||||
$ fileset 'modified()' | ||||
b2 | ||||
$ fileset 'added()' | ||||
c1 | ||||
$ fileset 'removed()' | ||||
a2 | ||||
$ fileset 'deleted()' | ||||
a1 | ||||
liscju
|
r27024 | $ fileset 'missing()' | ||
a1 | ||||
Patrick Mezard
|
r17364 | $ fileset 'unknown()' | ||
c3 | ||||
$ fileset 'ignored()' | ||||
.hgignore | ||||
c2 | ||||
$ fileset 'hgignore()' | ||||
a2 | ||||
b2 | ||||
$ fileset 'clean()' | ||||
b1 | ||||
$ fileset 'copied()' | ||||
c1 | ||||
Patrick Mezard
|
r17365 | Test files properties | ||
>>> file('bin', 'wb').write('\0a') | ||||
$ fileset 'binary()' | ||||
Patrick Mezard
|
r17366 | $ fileset 'binary() and unknown()' | ||
bin | ||||
Patrick Mezard
|
r17367 | $ echo '^bin$' >> .hgignore | ||
$ fileset 'binary() and ignored()' | ||||
bin | ||||
Patrick Mezard
|
r17366 | $ hg add bin | ||
$ fileset 'binary()' | ||||
bin | ||||
Patrick Mezard
|
r17365 | |||
Patrick Mezard
|
r17368 | $ fileset 'grep("b{1}")' | ||
b2 | ||||
c1 | ||||
b1 | ||||
$ fileset 'grep("missingparens(")' | ||||
hg: parse error: invalid match pattern: unbalanced parenthesis | ||||
[255] | ||||
Patrick Mezard
|
r17369 | #if execbit | ||
$ chmod +x b2 | ||||
$ fileset 'exec()' | ||||
b2 | ||||
#endif | ||||
#if symlink | ||||
$ ln -s b2 b2link | ||||
$ fileset 'symlink() and unknown()' | ||||
b2link | ||||
$ hg add b2link | ||||
#endif | ||||
Siddharth Agarwal
|
r24408 | #if no-windows | ||
$ echo foo > con.xml | ||||
Siddharth Agarwal
|
r24430 | $ fileset 'not portable()' | ||
Siddharth Agarwal
|
r24408 | con.xml | ||
Siddharth Agarwal
|
r24430 | $ hg --config ui.portablefilenames=ignore add con.xml | ||
Siddharth Agarwal
|
r24408 | #endif | ||
Patrick Mezard
|
r17369 | >>> file('1k', 'wb').write(' '*1024) | ||
>>> file('2k', 'wb').write(' '*2048) | ||||
$ hg add 1k 2k | ||||
$ fileset 'size("bar")' | ||||
hg: parse error: couldn't parse size: bar | ||||
[255] | ||||
timeless
|
r27518 | $ fileset '(1k, 2k)' | ||
hg: parse error: can't use a list in this context | ||||
(see hg help "filesets.x or y") | ||||
[255] | ||||
Patrick Mezard
|
r17369 | $ fileset 'size(1k)' | ||
1k | ||||
$ fileset '(1k or 2k) and size("< 2k")' | ||||
1k | ||||
$ fileset '(1k or 2k) and size("<=2k")' | ||||
1k | ||||
2k | ||||
$ fileset '(1k or 2k) and size("> 1k")' | ||||
2k | ||||
$ fileset '(1k or 2k) and size(">=1K")' | ||||
1k | ||||
2k | ||||
$ fileset '(1k or 2k) and size(".5KB - 1.5kB")' | ||||
1k | ||||
r25925 | $ fileset 'size("1M")' | |||
$ fileset 'size("1 GB")' | ||||
Patrick Mezard
|
r17369 | |||
Test merge states | ||||
$ hg ci -m manychanges | ||||
$ hg up -C 0 | ||||
* files updated, 0 files merged, * files removed, 0 files unresolved (glob) | ||||
$ echo c >> b2 | ||||
$ hg ci -m diverging b2 | ||||
created new head | ||||
$ fileset 'resolved()' | ||||
$ fileset 'unresolved()' | ||||
$ hg merge | ||||
merging b2 | ||||
Siddharth Agarwal
|
r26614 | warning: conflicts while merging b2! (edit, then use 'hg resolve --mark') | ||
Matt Harbison
|
r26953 | * files updated, 0 files merged, 1 files removed, 1 files unresolved (glob) | ||
Patrick Mezard
|
r17369 | use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||
[1] | ||||
$ fileset 'resolved()' | ||||
$ fileset 'unresolved()' | ||||
b2 | ||||
$ echo e > b2 | ||||
$ hg resolve -m b2 | ||||
Pierre-Yves David
|
r21947 | (no more unresolved files) | ||
Patrick Mezard
|
r17369 | $ fileset 'resolved()' | ||
b2 | ||||
$ fileset 'unresolved()' | ||||
$ hg ci -m merge | ||||
Test subrepo predicate | ||||
$ hg init sub | ||||
$ echo a > sub/suba | ||||
$ hg -R sub add sub/suba | ||||
$ hg -R sub ci -m sub | ||||
$ echo 'sub = sub' > .hgsub | ||||
Matt Harbison
|
r25558 | $ hg init sub2 | ||
$ echo b > sub2/b | ||||
$ hg -R sub2 ci -Am sub2 | ||||
adding b | ||||
$ echo 'sub2 = sub2' >> .hgsub | ||||
Patrick Mezard
|
r17369 | $ fileset 'subrepo()' | ||
$ hg add .hgsub | ||||
$ fileset 'subrepo()' | ||||
sub | ||||
Matt Harbison
|
r25558 | sub2 | ||
Patrick Mezard
|
r17369 | $ fileset 'subrepo("sub")' | ||
sub | ||||
$ fileset 'subrepo("glob:*")' | ||||
sub | ||||
Matt Harbison
|
r25558 | sub2 | ||
Patrick Mezard
|
r17370 | $ hg ci -m subrepo | ||
Patrick Mezard
|
r17369 | |||
Matt Harbison
|
r25558 | Test that .hgsubstate is updated as appropriate during a conversion. The | ||
saverev property is enough to alter the hashes of the subrepo. | ||||
$ hg init ../converted | ||||
$ hg --config extensions.convert= convert --config convert.hg.saverev=True \ | ||||
> sub ../converted/sub | ||||
initializing destination ../converted/sub repository | ||||
scanning source... | ||||
sorting... | ||||
converting... | ||||
0 sub | ||||
$ hg clone -U sub2 ../converted/sub2 | ||||
$ hg --config extensions.convert= convert --config convert.hg.saverev=True \ | ||||
> . ../converted | ||||
scanning source... | ||||
sorting... | ||||
converting... | ||||
4 addfiles | ||||
3 manychanges | ||||
2 diverging | ||||
1 merge | ||||
0 subrepo | ||||
no ".hgsubstate" updates will be made for "sub2" | ||||
$ hg up -q -R ../converted -r tip | ||||
$ hg --cwd ../converted cat sub/suba sub2/b -r tip | ||||
a | ||||
b | ||||
$ oldnode=`hg log -r tip -T "{node}\n"` | ||||
$ newnode=`hg log -R ../converted -r tip -T "{node}\n"` | ||||
Yuya Nishihara
|
r25587 | $ [ "$oldnode" != "$newnode" ] || echo "nothing changed" | ||
Matt Harbison
|
r25558 | |||
Patrick Mezard
|
r17370 | Test with a revision | ||
$ hg log -G --template '{rev} {desc}\n' | ||||
@ 4 subrepo | ||||
| | ||||
o 3 merge | ||||
|\ | ||||
| o 2 diverging | ||||
| | | ||||
o | 1 manychanges | ||||
|/ | ||||
o 0 addfiles | ||||
$ echo unknown > unknown | ||||
$ fileset -r1 'modified()' | ||||
b2 | ||||
$ fileset -r1 'added() and c1' | ||||
c1 | ||||
$ fileset -r1 'removed()' | ||||
a2 | ||||
$ fileset -r1 'deleted()' | ||||
$ fileset -r1 'unknown()' | ||||
$ fileset -r1 'ignored()' | ||||
$ fileset -r1 'hgignore()' | ||||
b2 | ||||
bin | ||||
$ fileset -r1 'binary()' | ||||
bin | ||||
$ fileset -r1 'size(1k)' | ||||
1k | ||||
$ fileset -r3 'resolved()' | ||||
$ fileset -r3 'unresolved()' | ||||
#if execbit | ||||
$ fileset -r1 'exec()' | ||||
b2 | ||||
#endif | ||||
#if symlink | ||||
$ fileset -r1 'symlink()' | ||||
b2link | ||||
#endif | ||||
Siddharth Agarwal
|
r24408 | #if no-windows | ||
$ fileset -r1 'not portable()' | ||||
con.xml | ||||
Matt Harbison
|
r24424 | $ hg forget 'con.xml' | ||
Siddharth Agarwal
|
r24408 | #endif | ||
Patrick Mezard
|
r17370 | $ fileset -r4 'subrepo("re:su.*")' | ||
sub | ||||
Matt Harbison
|
r25558 | sub2 | ||
Patrick Mezard
|
r17370 | $ fileset -r4 'subrepo("sub")' | ||
sub | ||||
Patrick Mezard
|
r17371 | $ fileset -r4 'b2 or c1' | ||
b2 | ||||
c1 | ||||
Patrick Mezard
|
r17370 | |||
Matt Mackall
|
r18842 | >>> open('dos', 'wb').write("dos\r\n") | ||
>>> open('mixed', 'wb').write("dos\r\nunix\n") | ||||
>>> open('mac', 'wb').write("mac\r") | ||||
$ hg add dos mixed mac | ||||
FUJIWARA Katsunori
|
r27459 | (remove a1, to examine safety of 'eol' on removed files) | ||
$ rm a1 | ||||
Matt Mackall
|
r18842 | $ fileset 'eol(dos)' | ||
dos | ||||
mixed | ||||
$ fileset 'eol(unix)' | ||||
FUJIWARA Katsunori
|
r27459 | mixed | ||
Matt Mackall
|
r18842 | .hgsub | ||
.hgsubstate | ||||
b1 | ||||
b2 | ||||
c1 | ||||
$ fileset 'eol(mac)' | ||||
mac | ||||
FUJIWARA Katsunori
|
r27459 | |||
Test safety of 'encoding' on removed files | ||||
Matt Harbison
|
r27477 | #if symlink | ||
FUJIWARA Katsunori
|
r27459 | $ fileset 'encoding("ascii")' | ||
dos | ||||
mac | ||||
mixed | ||||
.hgsub | ||||
.hgsubstate | ||||
1k | ||||
2k | ||||
b1 | ||||
b2 | ||||
b2link | ||||
bin | ||||
c1 | ||||
Matt Harbison
|
r27477 | #else | ||
$ fileset 'encoding("ascii")' | ||||
dos | ||||
mac | ||||
mixed | ||||
.hgsub | ||||
.hgsubstate | ||||
1k | ||||
2k | ||||
b1 | ||||
b2 | ||||
bin | ||||
c1 | ||||
#endif | ||||
FUJIWARA Katsunori
|
r27464 | |||
Test detection of unintentional 'matchctx.existing()' invocation | ||||
$ cat > $TESTTMP/existingcaller.py <<EOF | ||||
FUJIWARA Katsunori
|
r28447 | > from mercurial import registrar | ||
FUJIWARA Katsunori
|
r27464 | > | ||
FUJIWARA Katsunori
|
r28447 | > filesetpredicate = registrar.filesetpredicate() | ||
> @filesetpredicate('existingcaller()', callexisting=False) | ||||
FUJIWARA Katsunori
|
r27464 | > def existingcaller(mctx, x): | ||
> # this 'mctx.existing()' invocation is unintentional | ||||
> return [f for f in mctx.existing()] | ||||
> EOF | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [extensions] | ||||
> existingcaller = $TESTTMP/existingcaller.py | ||||
> EOF | ||||
$ fileset 'existingcaller()' 2>&1 | tail -1 | ||||
AssertionError: unexpected existing() invocation | ||||