tests/test-dirstate.t
author Manuel Jacob <me@manueljacob.de>
Thu, 15 Sep 2022 01:48:38 +0200
changeset 49494 c96ed4029fda
parent 49467 0705afae6253
child 49548 e255a5355971
permissions -rw-r--r--
templates: add filter to reverse list The filter supports only lists because for lists, it’s straightforward to implement. Reversing text doesn’t seem very useful and is hard to implement. Reversing the bytes would break multi-bytes encodings. Reversing the code points would break characters consisting of multiple code points. Reversing graphemes is non-trivial without using a library not included in the standard library.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48068
bf8837e3d7ce dirstate: Remove the flat Rust DirstateMap implementation
Simon Sapin <simon.sapin@octobus.net>
parents: 47281
diff changeset
     1
#testcases dirstate-v1 dirstate-v2
47129
93eb6c8035a9 dirstate-tree: Add a dirstate-v1-tree variant of some tests
Simon Sapin <simon.sapin@octobus.net>
parents: 45681
diff changeset
     2
47281
6763913fa175 dirstate-v2: Add a variant of some tests, that uses the new format
Simon Sapin <simon.sapin@octobus.net>
parents: 47129
diff changeset
     3
#if dirstate-v2
48235
5c567aca080d dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48223
diff changeset
     4
  $ cat >> $HGRCPATH << EOF
5c567aca080d dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48223
diff changeset
     5
  > [format]
48674
f7086f6173f8 dirstate-v2: rename the configuration to enable the format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48295
diff changeset
     6
  > use-dirstate-v2=1
48235
5c567aca080d dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48223
diff changeset
     7
  > [storage]
5c567aca080d dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48223
diff changeset
     8
  > dirstate-v2.slow-path=allow
5c567aca080d dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48223
diff changeset
     9
  > EOF
47281
6763913fa175 dirstate-v2: Add a variant of some tests, that uses the new format
Simon Sapin <simon.sapin@octobus.net>
parents: 47129
diff changeset
    10
#endif
6763913fa175 dirstate-v2: Add a variant of some tests, that uses the new format
Simon Sapin <simon.sapin@octobus.net>
parents: 47129
diff changeset
    11
11888
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    12
------ Test dirstate._dirs refcounting
7096
6dab29f6df37 dirstate._dirs: fix refcounting broken by 7dfac37cfabf
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    13
11887
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    14
  $ hg init t
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    15
  $ cd t
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    16
  $ mkdir -p a/b/c/d
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    17
  $ touch a/b/c/d/x
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    18
  $ touch a/b/c/d/y
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    19
  $ touch a/b/c/d/z
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    20
  $ hg ci -Am m
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    21
  adding a/b/c/d/x
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    22
  adding a/b/c/d/y
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    23
  adding a/b/c/d/z
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    24
  $ hg mv a z
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 33954
diff changeset
    25
  moving a/b/c/d/x to z/b/c/d/x
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 33954
diff changeset
    26
  moving a/b/c/d/y to z/b/c/d/y
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 33954
diff changeset
    27
  moving a/b/c/d/z to z/b/c/d/z
17095
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    28
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    29
Test name collisions
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    30
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    31
  $ rm z/b/c/d/x
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    32
  $ mkdir z/b/c/d/x
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    33
  $ touch z/b/c/d/x/y
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    34
  $ hg add z/b/c/d/x/y
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    35
  abort: file 'z/b/c/d/x' in dirstate clashes with 'z/b/c/d/x/y'
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    36
  [255]
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    37
  $ rm -rf z/b/c/d
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    38
  $ touch z/b/c/d
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    39
  $ hg add z/b/c/d
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    40
  abort: directory 'z/b/c/d' already in dirstate
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    41
  [255]
45cf6a91a02d dirstate: add dir/file collision test
Joshua Redstone <joshua.redstone@fb.com>
parents: 15447
diff changeset
    42
11888
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    43
  $ cd ..
11887
76818b28ce98 tests: unify test-dirstatedirs
Adrian Buehlmann <adrian@cadifra.com>
parents: 7096
diff changeset
    44
12399
4fee1fd3de9a tests: added a short description to issue numbers
Martin Geisler <mg@aragost.com>
parents: 11888
diff changeset
    45
Issue1790: dirstate entry locked into unset if file mtime is set into
4fee1fd3de9a tests: added a short description to issue numbers
Martin Geisler <mg@aragost.com>
parents: 11888
diff changeset
    46
the future
11888
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    47
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    48
Prepare test repo:
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    49
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    50
  $ hg init u
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    51
  $ cd u
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    52
  $ echo a > a
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    53
  $ hg add
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    54
  adding a
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    55
  $ hg ci -m1
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    56
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    57
Set mtime of a into the future:
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    58
48114
73bcfde21fc2 dirstate: push back the future a bit in the test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
    59
  $ touch -t 203101011200 a
11888
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    60
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    61
Status must not set a's entry to unset (issue1790):
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    62
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    63
  $ hg status
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    64
  $ hg debugstate
48114
73bcfde21fc2 dirstate: push back the future a bit in the test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
    65
  n 644          2 2031-01-01 12:00:00 a
17733
3c775c5a6c03 dirstate: handle large dates and times with masking (issue2608)
Matt Mackall <mpm@selenic.com>
parents: 17095
diff changeset
    66
3c775c5a6c03 dirstate: handle large dates and times with masking (issue2608)
Matt Mackall <mpm@selenic.com>
parents: 17095
diff changeset
    67
Test modulo storage/comparison of absurd dates:
11888
2bd699886ffc tests: combine test-dirstate-future.t
Adrian Buehlmann <adrian@cadifra.com>
parents: 11887
diff changeset
    68
19092
8c560ad1cdc4 tests: AIX can't handle negative date in test-dirstate.t
Jim Hague <jim.hague@acm.org>
parents: 17737
diff changeset
    69
#if no-aix
17733
3c775c5a6c03 dirstate: handle large dates and times with masking (issue2608)
Matt Mackall <mpm@selenic.com>
parents: 17095
diff changeset
    70
  $ touch -t 195001011200 a
3c775c5a6c03 dirstate: handle large dates and times with masking (issue2608)
Matt Mackall <mpm@selenic.com>
parents: 17095
diff changeset
    71
  $ hg st
3c775c5a6c03 dirstate: handle large dates and times with masking (issue2608)
Matt Mackall <mpm@selenic.com>
parents: 17095
diff changeset
    72
  $ hg debugstate
3c775c5a6c03 dirstate: handle large dates and times with masking (issue2608)
Matt Mackall <mpm@selenic.com>
parents: 17095
diff changeset
    73
  n 644          2 2018-01-19 15:14:08 a
19092
8c560ad1cdc4 tests: AIX can't handle negative date in test-dirstate.t
Jim Hague <jim.hague@acm.org>
parents: 17737
diff changeset
    74
#endif
22406
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    75
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    76
Verify that exceptions during a dirstate change leave the dirstate
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    77
coherent (issue4353)
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    78
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    79
  $ cat > ../dirstateexception.py <<EOF
33954
b9765319880e tests: update test-dirstate to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 26587
diff changeset
    80
  > from mercurial import (
b9765319880e tests: update test-dirstate to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 26587
diff changeset
    81
  >   error,
b9765319880e tests: update test-dirstate to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 26587
diff changeset
    82
  >   extensions,
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 42456
diff changeset
    83
  >   mergestate as mergestatemod,
33954
b9765319880e tests: update test-dirstate to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 26587
diff changeset
    84
  > )
22406
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    85
  > 
42456
87a34c767384 merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 35393
diff changeset
    86
  > def wraprecordupdates(*args):
45681
a736ab681b78 errors: stop passing non-strings to Abort's constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 44856
diff changeset
    87
  >     raise error.Abort(b"simulated error while recording dirstateupdates")
22406
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    88
  > 
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    89
  > def reposetup(ui, repo):
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 42456
diff changeset
    90
  >     extensions.wrapfunction(mergestatemod, 'recordupdates',
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 42456
diff changeset
    91
  >                             wraprecordupdates)
22406
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    92
  > EOF
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    93
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    94
  $ hg rm a
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    95
  $ hg commit -m 'rm a'
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    96
  $ echo "[extensions]" >> .hg/hgrc
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    97
  $ echo "dirstateex=../dirstateexception.py" >> .hg/hgrc
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    98
  $ hg up 0
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
    99
  abort: simulated error while recording dirstateupdates
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
   100
  [255]
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
   101
  $ hg log -r . -T '{rev}\n'
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
   102
  1
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
   103
  $ hg status
2e47e461d2ca dirstate: add test for exceptions during updates
Durham Goode <durham@fb.com>
parents: 19092
diff changeset
   104
  ? a
48741
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   105
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   106
#if dirstate-v2
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   107
Check that folders that are prefixes of others do not throw the packer into an
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   108
infinite loop.
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   109
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   110
  $ cd ..
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   111
  $ hg init infinite-loop
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   112
  $ cd infinite-loop
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   113
  $ mkdir hgext3rd hgext
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   114
  $ touch hgext3rd/__init__.py hgext/zeroconf.py
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   115
  $ hg commit -Aqm0
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   116
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   117
  $ hg st -c
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   118
  C hgext/zeroconf.py
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   119
  C hgext3rd/__init__.py
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   120
46d12f7762e4 dirstate-v2: fix infinite loop in pure packer
Raphaël Gomès <rgomes@octobus.net>
parents: 48674
diff changeset
   121
  $ cd ..
49150
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   122
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   123
Check that the old dirstate data file is removed correctly and the new one is
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   124
valid.
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   125
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   126
  $ dirstate_data_files () {
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   127
  >   find .hg -maxdepth 1 -name "dirstate.*"
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   128
  > }
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   129
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   130
  $ find_dirstate_uuid () {
49154
51262af89efe test-dirstate: use new `--docket` flag to get the data uuid
Raphaël Gomès <rgomes@octobus.net>
parents: 49150
diff changeset
   131
  >   hg debugstate --docket | grep uuid | sed 's/.*uuid: \(.*\)/\1/'
49150
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   132
  > }
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   133
49201
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   134
  $ find_dirstate_data_size () {
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   135
  >   hg debugstate --docket | grep 'size of dirstate data' | sed 's/.*size of dirstate data: \(.*\)/\1/'
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   136
  > }
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   137
49150
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   138
  $ dirstate_uuid_has_not_changed () {
49157
5d610521a285 test-dirstate: fix detection of Rust environment variable
Raphaël Gomès <rgomes@octobus.net>
parents: 49156
diff changeset
   139
  >   # Non-Rust always rewrites the whole dirstate
5d610521a285 test-dirstate: fix detection of Rust environment variable
Raphaël Gomès <rgomes@octobus.net>
parents: 49156
diff changeset
   140
  >   if [ $# -eq 1 ] || ([ -n "$HGMODULEPOLICY" ] && [ -z "${HGMODULEPOLICY##*rust*}" ]) || [ -n "$RHG_INSTALLED_AS_HG" ]; then
49150
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   141
  >     test $current_uid = $(find_dirstate_uuid)
49158
682b0ac92c0b test-dirstate: print something when the check is skipped
Raphaël Gomès <rgomes@octobus.net>
parents: 49157
diff changeset
   142
  >   else
682b0ac92c0b test-dirstate: print something when the check is skipped
Raphaël Gomès <rgomes@octobus.net>
parents: 49157
diff changeset
   143
  >     echo "not testing because using Python implementation"
49150
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   144
  >   fi
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   145
  > }
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   146
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   147
  $ cd ..
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   148
  $ hg init append-mostly
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   149
  $ cd append-mostly
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   150
  $ mkdir dir dir2
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   151
  $ touch dir/a dir/b dir/c dir/d dir/e dir2/f
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   152
  $ hg commit -Aqm initial
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   153
  $ hg st
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   154
  $ dirstate_data_files | wc -l
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   155
   *1 (re)
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   156
  $ current_uid=$(find_dirstate_uuid)
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   157
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   158
Nothing changes here
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   159
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   160
  $ hg st
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   161
  $ dirstate_data_files | wc -l
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   162
   *1 (re)
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   163
  $ dirstate_uuid_has_not_changed
49158
682b0ac92c0b test-dirstate: print something when the check is skipped
Raphaël Gomès <rgomes@octobus.net>
parents: 49157
diff changeset
   164
  not testing because using Python implementation (no-rust no-rhg !)
49150
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   165
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   166
Trigger an append with a small change
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   167
49201
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   168
  $ current_data_size=$(find_dirstate_data_size)
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   169
  $ rm dir2/f
49150
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   170
  $ hg st
49201
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   171
  ! dir2/f
49150
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   172
  $ dirstate_data_files | wc -l
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   173
   *1 (re)
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   174
  $ dirstate_uuid_has_not_changed
49158
682b0ac92c0b test-dirstate: print something when the check is skipped
Raphaël Gomès <rgomes@octobus.net>
parents: 49157
diff changeset
   175
  not testing because using Python implementation (no-rust no-rhg !)
49201
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   176
  $ new_data_size=$(find_dirstate_data_size)
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   177
  $ [ "$current_data_size" -eq "$new_data_size" ]; echo $?
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   178
  0 (no-rust no-rhg !)
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   179
  1 (rust !)
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   180
  1 (no-rust rhg !)
49150
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   181
49155
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   182
Unused bytes counter is non-0 when appending
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   183
  $ touch file
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   184
  $ hg add file
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   185
  $ current_uid=$(find_dirstate_uuid)
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   186
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   187
Trigger a rust/rhg run which updates the unused bytes value
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   188
  $ hg st
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   189
  A file
49201
c29e79d11b01 test-dirstate: actually test the append code path in dirstate v2
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49158
diff changeset
   190
  ! dir2/f
49155
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   191
  $ dirstate_data_files | wc -l
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   192
   *1 (re)
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   193
  $ dirstate_uuid_has_not_changed
49158
682b0ac92c0b test-dirstate: print something when the check is skipped
Raphaël Gomès <rgomes@octobus.net>
parents: 49157
diff changeset
   194
  not testing because using Python implementation (no-rust no-rhg !)
49155
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   195
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   196
  $ hg debugstate --docket | grep unused
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   197
  number of unused bytes: 0 (no-rust no-rhg !)
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   198
  number of unused bytes: [1-9]\d* (re) (rhg no-rust !)
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   199
  number of unused bytes: [1-9]\d* (re) (rust no-rhg !)
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   200
  number of unused bytes: [1-9]\d* (re) (rust rhg !)
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   201
49150
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   202
Delete most of the dirstate to trigger a non-append
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   203
  $ hg rm dir/a dir/b dir/c dir/d
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   204
  $ dirstate_data_files | wc -l
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   205
   *1 (re)
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   206
  $ dirstate_uuid_has_not_changed also-if-python
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   207
  [1]
f2ef6a4f918f rhg: fix dirstate-v2 data file removal system
Raphaël Gomès <rgomes@octobus.net>
parents: 48773
diff changeset
   208
49155
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   209
Check that unused bytes counter is reset when creating a new docket
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   210
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   211
  $ hg debugstate --docket | grep unused
49156
09984dc70352 rust-dirstate-v2: fix the unused bytes counter when rewriting the dirstate
Raphaël Gomès <rgomes@octobus.net>
parents: 49155
diff changeset
   212
  number of unused bytes: 0
49155
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   213
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   214
#endif
c69adc82e7f7 rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
Raphaël Gomès <rgomes@octobus.net>
parents: 49154
diff changeset
   215
49466
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   216
Transaction compatibility
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   217
-------------------------
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   218
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   219
The transaction preserves the dirstate.
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   220
We should make sure all of it (docket + data) is preserved
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   221
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   222
#if dirstate-v2
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   223
  $ hg commit -m 'bli'
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   224
#endif
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   225
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   226
  $ hg update --quiet
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   227
  $ hg revert --all --quiet
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   228
  $ rm -f a
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   229
  $ echo foo > foo
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   230
  $ hg add foo
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   231
  $ hg commit -m foo
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   232
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   233
#if dirstate-v2
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   234
  $ uid=$(find_dirstate_uuid)
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   235
  $ touch bar
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   236
  $ while [ uid = $(find_dirstate_uuid) ]; do
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   237
  >    hg add bar;
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   238
  >    hg remove bar;
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   239
  > done;
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   240
  $ rm bar
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   241
#endif
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   242
  $ hg rollback
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   243
  repository tip rolled back to revision 1 (undo commit)
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   244
  working directory now based on revision 1
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   245
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   246
  $ hg status
486b8a383100 dirstate-v2: display a possible issue with transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49465
diff changeset
   247
  A foo