sapling/tests/test-dirstate.t
Jun Wu 556c49918c fsmonitor: store fsmonitor state in treestate
Summary:
The new treestate was designed to store fsmonitor state. Use it to make
fsmonitor and dirstate state consistent, and avoid fsmonitor state
invalidation.

The "fsmonitor identity" check was removed as we now rely on the dirstate
identity check - dirstate and fsmonitor state must be updated consistently -
both updated or neither updated.

Since this is the first dirstate that tracks "untracked" files, several places
are adjusted (ex. dmap.dropfile, dmap.keys) to take the new untracked files
into consideration.

Reviewed By: wez

Differential Revision: D7909172

fbshipit-source-id: 05fd64b25c67ae4b07bc8cfee2731c748205975e
2018-06-14 21:38:33 -07:00

113 lines
2.2 KiB
Perl

#testcases v0 v1 v2
#if v0
$ setconfig format.dirstate=0
#endif
#if v1
$ setconfig format.dirstate=1
#endif
#if v2
$ setconfig format.dirstate=2
#endif
------ Test dirstate._dirs refcounting
$ hg init t
$ cd t
$ mkdir -p a/b/c/d
$ touch a/b/c/d/x
$ touch a/b/c/d/y
$ touch a/b/c/d/z
$ hg ci -Am m
adding a/b/c/d/x
adding a/b/c/d/y
adding a/b/c/d/z
$ hg mv a z
moving a/b/c/d/x to z/b/c/d/x
moving a/b/c/d/y to z/b/c/d/y
moving a/b/c/d/z to z/b/c/d/z
Test name collisions
$ rm z/b/c/d/x
$ mkdir z/b/c/d/x
$ touch z/b/c/d/x/y
$ hg add z/b/c/d/x/y
abort: file 'z/b/c/d/x' in dirstate clashes with 'z/b/c/d/x/y'
[255]
$ rm -rf z/b/c/d
$ touch z/b/c/d
$ hg add z/b/c/d
abort: directory 'z/b/c/d' already in dirstate
[255]
$ cd ..
Issue1790: dirstate entry locked into unset if file mtime is set into
the future
Prepare test repo:
$ hg init u
$ cd u
$ echo a > a
$ hg add
adding a
$ hg ci -m1
#if no-v2
Set mtime of a into the future:
$ touch -t 202101011200 a
Status must not set a's entry to unset (issue1790):
$ hg status
$ hg debugstate
n 644 2 2021-01-01 12:00:00 a
Note: issue1790 is about thg compatibility. In this case, setting mtime to
"unset" is also correct since "a" needs to be checked.
#endif
Test modulo storage/comparison of absurd dates:
#if no-aix
$ touch -t 195001011200 a
$ hg st
$ hg debugstate
n 644 2 2018-01-19 15:14:08 a
#endif
Verify that exceptions during a dirstate change leave the dirstate
coherent (issue4353)
$ cat > ../dirstateexception.py <<EOF
> from __future__ import absolute_import
> from mercurial import (
> error,
> extensions,
> merge,
> )
>
> def wraprecordupdates(orig, repo, actions, branchmerge):
> raise error.Abort("simulated error while recording dirstateupdates")
>
> def reposetup(ui, repo):
> extensions.wrapfunction(merge, 'recordupdates', wraprecordupdates)
> EOF
$ hg rm a
$ hg commit -m 'rm a'
$ echo "[extensions]" >> .hg/hgrc
$ echo "dirstateex=../dirstateexception.py" >> .hg/hgrc
$ hg up 0
abort: simulated error while recording dirstateupdates
[255]
$ hg log -r . -T '{rev}\n'
1
$ hg status
? a