mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 14:58:03 +03:00
a7946d0f17
Summary: Don't error out for files with negative or huge mtimes. We use the same masking approach as Python for now. Note that Rust status does not write the mtime back to dirstate in general right now, so success is merely that "hg status" doesn't crash in this case. Reviewed By: zzl0 Differential Revision: D43970588 fbshipit-source-id: f1ea50eaeeee2fc9b564934ec587c9f02abaf651
117 lines
2.5 KiB
Perl
117 lines
2.5 KiB
Perl
#chg-compatible
|
|
#debugruntest-compatible
|
|
#inprocess-hg-incompatible
|
|
|
|
$ eagerepo
|
|
$ setconfig workingcopy.ruststatus=False
|
|
$ setconfig format.dirstate=2
|
|
|
|
------ 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
|
|
|
|
Test modulo storage/comparison of absurd dates:
|
|
|
|
#if no-aix
|
|
$ touch -t 195001011200 a
|
|
Rust status doesn't crash
|
|
$ hg st
|
|
Invoke Python status for below debugstate (Rust status doesn't update mtime yet).
|
|
$ hg st --config status.use-rust=false
|
|
$ 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 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 'desc(1)'
|
|
abort: simulated error while recording dirstateupdates
|
|
[255]
|
|
$ hg log -r . -T '{node}\n'
|
|
dfda8c2e7522c4207035f267703c5f27af5a5bf7
|
|
$ hg status
|
|
? a
|
|
$ rm .hg/hgrc
|
|
|
|
Verify that status reports deleted files correctly
|
|
$ hg add a
|
|
$ rm a
|
|
$ hg status
|
|
! a
|
|
$ hg diff
|
|
|
|
Dirstate should block addition of paths with relative parent components
|
|
$ hg up -C .
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ ls
|
|
$ hg debugsh -c "repo.dirstate.add('foo/../b')"
|
|
abort: cannot add path with relative parents: foo/../b
|
|
[255]
|
|
$ touch b
|
|
$ mkdir foo
|
|
$ hg add foo/../b
|
|
$ hg commit -m "add b"
|
|
$ hg status --change .
|
|
A b
|