mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 01:07:15 +03:00
9dc21f8d0b
Summary: D13853115 adds `edenscm/` to `sys.path` and code still uses `import mercurial`. That has nasty problems if both `import mercurial` and `import edenscm.mercurial` are used, because Python would think `mercurial.foo` and `edenscm.mercurial.foo` are different modules so code like `try: ... except mercurial.error.Foo: ...`, or `isinstance(x, mercurial.foo.Bar)` would fail to handle the `edenscm.mercurial` version. There are also some module-level states (ex. `extensions._extensions`) that would cause trouble if they have multiple versions in a single process. Change imports to use the `edenscm` so ideally the `mercurial` is no longer imported at all. Add checks in extensions.py to catch unexpected extensions importing modules from the old (wrong) locations when running tests. Reviewed By: phillco Differential Revision: D13868981 fbshipit-source-id: f4e2513766957fd81d85407994f7521a08e4de48
113 lines
2.2 KiB
Perl
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 edenscm.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
|