##// END OF EJS Templates
fileset: add kind:pat operator...
fileset: add kind:pat operator ":" isn't taken as a symbol character but an infix operator so we can write e.g. "path:'foo bar'" as well as "'path:foo bar'". An invalid pattern kind is rejected in the former form as we know a kind is specified explicitly. The binding strength is copied from "x:y" range operator of revset. Perhaps it can be adjusted later if we want to parse "foo:bar()" as "(foo:bar)()", not "foo:(bar())". We can also add "kind:" postfix operator if we want. One possible confusion is that the scope of the leading "set:" vs "kind:pat" operator. The former is consumed by a matcher so applies to the whole fileset expression: $ hg files 'set:foo() or kind:bar or baz' ^^^^^^^^^^^^^^^^^^^^^^^^ Whereas the scope of kind:pat operator is narrow: $ hg files 'set:foo() or kind:bar or baz' ^^^

File last commit:

r35722:41ef02ba default
r35759:73432eee default
Show More
test-sparse.t
397 lines | 8.7 KiB | text/troff | Tads3Lexer
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 test sparse
$ hg init myrepo
$ cd myrepo
$ cat > .hg/hgrc <<EOF
> [extensions]
> sparse=
> strip=
> EOF
$ echo a > show
$ echo x > hide
$ hg ci -Aqm 'initial'
$ echo b > show
$ echo y > hide
$ echo aa > show2
$ echo xx > hide2
$ hg ci -Aqm 'two'
Verify basic --include
$ hg up -q 0
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --include 'hide'
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 $ ls
hide
Absolute paths outside the repo should just be rejected
Matt Harbison
tests: stabilize on Windows...
r33337 #if no-windows
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --include /foo/bar
Kostia Balytskyi
sparse: properly error out when absolute paths are used...
r33646 abort: paths cannot be absolute
[255]
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --include '$TESTTMP/myrepo/hide'
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --include '/root'
Kostia Balytskyi
sparse: properly error out when absolute paths are used...
r33646 abort: paths cannot be absolute
[255]
Matt Harbison
tests: stabilize on Windows...
r33337 #else
TODO: See if this can be made to fail the same way as on Unix
$ hg debugsparse --include /c/foo/bar
Kostia Balytskyi
sparse: properly error out when absolute paths are used...
r33646 abort: paths cannot be absolute
Matt Harbison
tests: stabilize on Windows...
r33337 [255]
$ hg debugsparse --include '$TESTTMP/myrepo/hide'
$ hg debugsparse --include '/c/root'
Kostia Balytskyi
sparse: properly error out when absolute paths are used...
r33646 abort: paths cannot be absolute
Matt Harbison
tests: stabilize on Windows...
r33337 [255]
#endif
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289
Kostia Balytskyi
sparse: treat paths as cwd-relative...
r33648 Paths should be treated as cwd-relative, not repo-root-relative
$ mkdir subdir && cd subdir
$ hg debugsparse --include path
$ hg debugsparse
[include]
$TESTTMP/myrepo/hide
hide
Matt Harbison
test-sparse: drop unnecessary globs
r33792 subdir/path
Kostia Balytskyi
sparse: treat paths as cwd-relative...
r33648
$ cd ..
$ echo hello > subdir/file2.ext
$ cd subdir
$ hg debugsparse --include '**.ext' # let us test globs
$ hg debugsparse --include 'path:abspath' # and a path: pattern
$ cd ..
$ hg debugsparse
[include]
$TESTTMP/myrepo/hide
hide
path:abspath
subdir/**.ext
Matt Harbison
test-sparse: drop unnecessary globs
r33792 subdir/path
Kostia Balytskyi
sparse: treat paths as cwd-relative...
r33648
$ rm -rf subdir
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 Verify commiting while sparse includes other files
$ echo z > hide
$ hg ci -Aqm 'edit hide'
$ ls
hide
$ hg manifest
hide
show
Verify --reset brings files back
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --reset
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 $ ls
hide
show
$ cat hide
z
$ cat show
a
Gregory Szorc
sparse: rename command to debugsparse...
r33293 Verify 'hg debugsparse' default output
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289
$ hg up -q null
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --include 'show*'
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [include]
show*
Verify update only writes included files
$ hg up -q 0
$ ls
show
$ hg up -q 1
$ ls
show
show2
Verify status only shows included files
$ touch hide
$ touch hide3
$ echo c > show
$ hg status
M show
Adding an excluded file should fail
$ hg add hide3
abort: cannot add 'hide3' - it is outside the sparse checkout
Gregory Szorc
sparse: rename command to debugsparse...
r33293 (include file with `hg debugsparse --include <pattern>` or use `hg add -s <file>` to include file directory while adding)
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [255]
Verify deleting sparseness while a file has changes fails
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --delete 'show*'
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 pending changes to 'hide'
abort: cannot change sparseness due to pending changes (delete the files or use --force to bring them back dirty)
[255]
Verify deleting sparseness with --force brings back files
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --delete -f 'show*'
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 pending changes to 'hide'
$ ls
hide
hide2
hide3
show
show2
$ hg st
M hide
M show
? hide3
Verify editing sparseness fails if pending changes
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --include 'show*'
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 pending changes to 'hide'
abort: could not update sparseness due to pending changes
[255]
Verify adding sparseness hides files
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --exclude -f 'hide*'
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 pending changes to 'hide'
$ ls
hide
hide3
show
show2
$ hg st
M show
$ hg up -qC .
Martin von Zweigbergk
sparse: override dirstate.walk() instead of dirstate._ignore...
r33496 TODO: add an option to purge to also purge files outside the sparse config?
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 $ hg purge --all --config extensions.purge=
$ ls
Martin von Zweigbergk
sparse: override dirstate.walk() instead of dirstate._ignore...
r33496 hide
hide3
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 show
show2
Martin von Zweigbergk
sparse: override dirstate.walk() instead of dirstate._ignore...
r33496 For now, manually remove the files
$ rm hide hide3
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289
Verify rebase temporarily includes excluded files
$ hg rebase -d 1 -r 2 --config extensions.rebase=
rebasing 2:b91df4f39e75 "edit hide" (tip)
temporarily included 1 file(s) in the sparse checkout for merging
merging hide
warning: conflicts while merging hide! (edit, then use 'hg resolve --mark')
unresolved conflicts (see hg resolve, then hg rebase --continue)
[1]
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [exclude]
hide*
Temporarily Included Files (for merge/rebase):
hide
$ cat hide
<<<<<<< dest: 39278f7c08a9 - test: two
y
=======
z
>>>>>>> source: b91df4f39e75 - test: edit hide
Verify aborting a rebase cleans up temporary files
$ hg rebase --abort --config extensions.rebase=
cleaned up 1 temporarily added file(s) from the sparse checkout
rebase aborted
$ rm hide.orig
$ ls
show
show2
Verify merge fails if merging excluded files
$ hg up -q 1
$ hg merge -r 2
temporarily included 1 file(s) in the sparse checkout for merging
merging hide
warning: conflicts while merging hide! (edit, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
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
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [1]
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [exclude]
hide*
Temporarily Included Files (for merge/rebase):
hide
$ hg up -C .
cleaned up 1 temporarily added file(s) from the sparse checkout
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [exclude]
hide*
Verify strip -k resets dirstate correctly
$ hg status
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [exclude]
hide*
$ hg log -r . -T '{rev}\n' --stat
1
hide | 2 +-
hide2 | 1 +
show | 2 +-
show2 | 1 +
4 files changed, 4 insertions(+), 2 deletions(-)
$ hg strip -r . -k
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 saved backup bundle to $TESTTMP/myrepo/.hg/strip-backup/39278f7c08a9-ce59e002-backup.hg
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 $ hg status
M show
? show2
Verify rebase succeeds if all changed files are in sparse checkout
$ hg commit -Aqm "add show2"
$ hg rebase -d 1 --config extensions.rebase=
rebasing 2:bdde55290160 "add show2" (tip)
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 saved backup bundle to $TESTTMP/myrepo/.hg/strip-backup/bdde55290160-216ed9c6-rebase.hg
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289
Verify log --sparse only shows commits that affect the sparse checkout
$ hg log -T '{rev} '
2 1 0 (no-eol)
$ hg log --sparse -T '{rev} '
2 0 (no-eol)
Test status on a file in a subdir
$ mkdir -p dir1/dir2
$ touch dir1/dir2/file
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse -I dir1/dir2
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 $ hg status
? dir1/dir2/file
Test that add -s adds dirs to sparse profile
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --reset
$ hg debugsparse --include empty
$ hg debugsparse
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [include]
empty
$ mkdir add
$ touch add/foo
$ touch add/bar
$ hg add add/foo
abort: cannot add 'add/foo' - it is outside the sparse checkout
Gregory Szorc
sparse: rename command to debugsparse...
r33293 (include file with `hg debugsparse --include <pattern>` or use `hg add -s <file>` to include file directory while adding)
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [255]
$ hg add -s add/foo
$ hg st
A add/foo
? add/bar
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [include]
add
empty
$ hg add -s add/*
add/foo already tracked!
$ hg st
A add/bar
A add/foo
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 [include]
add
empty
$ cd ..
Test non-sparse repos work while sparse is loaded
$ hg init sparserepo
$ hg init nonsparserepo
$ cd sparserepo
$ cat > .hg/hgrc <<EOF
> [extensions]
> sparse=
> EOF
$ cd ../nonsparserepo
$ echo x > x && hg add x && hg commit -qAm x
$ cd ../sparserepo
$ hg clone ../nonsparserepo ../nonsparserepo2
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Test debugrebuilddirstate
$ cd ../sparserepo
$ touch included
$ touch excluded
$ hg add included excluded
$ hg commit -m 'a commit' -q
$ cp .hg/dirstate ../dirstateboth
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse -X excluded
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 $ cp ../dirstateboth .hg/dirstate
$ hg debugrebuilddirstate
$ hg debugdirstate
n 0 -1 unset included
Test debugdirstate --minimal where file is in the parent manifest but not the
dirstate
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse -X included
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 $ hg debugdirstate
$ cp .hg/dirstate ../dirstateallexcluded
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse --reset
$ hg debugsparse -X excluded
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 $ cp ../dirstateallexcluded .hg/dirstate
$ touch includedadded
$ hg add includedadded
$ hg debugdirstate --nodates
a 0 -1 unset includedadded
$ hg debugrebuilddirstate --minimal
$ hg debugdirstate --nodates
n 0 -1 unset included
a 0 -1 * includedadded (glob)
Test debugdirstate --minimal where a file is not in parent manifest
but in the dirstate. This should take into account excluded files in the
manifest
$ cp ../dirstateboth .hg/dirstate
$ touch includedadded
$ hg add includedadded
$ touch excludednomanifest
$ hg add excludednomanifest
$ cp .hg/dirstate ../moreexcluded
$ hg forget excludednomanifest
$ rm excludednomanifest
Gregory Szorc
sparse: rename command to debugsparse...
r33293 $ hg debugsparse -X excludednomanifest
Gregory Szorc
sparse: vendor Facebook-developed extension...
r33289 $ cp ../moreexcluded .hg/dirstate
$ hg manifest
excluded
included
We have files in the dirstate that are included and excluded. Some are in the
manifest and some are not.
$ hg debugdirstate --nodates
n 644 0 * excluded (glob)
a 0 -1 * excludednomanifest (glob)
n 644 0 * included (glob)
a 0 -1 * includedadded (glob)
$ hg debugrebuilddirstate --minimal
$ hg debugdirstate --nodates
n 644 0 * included (glob)
a 0 -1 * includedadded (glob)