view tests/test-status-committed-and-ignored.t @ 50391:12f13b13f414 stable

revlog: avoid possible collision between directory and temporary index Since 6.4, we create a temporary index file to write the split data without overwriting the inline version too early. However, the store encoding does not prevent these new `.i.s` file to collide with a directory with the same name. While the odds for such a collision to happens are fairly low, the collision would prevent Mercurial from working. The store encoding have a mitigation solution in place to prevent such collisions from happening for `.i` and `.d` files, but not for other extensions. We cannot update this encoding scheme to solve the issue since it would diverge from older version of Mercurial. Instead, we create an alternative directory tree dedicated to such files. The use of the `.i` extension combined with store encoding will prevent collisions there.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 08 Jun 2023 14:28:21 +0200
parents edcc35a4f1dc
children
line wrap: on
line source

#testcases dirstate-v1 dirstate-v2

#if dirstate-v2
  $ cat >> $HGRCPATH << EOF
  > [format]
  > use-dirstate-v2=1
  > [storage]
  > dirstate-v2.slow-path=allow
  > EOF
#endif

  $ rm -rf r

  $ hg init r
  $ cd r
  $ mkdir d1
  $ mkdir d2
  $ touch d1/f d2/f
  $ hg commit -Am '.'
  adding d1/f
  adding d2/f
  $ echo 'syntax:re' >> .hgignore
  $ echo '^d1$' >> .hgignore
  $ hg commit -Am "ignore d1"
  adding .hgignore

Now d1 is a directory that's both committed and ignored.
Untracked files in d2 are still shown, but ones in d1 are ignored:

  $ touch d1/g
  $ touch d2/g
  $ RAYON_NUM_THREADS=1 hg status
  ? d2/g