D6474: tests: show how the dirstate can end up containing wrong information
valentin.gatienbaron (Valentin Gatien-Baron)
phabricator at mercurial-scm.org
Wed Jun 12 17:25:26 UTC 2019
valentin.gatienbaron updated this revision to Diff 15461.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D6474?vs=15326&id=15461
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D6474/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D6474
AFFECTED FILES
tests/test-dirstate-race2.t
CHANGE DETAILS
diff --git a/tests/test-dirstate-race2.t b/tests/test-dirstate-race2.t
new file mode 100644
--- /dev/null
+++ b/tests/test-dirstate-race2.t
@@ -0,0 +1,39 @@
+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. It results in a corrupted dirstate, which
+stores the wrong size, and thus hg status shows spuriously modified
+files.
+
+ $ 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 0 (set |unset) a (re)
+ $ echo a > a; hg status; hg diff
+ M a
To: valentin.gatienbaron, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list