tests/test-dirstate-version-fallback.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Fri, 05 Apr 2024 12:02:43 +0200
changeset 51581 e0194b3ea312
parent 50725 7e5be4a7cda7
permissions -rw-r--r--
phases: use revision number in analyze_remote_phases Same logic as the previous change to `new_heads`, see rationnal there. This avoids a small number of `nodes -> revs` conversion speeding thing up in the 100 milliseconds order of magnitude for the worses cases. However, the rest of the logic is noisy enough that it hardly matters for now.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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]