annotate tests/test-dirstate-version-fallback.t @ 50660:bf16ef96defe stable

rust-dirstate: fall back to v1 if reading v2 failed This will help us not fail when a v1 dirstate is present on disk while a v2 was expected (which could happen with a racy/interrupted upgrade).
author Raphaël Gomès <rgomes@octobus.net>
date Mon, 05 Jun 2023 16:43:27 +0200
parents 9e08cfbe77b1
children e7a3611181aa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50659
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
1 $ cat >> $HGRCPATH << EOF
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
2 > [storage]
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
3 > dirstate-v2.slow-path=allow
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
4 > EOF
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
5
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
6 Set up a v1 repo
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
7
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
8 $ hg init repo
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
9 $ cd repo
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
10 $ echo a > a
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
11 $ hg add a
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
12 $ hg commit -m a
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
13 $ hg debugrequires | grep dirstate
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
14 [1]
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
15 $ ls -1 .hg/dirstate*
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
16 .hg/dirstate
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
17
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
18 Copy v1 dirstate
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
19 $ cp .hg/dirstate $TESTTMP/dirstate-v1-backup
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
20
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
21 Upgrade it to v2
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
22
50660
bf16ef96defe rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents: 50659
diff changeset
23 $ hg debugupgraderepo -q --config format.use-dirstate-v2=1 --run | egrep 'added:|removed:'
50659
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
24 added: dirstate-v2
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
25 $ hg debugrequires | grep dirstate
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
26 dirstate-v2
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
27 $ ls -1 .hg/dirstate*
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
28 .hg/dirstate
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
29 .hg/dirstate.* (glob)
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
30
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
31 Manually reset to dirstate v1 to simulate an incomplete dirstate-v2 upgrade
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
32
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
33 $ rm .hg/dirstate*
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
34 $ cp $TESTTMP/dirstate-v1-backup .hg/dirstate
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
35
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
36 There should be no errors, but a v2 dirstate should be written back to disk
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
37 $ hg st
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
38 $ ls -1 .hg/dirstate*
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
39 .hg/dirstate
50660
bf16ef96defe rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents: 50659
diff changeset
40 .hg/dirstate.* (glob)
bf16ef96defe rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents: 50659
diff changeset
41
bf16ef96defe rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents: 50659
diff changeset
42 Corrupt the dirstate to see how the errors show up to the user
bf16ef96defe rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents: 50659
diff changeset
43 $ echo "I ate your data" > .hg/dirstate
50659
9e08cfbe77b1 dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
44
50660
bf16ef96defe rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents: 50659
diff changeset
45 $ hg st
bf16ef96defe rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents: 50659
diff changeset
46 abort: working directory state appears damaged! (no-rhg !)
bf16ef96defe rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents: 50659
diff changeset
47 (falling back to dirstate-v1 from v2 also failed) (no-rhg !)
bf16ef96defe rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents: 50659
diff changeset
48 abort: Too little data for dirstate. (rhg !)
bf16ef96defe rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents: 50659
diff changeset
49 [255]