##// END OF EJS Templates
rhg: add resolve_file_args to path_utils.rs...
rhg: add resolve_file_args to path_utils.rs Extracted logic for resolving `FILE ...` arguments from cat.rs into a new function in path_utils.rs. I plan to use this for rhg annotate. I tried to reuse hg::utils::files::canonical_path instead, but that didn't work. For example it reports a InsideDotHg error for any path containing "..".

File last commit:

r51285:47686726 stable
r53438:f33f37ac tip default
Show More
test-fileset.t
1037 lines | 18.7 KiB | text/troff | Tads3Lexer
Patrick Mezard
tests: test filesets with test-fileset.t
r17362 $ fileset() {
Yuya Nishihara
fileset: make debugfileset filter repository files...
r38629 > hg debugfileset --all-files "$@"
Patrick Mezard
tests: test filesets with test-fileset.t
r17362 > }
$ hg init repo
$ cd repo
$ echo a > a1
$ echo a > a2
$ echo b > b1
Patrick Mezard
test-fileset: test file status predicates
r17364 $ echo b > b2
Patrick Mezard
tests: test filesets with test-fileset.t
r17362 $ hg ci -Am addfiles
adding a1
adding a2
adding b1
Patrick Mezard
test-fileset: test file status predicates
r17364 adding b2
Patrick Mezard
tests: test filesets with test-fileset.t
r17362
Test operators and basic patterns
Yuya Nishihara
fileset: pretty print syntax tree in debug output
r25255 $ fileset -v a1
Yuya Nishihara
parser: stabilize output of prettyformat() by using byte-safe repr()...
r34075 (symbol 'a1')
Yuya Nishihara
debugfileset: add option to show matcher representation
r38838 * matcher:
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 <patternmatcher patterns='a1$'>
Patrick Mezard
tests: test filesets with test-fileset.t
r17362 a1
Yuya Nishihara
fileset: pretty print syntax tree in debug output
r25255 $ fileset -v 'a*'
Yuya Nishihara
parser: stabilize output of prettyformat() by using byte-safe repr()...
r34075 (symbol 'a*')
Yuya Nishihara
debugfileset: add option to show matcher representation
r38838 * matcher:
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 <patternmatcher patterns='a[^/]*$'>
Patrick Mezard
tests: test filesets with test-fileset.t
r17362 a1
a2
Yuya Nishihara
fileset: pretty print syntax tree in debug output
r25255 $ fileset -v '"re:a\d"'
Yuya Nishihara
parser: stabilize output of prettyformat() by using byte-safe repr()...
r34075 (string 're:a\\d')
Yuya Nishihara
debugfileset: add option to show matcher representation
r38838 * matcher:
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 <patternmatcher patterns='a\\d'>
Patrick Mezard
tests: test filesets with test-fileset.t
r17362 a1
a2
Yuya Nishihara
fileset: add kind:pat operator...
r35759 $ fileset -v '!re:"a\d"'
(not
(kindpat
(symbol 're')
(string 'a\\d')))
Yuya Nishihara
debugfileset: add option to show matcher representation
r38838 * matcher:
<predicatenmatcher
pred=<not
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 <patternmatcher patterns='a\\d'>>>
Yuya Nishihara
fileset: add kind:pat operator...
r35759 b1
b2
$ fileset -v 'path:a1 or glob:b?'
(or
(kindpat
(symbol 'path')
(symbol 'a1'))
(kindpat
(symbol 'glob')
(symbol 'b?')))
Yuya Nishihara
debugfileset: add option to show matcher representation
r38838 * matcher:
match: sort patterns before compiling them into a regex...
r51285 <patternmatcher patterns='b.$|a1(?:/|$)'>
Yuya Nishihara
fileset: add kind:pat operator...
r35759 a1
b1
b2
Yuya Nishihara
debugfileset: add option to show matcher representation
r38838 $ fileset -v --no-show-matcher 'a1 or a2'
Yuya Nishihara
fileset: pretty print syntax tree in debug output
r25255 (or
Yuya Nishihara
parser: stabilize output of prettyformat() by using byte-safe repr()...
r34075 (symbol 'a1')
(symbol 'a2'))
Patrick Mezard
tests: test filesets with test-fileset.t
r17362 a1
a2
$ fileset 'a1 | a2'
a1
a2
$ fileset 'a* and "*1"'
a1
$ fileset 'a* & "*1"'
a1
$ fileset 'not (r"a*")'
b1
Patrick Mezard
test-fileset: test file status predicates
r17364 b2
Patrick Mezard
tests: test filesets with test-fileset.t
r17362 $ fileset '! ("a*")'
b1
Patrick Mezard
test-fileset: test file status predicates
r17364 b2
Patrick Mezard
fileset: actually implement 'minusset'...
r17363 $ fileset 'a* - a1'
a2
Matt Mackall
fileset: handle underbar in symbols...
r19470 $ fileset 'a_b'
Yuya Nishihara
fileset: handle error of string unescaping
r26233 $ fileset '"\xy"'
Yuya Nishihara
py3: glob out some error messages in test-fileset.t...
r38349 hg: parse error: invalid \x escape* (glob)
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Patrick Mezard
tests: test filesets with test-fileset.t
r17362
Yuya Nishihara
fileset: make it robust for bad function calls...
r35709 Test invalid syntax
$ fileset -v '"added"()'
(func
(string 'added')
None)
hg: parse error: not a symbol
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Yuya Nishihara
fileset: make it robust for bad function calls...
r35709 $ fileset -v '()()'
(func
(group
None)
None)
hg: parse error: not a symbol
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Yuya Nishihara
fileset: do not crash by unary negate operation...
r35710 $ fileset -v -- '-x'
(negate
(symbol 'x'))
hg: parse error: can't use negate operator in this context
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Yuya Nishihara
fileset: do not crash by unary negate operation...
r35710 $ fileset -v -- '-()'
(negate
(group
None))
hg: parse error: can't use negate operator in this context
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Yuya Nishihara
fileset: flatten arguments list...
r38839 $ fileset -p parsed 'a, b, c'
* parsed:
(list
(symbol 'a')
(symbol 'b')
(symbol 'c'))
hg: parse error: can't use a list in this context
Martin von Zweigbergk
help: add quotes to a few commands we point to...
r38846 (see 'hg help "filesets.x or y"')
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Yuya Nishihara
fileset: make it robust for bad function calls...
r35709
Yuya Nishihara
fileset: add kind:pat operator...
r35759 $ fileset '"path":.'
hg: parse error: not a symbol
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Yuya Nishihara
fileset: add kind:pat operator...
r35759 $ fileset 'path:foo bar'
hg: parse error at 9: invalid token
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Yuya Nishihara
fileset: add kind:pat operator...
r35759 $ fileset 'foo:bar:baz'
hg: parse error: not a symbol
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Yuya Nishihara
fileset: add kind:pat operator...
r35759 $ fileset 'foo:bar()'
hg: parse error: pattern must be a string
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Yuya Nishihara
fileset: add kind:pat operator...
r35759 $ fileset 'foo:bar'
hg: parse error: invalid pattern kind: foo
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Yuya Nishihara
fileset: add kind:pat operator...
r35759
Yuya Nishihara
debugfileset: backport --show-stage option from debugrevspec...
r38837 Show parsed tree at stages:
$ fileset -p unknown a
abort: invalid stage name: unknown
[255]
$ fileset -p parsed 'path:a1 or glob:b?'
* parsed:
(or
(kindpat
(symbol 'path')
(symbol 'a1'))
(kindpat
(symbol 'glob')
(symbol 'b?')))
a1
b1
b2
Yuya Nishihara
debugfileset: add option to show matcher representation
r38838 $ fileset -p all -s 'a1 or a2 or (grep("b") & clean())'
Yuya Nishihara
debugfileset: backport --show-stage option from debugrevspec...
r38837 * parsed:
(or
Yuya Nishihara
fileset: flatten 'or' nodes to unnest unionmatchers...
r38840 (symbol 'a1')
(symbol 'a2')
Yuya Nishihara
debugfileset: backport --show-stage option from debugrevspec...
r38837 (group
(and
(func
(symbol 'grep')
(string 'b'))
(func
(symbol 'clean')
None))))
Yuya Nishihara
fileset: add phase to transform parsed tree...
r38862 * analyzed:
(or
(symbol 'a1')
(symbol 'a2')
Yuya Nishihara
fileset: drop 'group' node from tree to be evaluated...
r38863 (and
(func
(symbol 'grep')
(string 'b'))
Yuya Nishihara
fileset: insert hints where status should be computed...
r38915 (withstatus
(func
(symbol 'clean')
None)
(string 'clean'))))
Yuya Nishihara
fileset: add stub for weight-based optimization...
r38865 * optimized:
(or
Yuya Nishihara
fileset: combine union of basic patterns into single matcher...
r38901 (patterns
(symbol 'a1')
(symbol 'a2'))
Yuya Nishihara
fileset: add stub for weight-based optimization...
r38865 (and
Yuya Nishihara
fileset: insert hints where status should be computed...
r38915 (withstatus
(func
(symbol 'clean')
None)
(string 'clean'))
Yuya Nishihara
fileset: add stub for weight-based optimization...
r38865 (func
Yuya Nishihara
fileset: reorder 'and' expression to evaluate basic patterns first...
r38867 (symbol 'grep')
(string 'b'))))
Yuya Nishihara
debugfileset: add option to show matcher representation
r38838 * matcher:
<unionmatcher matchers=[
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 <patternmatcher patterns='a1$|a2$'>,
Yuya Nishihara
debugfileset: add option to show matcher representation
r38838 <intersectionmatcher
Yuya Nishihara
fileset: reorder 'and' expression to evaluate basic patterns first...
r38867 m1=<predicatenmatcher pred=clean>,
m2=<predicatenmatcher pred=grep('b')>>]>
Yuya Nishihara
debugfileset: backport --show-stage option from debugrevspec...
r38837 a1
a2
b1
b2
Yuya Nishihara
fileset: combine union of basic patterns into single matcher...
r38901 Union of basic patterns:
$ fileset -p optimized -s -r. 'a1 or a2 or path:b1'
* optimized:
(patterns
(symbol 'a1')
(symbol 'a2')
(kindpat
(symbol 'path')
(symbol 'b1')))
* matcher:
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 <patternmatcher patterns='a1$|a2$|b1(?:/|$)'>
Yuya Nishihara
fileset: combine union of basic patterns into single matcher...
r38901 a1
a2
b1
Yuya Nishihara
fileset: reorder 'or' expression by weight
r38900 OR expression should be reordered by weight:
$ fileset -p optimized -s -r. 'grep("a") or a1 or grep("b") or b2'
* optimized:
(or
Yuya Nishihara
fileset: combine union of basic patterns into single matcher...
r38901 (patterns
(symbol 'a1')
(symbol 'b2'))
Yuya Nishihara
fileset: reorder 'or' expression by weight
r38900 (func
(symbol 'grep')
(string 'a'))
(func
(symbol 'grep')
(string 'b')))
* matcher:
<unionmatcher matchers=[
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 <patternmatcher patterns='a1$|b2$'>,
Yuya Nishihara
fileset: reorder 'or' expression by weight
r38900 <predicatenmatcher pred=grep('a')>,
<predicatenmatcher pred=grep('b')>]>
a1
a2
b1
b2
Yuya Nishihara
fileset: optimize 'x and not y' to 'x - y'...
r38868 Use differencematcher for 'x and not y':
$ fileset -p optimized -s 'a* and not a1'
* optimized:
(minus
(symbol 'a*')
(symbol 'a1'))
* matcher:
<differencematcher
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 m1=<patternmatcher patterns='a[^/]*$'>,
m2=<patternmatcher patterns='a1$'>>
Yuya Nishihara
fileset: optimize 'x and not y' to 'x - y'...
r38868 a2
$ fileset -p optimized -s '!binary() and a*'
* optimized:
(minus
(symbol 'a*')
(func
(symbol 'binary')
None))
* matcher:
<differencematcher
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 m1=<patternmatcher patterns='a[^/]*$'>,
Yuya Nishihara
fileset: optimize 'x and not y' to 'x - y'...
r38868 m2=<predicatenmatcher pred=binary>>
a1
a2
'x - y' is rewritten to 'x and not y' first so the operands can be reordered:
$ fileset -p analyzed -p optimized -s 'a* - a1'
* analyzed:
(and
(symbol 'a*')
(not
(symbol 'a1')))
* optimized:
(minus
(symbol 'a*')
(symbol 'a1'))
* matcher:
<differencematcher
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 m1=<patternmatcher patterns='a[^/]*$'>,
m2=<patternmatcher patterns='a1$'>>
Yuya Nishihara
fileset: optimize 'x and not y' to 'x - y'...
r38868 a2
$ fileset -p analyzed -p optimized -s 'binary() - a*'
* analyzed:
(and
(func
(symbol 'binary')
None)
(not
(symbol 'a*')))
* optimized:
(and
(not
(symbol 'a*'))
(func
(symbol 'binary')
None))
* matcher:
<intersectionmatcher
m1=<predicatenmatcher
pred=<not
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 <patternmatcher patterns='a[^/]*$'>>>,
Yuya Nishihara
fileset: optimize 'x and not y' to 'x - y'...
r38868 m2=<predicatenmatcher pred=binary>>
Patrick Mezard
test-fileset: test file status predicates
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
fileset: add missing() predicate (issue4925)...
r27024 $ fileset 'missing()'
a1
Patrick Mezard
test-fileset: test file status predicates
r17364 $ fileset 'unknown()'
c3
$ fileset 'ignored()'
.hgignore
c2
$ fileset 'hgignore()'
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 .hgignore
Patrick Mezard
test-fileset: test file status predicates
r17364 a2
b2
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 c2
Patrick Mezard
test-fileset: test file status predicates
r17364 $ fileset 'clean()'
b1
$ fileset 'copied()'
c1
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 Test files status in different revisions
$ hg status -m
M b2
$ fileset -r0 'revs("wdir()", modified())' --traceback
b2
$ hg status -a
A c1
$ fileset -r0 'revs("wdir()", added())'
c1
$ hg status --change 0 -a
A a1
A a2
A b1
A b2
$ hg status -mru
M b2
R a2
? c3
$ fileset -r0 'added() and revs("wdir()", modified() or removed() or unknown())'
Yuya Nishihara
fileset: sort debugfileset output...
r38618 a2
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 b2
$ fileset -r0 'added() or revs("wdir()", added())'
a1
a2
b1
b2
c1
Yuya Nishihara
fileset: insert hints where status should be computed...
r38915 Test insertion of status hints
$ fileset -p optimized 'added()'
* optimized:
(withstatus
(func
(symbol 'added')
None)
(string 'added'))
c1
$ fileset -p optimized 'a* & removed()'
* optimized:
(and
(symbol 'a*')
(withstatus
(func
(symbol 'removed')
None)
(string 'removed')))
a2
$ fileset -p optimized 'a* - removed()'
* optimized:
(minus
(symbol 'a*')
(withstatus
(func
(symbol 'removed')
None)
(string 'removed')))
a1
$ fileset -p analyzed -p optimized '(added() + removed()) - a*'
* analyzed:
(and
(withstatus
(or
(func
(symbol 'added')
None)
(func
(symbol 'removed')
None))
(string 'added removed'))
(not
(symbol 'a*')))
* optimized:
(and
(not
(symbol 'a*'))
(withstatus
(or
(func
(symbol 'added')
None)
(func
(symbol 'removed')
None))
(string 'added removed')))
c1
$ fileset -p optimized 'a* + b* + added() + unknown()'
* optimized:
(withstatus
(or
(patterns
(symbol 'a*')
(symbol 'b*'))
(func
(symbol 'added')
None)
(func
(symbol 'unknown')
None))
(string 'added unknown'))
a1
a2
b1
b2
c1
c3
$ fileset -p analyzed -p optimized 'removed() & missing() & a*'
* analyzed:
(and
(withstatus
(and
(func
(symbol 'removed')
None)
(func
(symbol 'missing')
None))
(string 'removed missing'))
(symbol 'a*'))
* optimized:
(and
(symbol 'a*')
(withstatus
(and
(func
(symbol 'removed')
None)
(func
(symbol 'missing')
None))
(string 'removed missing')))
$ fileset -p optimized 'clean() & revs(0, added())'
* optimized:
(and
(withstatus
(func
(symbol 'clean')
None)
(string 'clean'))
(func
(symbol 'revs')
(list
(symbol '0')
(withstatus
(func
(symbol 'added')
None)
(string 'added')))))
b1
$ fileset -p optimized 'clean() & status(null, 0, b* & added())'
* optimized:
(and
(withstatus
(func
(symbol 'clean')
None)
(string 'clean'))
(func
(symbol 'status')
(list
(symbol 'null')
(symbol '0')
(and
(symbol 'b*')
(withstatus
(func
(symbol 'added')
None)
(string 'added'))))))
b1
Patrick Mezard
fileset: exclude deleted files from matchctx.existing()...
r17365 Test files properties
Pulkit Goyal
py3: suppress the output from .write() calls in few tests...
r38091 >>> open('bin', 'wb').write(b'\0a') and None
Patrick Mezard
fileset: exclude deleted files from matchctx.existing()...
r17365 $ fileset 'binary()'
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 bin
Patrick Mezard
fileset: matchctx.existing() must consider unknown files...
r17366 $ fileset 'binary() and unknown()'
bin
Patrick Mezard
fileset: matchctx.existing() must consider ignored files...
r17367 $ echo '^bin$' >> .hgignore
$ fileset 'binary() and ignored()'
bin
Patrick Mezard
fileset: matchctx.existing() must consider unknown files...
r17366 $ hg add bin
$ fileset 'binary()'
bin
Patrick Mezard
fileset: exclude deleted files from matchctx.existing()...
r17365
Yuya Nishihara
fileset: reorder 'and' expression to evaluate basic patterns first...
r38867 $ fileset -p optimized -s 'binary() and b*'
* optimized:
(and
(symbol 'b*')
(func
(symbol 'binary')
None))
* matcher:
<intersectionmatcher
Martin von Zweigbergk
match: drop unnecessary wrapping of regex in group...
r40818 m1=<patternmatcher patterns='b[^/]*$'>,
Yuya Nishihara
fileset: reorder 'and' expression to evaluate basic patterns first...
r38867 m2=<predicatenmatcher pred=binary>>
bin
Patrick Mezard
fileset: do not traceback on invalid grep pattern
r17368 $ fileset 'grep("b{1}")'
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 .hgignore
Yuya Nishihara
fileset: sort debugfileset output...
r38618 b1
Patrick Mezard
fileset: do not traceback on invalid grep pattern
r17368 b2
c1
$ fileset 'grep("missingparens(")'
Yuya Nishihara
py3: glob out some error messages in test-fileset.t...
r38349 hg: parse error: invalid match pattern: (unbalanced parenthesis|missing \)).* (re)
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Patrick Mezard
fileset: do not traceback on invalid grep pattern
r17368
Patrick Mezard
test-fileset: test remaining predicates...
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
fileset: add a fileset for portable filenames...
r24408 #if no-windows
$ echo foo > con.xml
Siddharth Agarwal
test-fileset.t: remove 'bar ' and 'baz\' from tested filenames...
r24430 $ fileset 'not portable()'
Siddharth Agarwal
fileset: add a fileset for portable filenames...
r24408 con.xml
Siddharth Agarwal
test-fileset.t: remove 'bar ' and 'baz\' from tested filenames...
r24430 $ hg --config ui.portablefilenames=ignore add con.xml
Siddharth Agarwal
fileset: add a fileset for portable filenames...
r24408 #endif
Pulkit Goyal
py3: suppress the output from .write() calls in few tests...
r38091 >>> open('1k', 'wb').write(b' '*1024) and None
>>> open('2k', 'wb').write(b' '*2048) and None
Patrick Mezard
test-fileset: test remaining predicates...
r17369 $ hg add 1k 2k
$ fileset 'size("bar")'
hg: parse error: couldn't parse size: bar
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
timeless
fileset: add hint for list error to use or
r27518 $ fileset '(1k, 2k)'
hg: parse error: can't use a list in this context
Martin von Zweigbergk
help: add quotes to a few commands we point to...
r38846 (see 'hg help "filesets.x or y"')
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Patrick Mezard
test-fileset: test remaining predicates...
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
av6
filesets: ignore unit case in size() predicate for single value...
r25925 $ fileset 'size("1M")'
$ fileset 'size("1 GB")'
Patrick Mezard
test-fileset: test remaining predicates...
r17369
Test merge states
$ hg ci -m manychanges
Matt Harbison
fileset: don't abort when running copied() on a revision with a removed file...
r35968 $ hg file -r . 'set:copied() & modified()'
[1]
Patrick Mezard
test-fileset: test remaining predicates...
r17369 $ 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
simplemerge: move conflict warning message to filemerge...
r26614 warning: conflicts while merging b2! (edit, then use 'hg resolve --mark')
Matt Harbison
test-fileset: glob the updated file count for Windows stability...
r26953 * files updated, 0 files merged, 1 files removed, 1 files unresolved (glob)
Pulkit Goyal
merge: add `--abort` flag which can abort the merge...
r35722 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
Patrick Mezard
test-fileset: test remaining predicates...
r17369 [1]
$ fileset 'resolved()'
$ fileset 'unresolved()'
b2
$ echo e > b2
$ hg resolve -m b2
Pierre-Yves David
resolve: add parenthesis around "no more unresolved files" message...
r21947 (no more unresolved files)
Patrick Mezard
test-fileset: test remaining predicates...
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
convert: support incremental conversion with hg subrepos...
r25558 $ hg init sub2
$ echo b > sub2/b
$ hg -R sub2 ci -Am sub2
adding b
$ echo 'sub2 = sub2' >> .hgsub
Patrick Mezard
test-fileset: test remaining predicates...
r17369 $ fileset 'subrepo()'
$ hg add .hgsub
$ fileset 'subrepo()'
sub
Matt Harbison
convert: support incremental conversion with hg subrepos...
r25558 sub2
Patrick Mezard
test-fileset: test remaining predicates...
r17369 $ fileset 'subrepo("sub")'
sub
$ fileset 'subrepo("glob:*")'
sub
Matt Harbison
convert: support incremental conversion with hg subrepos...
r25558 sub2
Patrick Mezard
debugfileset: implement --rev, more tests
r17370 $ hg ci -m subrepo
Patrick Mezard
test-fileset: test remaining predicates...
r17369
Matt Harbison
convert: support incremental conversion with hg subrepos...
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
test-fileset: remove bashism, use test instead of '[[ ]]'...
r25587 $ [ "$oldnode" != "$newnode" ] || echo "nothing changed"
Matt Harbison
convert: support incremental conversion with hg subrepos...
r25558
Patrick Mezard
debugfileset: implement --rev, more tests
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()'
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 .hgignore
a2
Patrick Mezard
debugfileset: implement --rev, more tests
r17370 b2
bin
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 c2
sub2
Patrick Mezard
debugfileset: implement --rev, more tests
r17370 $ 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
fileset: add a fileset for portable filenames...
r24408 #if no-windows
$ fileset -r1 'not portable()'
con.xml
Matt Harbison
test-fileset: forget non-portable files to avoid failures on Windows...
r24424 $ hg forget 'con.xml'
Siddharth Agarwal
fileset: add a fileset for portable filenames...
r24408 #endif
Patrick Mezard
debugfileset: implement --rev, more tests
r17370 $ fileset -r4 'subrepo("re:su.*")'
sub
Matt Harbison
convert: support incremental conversion with hg subrepos...
r25558 sub2
Yuya Nishihara
fileset: add kind:pat operator...
r35759 $ fileset -r4 'subrepo(re:su.*)'
sub
sub2
Patrick Mezard
debugfileset: implement --rev, more tests
r17370 $ fileset -r4 'subrepo("sub")'
sub
Patrick Mezard
fileset: fix generator vs list bug in fast path...
r17371 $ fileset -r4 'b2 or c1'
b2
c1
Patrick Mezard
debugfileset: implement --rev, more tests
r17370
Pulkit Goyal
py3: suppress the output from .write() calls in few tests...
r38091 >>> open('dos', 'wb').write(b"dos\r\n") and None
>>> open('mixed', 'wb').write(b"dos\r\nunix\n") and None
>>> open('mac', 'wb').write(b"mac\r") and None
Matt Mackall
filesets: add eol predicate
r18842 $ hg add dos mixed mac
FUJIWARA Katsunori
fileset: treat encoding and eol as the predicate calling _existing...
r27459 (remove a1, to examine safety of 'eol' on removed files)
$ rm a1
Matt Mackall
filesets: add eol predicate
r18842 $ fileset 'eol(dos)'
dos
mixed
$ fileset 'eol(unix)'
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 .hgignore
Matt Mackall
filesets: add eol predicate
r18842 .hgsub
.hgsubstate
b1
b2
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 b2.orig
Matt Mackall
filesets: add eol predicate
r18842 c1
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 c2
c3
Yuya Nishihara
test-fileset: make con.xml in output conditionally available
r38772 con.xml (no-windows !)
Yuya Nishihara
fileset: sort debugfileset output...
r38618 mixed
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 unknown
Matt Mackall
filesets: add eol predicate
r18842 $ fileset 'eol(mac)'
mac
FUJIWARA Katsunori
fileset: treat encoding and eol as the predicate calling _existing...
r27459
Test safety of 'encoding' on removed files
$ fileset 'encoding("ascii")'
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 .hgignore
FUJIWARA Katsunori
fileset: treat encoding and eol as the predicate calling _existing...
r27459 .hgsub
.hgsubstate
1k
2k
b1
b2
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 b2.orig
Matt Harbison
test-fileset: eliminate a duplicate test that was conditionalized for output
r31853 b2link (symlink !)
FUJIWARA Katsunori
fileset: treat encoding and eol as the predicate calling _existing...
r27459 bin
c1
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 c2
c3
Yuya Nishihara
test-fileset: make con.xml in output conditionally available
r38772 con.xml (no-windows !)
Yuya Nishihara
fileset: sort debugfileset output...
r38618 dos
mac
mixed
Yuya Nishihara
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)...
r38711 unknown
FUJIWARA Katsunori
fileset: detect unintentional existing() invocation at runtime...
r27464
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 Test 'revs(...)'
================
small reminder of the repository state
$ hg log -G
Matt Harbison
test-fileset: glob away hash differences...
r31852 @ changeset: 4:* (glob)
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 | tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: subrepo
|
Matt Harbison
test-fileset: glob away hash differences...
r31852 o changeset: 3:* (glob)
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 |\ parent: 2:55b05bdebf36
Matt Harbison
test-fileset: glob away hash differences...
r31852 | | parent: 1:* (glob)
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 | | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: merge
| |
| o changeset: 2:55b05bdebf36
| | parent: 0:8a9576c51c1f
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: diverging
| |
Matt Harbison
test-fileset: glob away hash differences...
r31852 o | changeset: 1:* (glob)
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 |/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: manychanges
|
o changeset: 0:8a9576c51c1f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: addfiles
$ hg status --change 0
A a1
A a2
A b1
A b2
$ hg status --change 1
M b2
A 1k
A 2k
Matt Harbison
tests: fix a few `(no-windows !)` conditionals that are really `(symlink !)`...
r43743 A b2link (symlink !)
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 A bin
A c1
Matt Harbison
tests: add per-line output conditionals for Windows
r31830 A con.xml (no-windows !)
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 R a2
$ hg status --change 2
M b2
$ hg status --change 3
M b2
A 1k
A 2k
Matt Harbison
tests: fix a few `(no-windows !)` conditionals that are really `(symlink !)`...
r43743 A b2link (symlink !)
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 A bin
A c1
Matt Harbison
tests: add per-line output conditionals for Windows
r31830 A con.xml (no-windows !)
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 R a2
$ hg status --change 4
A .hgsub
A .hgsubstate
$ hg status
A dos
A mac
A mixed
Matt Harbison
tests: add per-line output conditionals for Windows
r31830 R con.xml (no-windows !)
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 ! a1
? b2.orig
? c3
? unknown
Test files at -r0 should be filtered by files at wdir
-----------------------------------------------------
Yuya Nishihara
fileset: add "tracked()" to explicitly select files in the revision...
r38708 $ fileset -r0 'tracked() and revs("wdir()", tracked())'
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 a1
b1
b2
Test that "revs()" work at all
------------------------------
$ fileset "revs('2', modified())"
b2
Test that "revs()" work for file missing in the working copy/current context
----------------------------------------------------------------------------
(a2 not in working copy)
$ fileset "revs('0', added())"
a1
a2
b1
b2
(none of the file exist in "0")
$ fileset -r 0 "revs('4', added())"
.hgsub
.hgsubstate
Call with empty revset
--------------------------
$ fileset "revs('2-2', modified())"
Call with revset matching multiple revs
---------------------------------------
$ fileset "revs('0+4', added())"
Yuya Nishihara
fileset: sort debugfileset output...
r38618 .hgsub
.hgsubstate
Pierre-Yves David
fileset: add revs(revs, fileset) to evaluate set in working directory...
r31193 a1
a2
b1
b2
overlapping set
$ fileset "revs('1+2', modified())"
b2
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195
test 'status(...)'
=================
Simple case
-----------
$ fileset "status(3, 4, added())"
.hgsub
.hgsubstate
use rev to restrict matched file
-----------------------------------------
$ hg status --removed --rev 0 --rev 1
R a2
$ fileset "status(0, 1, removed())"
a2
Yuya Nishihara
fileset: add "tracked()" to explicitly select files in the revision...
r38708 $ fileset "tracked() and status(0, 1, removed())"
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195 $ fileset -r 4 "status(0, 1, removed())"
a2
Yuya Nishihara
fileset: add "tracked()" to explicitly select files in the revision...
r38708 $ fileset -r 4 "tracked() and status(0, 1, removed())"
$ fileset "revs('4', tracked() and status(0, 1, removed()))"
$ fileset "revs('0', tracked() and status(0, 1, removed()))"
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195 a2
check wdir()
------------
$ hg status --removed --rev 4
Matt Harbison
tests: add per-line output conditionals for Windows
r31830 R con.xml (no-windows !)
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195 $ fileset "status(4, 'wdir()', removed())"
Matt Harbison
tests: add per-line output conditionals for Windows
r31830 con.xml (no-windows !)
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195
$ hg status --removed --rev 2
R a2
$ fileset "status('2', 'wdir()', removed())"
a2
test backward status
--------------------
$ hg status --removed --rev 0 --rev 4
R a2
$ hg status --added --rev 4 --rev 0
A a2
$ fileset "status(4, 0, added())"
a2
test cross branch status
------------------------
$ hg status --added --rev 1 --rev 2
A a2
$ fileset "status(1, 2, added())"
a2
test with multi revs revset
---------------------------
$ hg status --added --rev 0:1 --rev 3:4
A .hgsub
A .hgsubstate
A 1k
A 2k
Matt Harbison
tests: fix a few `(no-windows !)` conditionals that are really `(symlink !)`...
r43743 A b2link (symlink !)
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195 A bin
A c1
Matt Harbison
tests: add per-line output conditionals for Windows
r31830 A con.xml (no-windows !)
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195 $ fileset "status('0:1', '3:4', added())"
.hgsub
.hgsubstate
1k
2k
Matt Harbison
tests: fix a few `(no-windows !)` conditionals that are really `(symlink !)`...
r43743 b2link (symlink !)
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195 bin
c1
Matt Harbison
tests: add per-line output conditionals for Windows
r31830 con.xml (no-windows !)
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195
tests with empty value
----------------------
Fully empty revset
$ fileset "status('', '4', added())"
hg: parse error: first argument to status must be a revision
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195 $ fileset "status('2', '', added())"
hg: parse error: second argument to status must be a revision
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195
Empty revset will error at the revset layer
$ fileset "status(' ', '4', added())"
hg: parse error at 1: not a prefix: end
Ryan McElroy
revsetlang: add a hint for more useful parse errors...
r36703 (
^ here)
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]
Pierre-Yves David
fileset: add a 'status(...)' predicate to control evaluation context...
r31195 $ fileset "status('2', ' ', added())"
hg: parse error at 1: not a prefix: end
Ryan McElroy
revsetlang: add a hint for more useful parse errors...
r36703 (
^ here)
Martin von Zweigbergk
errors: use exit code 10 for parse errors...
r46507 [10]