Mercurial > hg
annotate tests/test-dirstate-version-fallback.t @ 51181:dcaa2df1f688
changelog: never inline changelog
The test suite mostly use small repositories, that implies that most changelog in the
tests are inlined. As a result, non-inlined changelog are quite poorly tested.
Since non-inline changelog are most common case for serious repositories, this
lack of testing is a significant problem that results in high profile issue like
the one recently fixed by 66417f55ea33 and 849745d7da89.
Inlining the changelog does not bring much to the table, the number of total
file saved is negligible, and the changelog will be read by most operation
anyway.
So this changeset is make it so we never inline the changelog, and de-inline the
one that are still inlined whenever we touch them.
By doing that, we remove the "dual code path" situation for writing new entry to
the changelog and move to a "single code path" situation. Having a single
code path simplify the code and make sure it is covered by test (if test cover
that situation obviously)
This impact all tests that care about the number of file and the exchange size,
but there is nothing too complicated in them just a lot of churn.
The churn is made "worse" by the fact rust will use the persistent nodemap on
any changelog now. Which is overall a win as it means testing the persistent
nodemap more and having less special cases.
In short, having inline changelog is mostly useless and an endless source of
pain. We get rid of it.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 11 Dec 2023 22:27:59 +0100 |
parents | 7e5be4a7cda7 |
children |
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 |
50667
e7a3611181aa
test-dirstate-version-fallback: future-proof the test for a different default
Raphaël Gomès <rgomes@octobus.net>
parents:
50660
diff
changeset
|
4 > [format] |
e7a3611181aa
test-dirstate-version-fallback: future-proof the test for a different default
Raphaël Gomès <rgomes@octobus.net>
parents:
50660
diff
changeset
|
5 > use-dirstate-v2=no |
50659
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
6 > EOF |
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 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
|
9 |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
10 $ hg init repo |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
11 $ cd repo |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
12 $ echo a > a |
50723
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
13 $ touch file-with-somewhat-long-name-to-make-dirstate-v1-bigger-than-v2 |
bfbd84c57bda
dirstate-v2: actually fix the dirstate-v2 upgrade race
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50686
diff
changeset
|
14 $ hg commit -Aqm a |
50659
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
15 $ 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
|
16 [1] |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
17 $ 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
|
18 .hg/dirstate |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
19 |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
20 Copy v1 dirstate |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
21 $ 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
|
22 |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
23 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
|
24 |
50725
7e5be4a7cda7
tests: use grep -E instead of obsolescent egrep
Mads Kiilerich <mads@kiilerich.com>
parents:
50723
diff
changeset
|
25 $ hg debugupgraderepo -q --config format.use-dirstate-v2=1 --run | grep -E 'added:|removed:' |
50659
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
26 added: dirstate-v2 |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
27 $ 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
|
28 dirstate-v2 |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
29 $ 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
|
30 .hg/dirstate |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
31 .hg/dirstate.* (glob) |
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 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
|
34 |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
35 $ rm .hg/dirstate* |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
36 $ 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
|
37 |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
38 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
|
39 $ hg st |
9e08cfbe77b1
dirstate: add test showing dirstate version mismatch causes an error
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
40 $ 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
|
41 .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
|
42 .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
|
43 |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50659
diff
changeset
|
44 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
|
45 $ 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
|
46 |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50659
diff
changeset
|
47 $ hg st |
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50659
diff
changeset
|
48 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
|
49 (falling back to dirstate-v1 from v2 also failed) (no-rhg !) |
50686
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50667
diff
changeset
|
50 abort: Too little data for dirstate: 16 bytes. (rhg !) |
50660
bf16ef96defe
rust-dirstate: fall back to v1 if reading v2 failed
Raphaël Gomès <rgomes@octobus.net>
parents:
50659
diff
changeset
|
51 [255] |