##// END OF EJS Templates
dirstate-v2: fix edge case where entries aren't sorted...
dirstate-v2: fix edge case where entries aren't sorted See previous commit for more details.

File last commit:

r50444:fc719967 stable
r50444:fc719967 stable
Show More
test-dirstate.t
261 lines | 5.8 KiB | text/troff | Tads3Lexer
Simon Sapin
dirstate: Remove the flat Rust DirstateMap implementation...
r48882 #testcases dirstate-v1 dirstate-v2
Simon Sapin
dirstate-tree: Add a dirstate-v1-tree variant of some tests...
r47900
Simon Sapin
dirstate-v2: Add a variant of some tests, that uses the new format...
r48056 #if dirstate-v2
dirstate-v2: add an option to prevent unintentional slow dirstate-v2...
r49049 $ cat >> $HGRCPATH << EOF
> [format]
dirstate-v2: rename the configuration to enable the format...
r49523 > use-dirstate-v2=1
dirstate-v2: add an option to prevent unintentional slow dirstate-v2...
r49049 > [storage]
> dirstate-v2.slow-path=allow
> EOF
Simon Sapin
dirstate-v2: Add a variant of some tests, that uses the new format...
r48056 #endif
Adrian Buehlmann
tests: combine test-dirstate-future.t...
r11888 ------ Test dirstate._dirs refcounting
Adrian Buehlmann
tests: unify test-dirstatedirs
r11887
$ hg init t
$ cd t
$ mkdir -p a/b/c/d
$ touch a/b/c/d/x
$ touch a/b/c/d/y
$ touch a/b/c/d/z
$ hg ci -Am m
adding a/b/c/d/x
adding a/b/c/d/y
adding a/b/c/d/z
$ hg mv a z
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 moving a/b/c/d/x to z/b/c/d/x
moving a/b/c/d/y to z/b/c/d/y
moving a/b/c/d/z to z/b/c/d/z
Joshua Redstone
dirstate: add dir/file collision test...
r17095
Test name collisions
$ rm z/b/c/d/x
$ mkdir z/b/c/d/x
$ touch z/b/c/d/x/y
$ hg add z/b/c/d/x/y
abort: file 'z/b/c/d/x' in dirstate clashes with 'z/b/c/d/x/y'
[255]
$ rm -rf z/b/c/d
$ touch z/b/c/d
$ hg add z/b/c/d
abort: directory 'z/b/c/d' already in dirstate
[255]
Adrian Buehlmann
tests: combine test-dirstate-future.t...
r11888 $ cd ..
Adrian Buehlmann
tests: unify test-dirstatedirs
r11887
Martin Geisler
tests: added a short description to issue numbers...
r12399 Issue1790: dirstate entry locked into unset if file mtime is set into
the future
Adrian Buehlmann
tests: combine test-dirstate-future.t...
r11888
Prepare test repo:
$ hg init u
$ cd u
$ echo a > a
$ hg add
adding a
$ hg ci -m1
Set mtime of a into the future:
dirstate: push back the future a bit in the test...
r48926 $ touch -t 203101011200 a
Adrian Buehlmann
tests: combine test-dirstate-future.t...
r11888
Status must not set a's entry to unset (issue1790):
$ hg status
$ hg debugstate
dirstate: push back the future a bit in the test...
r48926 n 644 2 2031-01-01 12:00:00 a
Matt Mackall
dirstate: handle large dates and times with masking (issue2608)...
r17733
Test modulo storage/comparison of absurd dates:
Adrian Buehlmann
tests: combine test-dirstate-future.t...
r11888
Jim Hague
tests: AIX can't handle negative date in test-dirstate.t...
r19092 #if no-aix
Matt Mackall
dirstate: handle large dates and times with masking (issue2608)...
r17733 $ touch -t 195001011200 a
$ hg st
$ hg debugstate
n 644 2 2018-01-19 15:14:08 a
Jim Hague
tests: AIX can't handle negative date in test-dirstate.t...
r19092 #endif
Durham Goode
dirstate: add test for exceptions during updates...
r22406
Verify that exceptions during a dirstate change leave the dirstate
coherent (issue4353)
$ cat > ../dirstateexception.py <<EOF
Augie Fackler
tests: update test-dirstate to pass our import checker
r33956 > from mercurial import (
> error,
> extensions,
Augie Fackler
mergestate: split out merge state handling code from main merge module...
r45383 > mergestate as mergestatemod,
Augie Fackler
tests: update test-dirstate to pass our import checker
r33956 > )
Durham Goode
dirstate: add test for exceptions during updates...
r22406 >
Valentin Gatien-Baron
merge: fix race that could cause wrong size in dirstate...
r42656 > def wraprecordupdates(*args):
Martin von Zweigbergk
errors: stop passing non-strings to Abort's constructor...
r46273 > raise error.Abort(b"simulated error while recording dirstateupdates")
Durham Goode
dirstate: add test for exceptions during updates...
r22406 >
> def reposetup(ui, repo):
Augie Fackler
mergestate: split out merge state handling code from main merge module...
r45383 > extensions.wrapfunction(mergestatemod, 'recordupdates',
> wraprecordupdates)
Durham Goode
dirstate: add test for exceptions during updates...
r22406 > EOF
$ hg rm a
$ hg commit -m 'rm a'
$ echo "[extensions]" >> .hg/hgrc
$ echo "dirstateex=../dirstateexception.py" >> .hg/hgrc
$ hg up 0
abort: simulated error while recording dirstateupdates
[255]
$ hg log -r . -T '{rev}\n'
1
$ hg status
? a
Raphaël Gomès
dirstate-v2: fix infinite loop in pure packer...
r49614
#if dirstate-v2
Check that folders that are prefixes of others do not throw the packer into an
infinite loop.
$ cd ..
$ hg init infinite-loop
$ cd infinite-loop
$ mkdir hgext3rd hgext
$ touch hgext3rd/__init__.py hgext/zeroconf.py
$ hg commit -Aqm0
$ hg st -c
C hgext/zeroconf.py
C hgext3rd/__init__.py
$ cd ..
Raphaël Gomès
rhg: fix dirstate-v2 data file removal system...
r50044
Check that the old dirstate data file is removed correctly and the new one is
valid.
$ dirstate_data_files () {
> find .hg -maxdepth 1 -name "dirstate.*"
> }
$ find_dirstate_uuid () {
Raphaël Gomès
test-dirstate: use new `--docket` flag to get the data uuid...
r50048 > hg debugstate --docket | grep uuid | sed 's/.*uuid: \(.*\)/\1/'
Raphaël Gomès
rhg: fix dirstate-v2 data file removal system...
r50044 > }
Arseniy Alekseyev
test-dirstate: actually test the append code path in dirstate v2...
r50096 $ find_dirstate_data_size () {
> hg debugstate --docket | grep 'size of dirstate data' | sed 's/.*size of dirstate data: \(.*\)/\1/'
> }
Raphaël Gomès
rhg: fix dirstate-v2 data file removal system...
r50044 $ dirstate_uuid_has_not_changed () {
Raphaël Gomès
test-dirstate: fix detection of Rust environment variable...
r50051 > # Non-Rust always rewrites the whole dirstate
> if [ $# -eq 1 ] || ([ -n "$HGMODULEPOLICY" ] && [ -z "${HGMODULEPOLICY##*rust*}" ]) || [ -n "$RHG_INSTALLED_AS_HG" ]; then
Raphaël Gomès
rhg: fix dirstate-v2 data file removal system...
r50044 > test $current_uid = $(find_dirstate_uuid)
Raphaël Gomès
test-dirstate: print something when the check is skipped...
r50052 > else
> echo "not testing because using Python implementation"
Raphaël Gomès
rhg: fix dirstate-v2 data file removal system...
r50044 > fi
> }
$ cd ..
$ hg init append-mostly
$ cd append-mostly
$ mkdir dir dir2
$ touch dir/a dir/b dir/c dir/d dir/e dir2/f
$ hg commit -Aqm initial
$ hg st
$ dirstate_data_files | wc -l
*1 (re)
$ current_uid=$(find_dirstate_uuid)
Nothing changes here
$ hg st
$ dirstate_data_files | wc -l
*1 (re)
$ dirstate_uuid_has_not_changed
Raphaël Gomès
test-dirstate: print something when the check is skipped...
r50052 not testing because using Python implementation (no-rust no-rhg !)
Raphaël Gomès
rhg: fix dirstate-v2 data file removal system...
r50044
Trigger an append with a small change
Arseniy Alekseyev
test-dirstate: actually test the append code path in dirstate v2...
r50096 $ current_data_size=$(find_dirstate_data_size)
$ rm dir2/f
Raphaël Gomès
rhg: fix dirstate-v2 data file removal system...
r50044 $ hg st
Arseniy Alekseyev
test-dirstate: actually test the append code path in dirstate v2...
r50096 ! dir2/f
Raphaël Gomès
rhg: fix dirstate-v2 data file removal system...
r50044 $ dirstate_data_files | wc -l
*1 (re)
$ dirstate_uuid_has_not_changed
Raphaël Gomès
test-dirstate: print something when the check is skipped...
r50052 not testing because using Python implementation (no-rust no-rhg !)
Arseniy Alekseyev
test-dirstate: actually test the append code path in dirstate v2...
r50096 $ new_data_size=$(find_dirstate_data_size)
$ [ "$current_data_size" -eq "$new_data_size" ]; echo $?
0 (no-rust no-rhg !)
1 (rust !)
1 (no-rust rhg !)
Raphaël Gomès
rhg: fix dirstate-v2 data file removal system...
r50044
Raphaël Gomès
rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite...
r50049 Unused bytes counter is non-0 when appending
$ touch file
$ hg add file
$ current_uid=$(find_dirstate_uuid)
Trigger a rust/rhg run which updates the unused bytes value
$ hg st
A file
Arseniy Alekseyev
test-dirstate: actually test the append code path in dirstate v2...
r50096 ! dir2/f
Raphaël Gomès
rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite...
r50049 $ dirstate_data_files | wc -l
*1 (re)
$ dirstate_uuid_has_not_changed
Raphaël Gomès
test-dirstate: print something when the check is skipped...
r50052 not testing because using Python implementation (no-rust no-rhg !)
Raphaël Gomès
rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite...
r50049
$ hg debugstate --docket | grep unused
number of unused bytes: 0 (no-rust no-rhg !)
number of unused bytes: [1-9]\d* (re) (rhg no-rust !)
number of unused bytes: [1-9]\d* (re) (rust no-rhg !)
number of unused bytes: [1-9]\d* (re) (rust rhg !)
Raphaël Gomès
rhg: fix dirstate-v2 data file removal system...
r50044 Delete most of the dirstate to trigger a non-append
$ hg rm dir/a dir/b dir/c dir/d
$ dirstate_data_files | wc -l
*1 (re)
$ dirstate_uuid_has_not_changed also-if-python
[1]
Raphaël Gomès
rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite...
r50049 Check that unused bytes counter is reset when creating a new docket
$ hg debugstate --docket | grep unused
Raphaël Gomès
rust-dirstate-v2: fix the unused bytes counter when rewriting the dirstate...
r50050 number of unused bytes: 0
Raphaël Gomès
rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite...
r50049
#endif
dirstate-v2: display a possible issue with transaction...
r50361 Transaction compatibility
-------------------------
The transaction preserves the dirstate.
We should make sure all of it (docket + data) is preserved
#if dirstate-v2
$ hg commit -m 'bli'
#endif
$ hg update --quiet
$ hg revert --all --quiet
$ rm -f a
$ echo foo > foo
$ hg add foo
$ hg commit -m foo
#if dirstate-v2
$ uid=$(find_dirstate_uuid)
$ touch bar
$ while [ uid = $(find_dirstate_uuid) ]; do
> hg add bar;
> hg remove bar;
> done;
$ rm bar
#endif
$ hg rollback
repository tip rolled back to revision 1 (undo commit)
working directory now based on revision 1
$ hg status
A foo
Raphaël Gomès
dirstate-v2: highlight a bug when Python-packed but used in `rhg`...
r50443 $ cd ..
Check dirstate ordering
(e.g. `src/dirstate/` and `src/dirstate.rs` shouldn't cause issues)
$ hg init repro
$ cd repro
$ mkdir src
$ mkdir src/dirstate
$ touch src/dirstate/file1 src/dirstate/file2 src/dirstate.rs
$ touch file1 file2
$ hg commit -Aqm1
$ hg st
$ cd ..