tests/test-dirstate-race2.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Fri, 01 Oct 2021 23:13:44 +0200
changeset 48140 a8ff00ad290b
parent 48083 bf8837e3d7ce
child 48235 b4f83c9e7905
permissions -rw-r--r--
dirstatemap: add a common `_insert_entry` method for dirstatemap This method is called to add a new DirstateItem to the map. Each variant have a different implementation (which is … the point). Differential Revision: https://phab.mercurial-scm.org/D11573

#testcases dirstate-v1 dirstate-v2

#if dirstate-v2
#require rust
  $ echo '[format]' >> $HGRCPATH
  $ echo 'exp-dirstate-v2=1' >> $HGRCPATH
#endif

Checking the size/permissions/file-type of files stored in the
dirstate after an update where the files are changed concurrently
outside of hg's control.

  $ hg init repo
  $ cd repo
  $ echo a > a
  $ hg commit -qAm _
  $ echo aa > a
  $ hg commit -m _

  $ hg debugdirstate --no-dates
  n 644          3 (set  |unset)               a (re)

  $ cat >> $TESTTMP/dirstaterace.py << EOF
  > from mercurial import (
  >     extensions,
  >     merge,
  > )
  > def extsetup(ui):
  >     extensions.wrapfunction(merge, 'applyupdates', wrap)
  > def wrap(orig, *args, **kwargs):
  >     res = orig(*args, **kwargs)
  >     with open("a", "w"):
  >         pass # just truncate the file
  >     return res
  > EOF

Do an update where file 'a' is changed between hg writing it to disk
and hg writing the dirstate. The dirstate is correct nonetheless, and
so hg status correctly shows a as clean.

  $ hg up -r 0 --config extensions.race=$TESTTMP/dirstaterace.py
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg debugdirstate --no-dates
  n 644          2 (set  |unset)               a (re)
  $ echo a > a; hg status; hg diff