Mercurial > hg-stable
view tests/test-merge-revert2.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 | 55c6ebd11cb9 |
children |
line wrap: on
line source
$ hg init repo $ cd repo $ echo "added file1" > file1 $ echo "another line of text" >> file1 $ echo "added file2" > file2 $ hg add file1 file2 $ hg commit -m "added file1 and file2" $ echo "changed file1" >> file1 $ hg commit -m "changed file1" $ hg -q log 1:dfab7f3c2efb 0:c3fa057dd86f $ hg id dfab7f3c2efb tip $ hg update -C 0 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg id c3fa057dd86f $ echo "changed file1" >> file1 $ hg id c3fa057dd86f+ $ hg revert --no-backup --all reverting file1 $ hg diff $ hg status $ hg id c3fa057dd86f $ hg update 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg diff $ hg status $ hg id dfab7f3c2efb tip $ hg update -C 0 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo "changed file1 different" >> file1 $ hg update merging file1 warning: conflicts while merging file1! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges [1] $ hg diff --nodates diff -r dfab7f3c2efb file1 --- a/file1 +++ b/file1 @@ -1,3 +1,7 @@ added file1 another line of text +<<<<<<< working copy: c3fa057dd86f - test: added file1 and file2 +changed file1 different +======= changed file1 +>>>>>>> destination: dfab7f3c2efb - test: changed file1 $ hg status M file1 ? file1.orig $ hg id dfab7f3c2efb+ tip $ hg revert --no-backup --all reverting file1 $ hg diff $ hg status ? file1.orig $ hg id dfab7f3c2efb tip $ hg revert -r tip --no-backup --all $ hg diff $ hg status ? file1.orig $ hg id dfab7f3c2efb tip $ hg update -C 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg diff $ hg status ? file1.orig $ hg id dfab7f3c2efb tip