test-sparse.t
422 lines
| 9.3 KiB
| text/troff
|
Tads3Lexer
/ tests / test-sparse.t
|
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 | ||||
|
r33293 | $ hg debugsparse --include 'hide' | ||
|
r33289 | $ ls | ||
hide | ||||
Absolute paths outside the repo should just be rejected | ||||
|
r33337 | #if no-windows | ||
|
r33293 | $ hg debugsparse --include /foo/bar | ||
|
r33646 | abort: paths cannot be absolute | ||
[255] | ||||
|
r33293 | $ hg debugsparse --include '$TESTTMP/myrepo/hide' | ||
|
r33289 | |||
|
r33293 | $ hg debugsparse --include '/root' | ||
|
r33646 | abort: paths cannot be absolute | ||
[255] | ||||
|
r33337 | #else | ||
TODO: See if this can be made to fail the same way as on Unix | ||||
$ hg debugsparse --include /c/foo/bar | ||||
|
r33646 | abort: paths cannot be absolute | ||
|
r33337 | [255] | ||
$ hg debugsparse --include '$TESTTMP/myrepo/hide' | ||||
$ hg debugsparse --include '/c/root' | ||||
|
r33646 | abort: paths cannot be absolute | ||
|
r33337 | [255] | ||
#endif | ||||
|
r33289 | |||
|
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 | ||||
|
r33792 | subdir/path | ||
|
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 | ||||
|
r33792 | subdir/path | ||
|
r33648 | |||
$ rm -rf subdir | ||||
|
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 | ||||
|
r33293 | $ hg debugsparse --reset | ||
|
r33289 | $ ls | ||
hide | ||||
show | ||||
$ cat hide | ||||
z | ||||
$ cat show | ||||
a | ||||
|
r33293 | Verify 'hg debugsparse' default output | ||
|
r33289 | |||
$ hg up -q null | ||||
|
r33293 | $ hg debugsparse --include 'show*' | ||
|
r33289 | |||
|
r33293 | $ hg debugsparse | ||
|
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 | ||||
|
r33293 | (include file with `hg debugsparse --include <pattern>` or use `hg add -s <file>` to include file directory while adding) | ||
|
r33289 | [255] | ||
|
r36218 | But adding a truly excluded file shouldn't count | ||
$ hg add hide3 -X hide3 | ||||
|
r33289 | Verify deleting sparseness while a file has changes fails | ||
|
r33293 | $ hg debugsparse --delete 'show*' | ||
|
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 | ||||
|
r33293 | $ hg debugsparse --delete -f 'show*' | ||
|
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 | ||||
|
r33293 | $ hg debugsparse --include 'show*' | ||
|
r33289 | pending changes to 'hide' | ||
abort: could not update sparseness due to pending changes | ||||
[255] | ||||
Verify adding sparseness hides files | ||||
|
r33293 | $ hg debugsparse --exclude -f 'hide*' | ||
|
r33289 | pending changes to 'hide' | ||
$ ls | ||||
hide | ||||
hide3 | ||||
show | ||||
show2 | ||||
$ hg st | ||||
M show | ||||
$ hg up -qC . | ||||
|
r33496 | TODO: add an option to purge to also purge files outside the sparse config? | ||
|
r33289 | $ hg purge --all --config extensions.purge= | ||
$ ls | ||||
|
r33496 | hide | ||
hide3 | ||||
|
r33289 | show | ||
show2 | ||||
|
r33496 | For now, manually remove the files | ||
$ rm hide hide3 | ||||
|
r33289 | |||
Verify rebase temporarily includes excluded files | ||||
$ hg rebase -d 1 -r 2 --config extensions.rebase= | ||||
rebasing 2:b91df4f39e75 "edit hide" (tip) | ||||
|
r39563 | temporarily included 2 file(s) in the sparse checkout for merging | ||
|
r33289 | merging hide | ||
warning: conflicts while merging hide! (edit, then use 'hg resolve --mark') | ||||
unresolved conflicts (see hg resolve, then hg rebase --continue) | ||||
[1] | ||||
|
r33293 | $ hg debugsparse | ||
|
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 | ||||
|
r39563 | temporarily included 2 file(s) in the sparse checkout for merging | ||
|
r33289 | 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 | ||||
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
|
r33289 | [1] | ||
|
r33293 | $ hg debugsparse | ||
|
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 | ||||
|
r33293 | $ hg debugsparse | ||
|
r33289 | [exclude] | ||
hide* | ||||
Verify strip -k resets dirstate correctly | ||||
$ hg status | ||||
|
r33293 | $ hg debugsparse | ||
|
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 | ||||
|
r35394 | saved backup bundle to $TESTTMP/myrepo/.hg/strip-backup/39278f7c08a9-ce59e002-backup.hg | ||
|
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) | ||||
|
r35394 | saved backup bundle to $TESTTMP/myrepo/.hg/strip-backup/bdde55290160-216ed9c6-rebase.hg | ||
|
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 | ||||
|
r33293 | $ hg debugsparse -I dir1/dir2 | ||
|
r33289 | $ hg status | ||
? dir1/dir2/file | ||||
|
r35760 | Mix files and subdirectories, both "glob:" and unprefixed | ||
$ hg debugsparse --reset | ||||
$ touch dir1/notshown | ||||
$ hg commit -A dir1/notshown -m "notshown" | ||||
$ hg debugsparse --include 'dir1/dir2' | ||||
|
r39743 | $ "$PYTHON" $TESTDIR/list-tree.py . | egrep -v '\.[\/]\.hg' | ||
|
r35760 | ./ | ||
./dir1/ | ||||
./dir1/dir2/ | ||||
./dir1/dir2/file | ||||
./hide.orig | ||||
$ hg debugsparse --delete 'dir1/dir2' | ||||
$ hg debugsparse --include 'glob:dir1/dir2' | ||||
|
r39743 | $ "$PYTHON" $TESTDIR/list-tree.py . | egrep -v '\.[\/]\.hg' | ||
|
r35760 | ./ | ||
./dir1/ | ||||
./dir1/dir2/ | ||||
./dir1/dir2/file | ||||
./hide.orig | ||||
|
r33289 | Test that add -s adds dirs to sparse profile | ||
|
r33293 | $ hg debugsparse --reset | ||
$ hg debugsparse --include empty | ||||
$ hg debugsparse | ||||
|
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 | ||||
|
r33293 | (include file with `hg debugsparse --include <pattern>` or use `hg add -s <file>` to include file directory while adding) | ||
|
r33289 | [255] | ||
$ hg add -s add/foo | ||||
$ hg st | ||||
A add/foo | ||||
? add/bar | ||||
|
r33293 | $ hg debugsparse | ||
|
r33289 | [include] | ||
add | ||||
empty | ||||
$ hg add -s add/* | ||||
add/foo already tracked! | ||||
$ hg st | ||||
A add/bar | ||||
A add/foo | ||||
|
r33293 | $ hg debugsparse | ||
|
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 | ||||
|
r33293 | $ hg debugsparse -X excluded | ||
|
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 | ||||
|
r33293 | $ hg debugsparse -X included | ||
|
r33289 | $ hg debugdirstate | ||
$ cp .hg/dirstate ../dirstateallexcluded | ||||
|
r33293 | $ hg debugsparse --reset | ||
$ hg debugsparse -X excluded | ||||
|
r33289 | $ cp ../dirstateallexcluded .hg/dirstate | ||
$ touch includedadded | ||||
$ hg add includedadded | ||||
|
r39796 | $ hg debugdirstate --no-dates | ||
|
r33289 | a 0 -1 unset includedadded | ||
$ hg debugrebuilddirstate --minimal | ||||
|
r39796 | $ hg debugdirstate --no-dates | ||
|
r33289 | 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 | ||||
|
r33293 | $ hg debugsparse -X excludednomanifest | ||
|
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. | ||||
|
r39796 | $ hg debugdirstate --no-dates | ||
|
r33289 | n 644 0 * excluded (glob) | ||
a 0 -1 * excludednomanifest (glob) | ||||
n 644 0 * included (glob) | ||||
a 0 -1 * includedadded (glob) | ||||
$ hg debugrebuilddirstate --minimal | ||||
|
r39796 | $ hg debugdirstate --no-dates | ||
|
r33289 | n 644 0 * included (glob) | ||
a 0 -1 * includedadded (glob) | ||||