tests/test-dirstate-race.t
author Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
Tue, 02 Jul 2019 12:59:58 -0400
changeset 42621 99ebde4fec99
parent 41068 28a4fb793ba1
child 45771 f90a5c211251
permissions -rw-r--r--
commit: improve the files field of changelog for merges Currently, the files list of merge commits repeats all the deletions (either actual deletions, or files that got renamed) that happened between base and p2 of the merge. If p2 is the main branch, the list can easily be much bigger than the change being merged. This results in various problems worth improving: - changelog is bigger than necessary - `hg log directory` lists many unrelated merge commits, and `hg log -v -r commit` frequently fills multiple screens worth of files - it possibly slows down adjustlinkrev, by forcing it to read more manifests, and that function can certainly be a bottleneck - the server side of pulls can waste a lot of time simply opening the filelogs for pointless files (the constant factors for opening even a tiny filelog is apparently pretty bad) So stop listing such files as described in the code. Impacted merge commits and their descendants get a different hash than they would have without this. This doesn't seem problematic, except for convert. The previous commit helped with that in the hg->hg case (but if you do svn->hg twice from scratch, hashes can still change). The rest of the description is numbers. I don't have much to report, because recreating the files list of existing repositories is not easy: - debugupgradeformat and bundle/unbundle don't recreate the list - export/import tends to choke quickly applying patches or on description that contain diffs, - merge commits from the convert extension don't have the right files list for reasons orthogonal to the current commit - replaying the merge with hg update/hg merge/hg revert --all/hg commit can end up failing in hg revert - I wasn't sure that using debugsetparents + debugrebuilddirstate would really build the right thing I measured commit time before and after this change, in a case with no files filtered out, several files filtered out (no difference) and 5k files filtered out (+1% time). Recreating the 100 more recent merges in a private repo, the concatenated uncompressed files lists goes from 1.12MB to 0.52MB. Excluding 3 merges that are not representative, then the size goes from 570k to 15k. I converted part of mozilla-central, and observed file list shrinking quite a bit too, starting at the very first merge, 733641d9feaf, going from 550 files to 10 files (although they have relatively few merges, so they probably wouldn't care). Differential Revision: https://phab.mercurial-scm.org/D6613
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32651
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
     1
  $ hg init repo
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
     2
  $ cd repo
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
     3
  $ echo a > a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
     4
  $ hg add a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
     5
  $ hg commit -m test
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
     6
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
     7
Do we ever miss a sub-second change?:
6327
6d952dc2abc9 dirstate: refactor granularity code, add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     8
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
     9
  $ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    10
  >     hg co -qC 0
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    11
  >     echo b > a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    12
  >     hg st
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    13
  > done
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    14
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    15
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    16
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    17
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    18
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    19
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    20
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    21
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    22
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    23
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    24
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    25
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    26
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    27
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    28
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    29
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    30
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    31
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    32
  M a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 6327
diff changeset
    33
  M a
6327
6d952dc2abc9 dirstate: refactor granularity code, add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    34
32651
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    35
  $ echo test > b
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    36
  $ mkdir dir1
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    37
  $ echo test > dir1/c
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    38
  $ echo test > d
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    39
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    40
  $ echo test > e
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    41
#if execbit
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    42
A directory will typically have the execute bit -- make sure it doesn't get
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    43
confused with a file with the exec bit set
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    44
  $ chmod +x e
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    45
#endif
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    46
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    47
  $ hg add b dir1 d e
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 33577
diff changeset
    48
  adding dir1/c
32651
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    49
  $ hg commit -m test2
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    50
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    51
  $ cat >> $TESTTMP/dirstaterace.py << EOF
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    52
  > from mercurial import (
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    53
  >     context,
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    54
  >     extensions,
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    55
  > )
41068
28a4fb793ba1 extensions: deprecate extsetup without a `ui` argument (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 40296
diff changeset
    56
  > def extsetup(ui):
32651
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    57
  >     extensions.wrapfunction(context.workingctx, '_checklookup', overridechecklookup)
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    58
  > def overridechecklookup(orig, self, files):
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    59
  >     # make an update that changes the dirstate from underneath
40296
e787d97e90ad py3: fix test-dirstate-race.t
Mark Thomas <mbthomas@fb.com>
parents: 35393
diff changeset
    60
  >     self._repo.ui.system(br"sh '$TESTTMP/dirstaterace.sh'",
32751
627eaab1ad07 tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32678
diff changeset
    61
  >                          cwd=self._repo.root)
32651
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    62
  >     return orig(self, files)
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    63
  > EOF
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    64
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    65
  $ hg debugrebuilddirstate
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    66
  $ hg debugdirstate
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    67
  n   0         -1 unset               a
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    68
  n   0         -1 unset               b
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    69
  n   0         -1 unset               d
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    70
  n   0         -1 unset               dir1/c
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    71
  n   0         -1 unset               e
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    72
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    73
XXX Note that this returns M for files that got replaced by directories. This is
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    74
definitely a bug, but the fix for that is hard and the next status run is fine
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    75
anyway.
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    76
32751
627eaab1ad07 tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32678
diff changeset
    77
  $ cat > $TESTTMP/dirstaterace.sh <<EOF
627eaab1ad07 tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32678
diff changeset
    78
  > rm b && rm -r dir1 && rm d && mkdir d && rm e && mkdir e
627eaab1ad07 tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32678
diff changeset
    79
  > EOF
627eaab1ad07 tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32678
diff changeset
    80
627eaab1ad07 tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32678
diff changeset
    81
  $ hg status --config extensions.dirstaterace=$TESTTMP/dirstaterace.py
32651
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    82
  M d
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    83
  M e
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    84
  ! b
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    85
  ! dir1/c
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    86
  $ hg debugdirstate
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    87
  n 644          2 * a (glob)
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    88
  n   0         -1 unset               b
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    89
  n   0         -1 unset               d
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    90
  n   0         -1 unset               dir1/c
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    91
  n   0         -1 unset               e
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    92
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    93
  $ hg status
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    94
  ! b
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    95
  ! d
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    96
  ! dir1/c
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 12279
diff changeset
    97
  ! e
32752
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
    98
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
    99
  $ rmdir d e
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   100
  $ hg update -C -q .
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   101
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   102
Test that dirstate changes aren't written out at the end of "hg
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   103
status", if .hg/dirstate is already changed simultaneously before
32812
add613cddcb6 workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents: 32802
diff changeset
   104
acquisition of wlock in workingctx._poststatusfixup().
32752
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   105
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   106
This avoidance is important to keep consistency of dirstate in race
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   107
condition (see issue5584 for detail).
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   108
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   109
  $ hg parents -q
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   110
  1:* (glob)
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   111
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   112
  $ hg debugrebuilddirstate
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   113
  $ hg debugdirstate
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   114
  n   0         -1 unset               a
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   115
  n   0         -1 unset               b
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   116
  n   0         -1 unset               d
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   117
  n   0         -1 unset               dir1/c
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   118
  n   0         -1 unset               e
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   119
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   120
  $ cat > $TESTTMP/dirstaterace.sh <<EOF
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   121
  > # This script assumes timetable of typical issue5584 case below:
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   122
  > #
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   123
  > # 1. "hg status" loads .hg/dirstate
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   124
  > # 2. "hg status" confirms clean-ness of FILE
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   125
  > # 3. "hg update -C 0" updates the working directory simultaneously
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   126
  > #    (FILE is removed, and FILE is dropped from .hg/dirstate)
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   127
  > # 4. "hg status" acquires wlock
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   128
  > #    (.hg/dirstate is re-loaded = no FILE entry in dirstate)
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   129
  > # 5. "hg status" marks FILE in dirstate as clean
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   130
  > #    (FILE entry is added to in-memory dirstate)
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   131
  > # 6. "hg status" writes dirstate changes into .hg/dirstate
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   132
  > #    (FILE entry is written into .hg/dirstate)
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   133
  > #
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   134
  > # To reproduce similar situation easily and certainly, #2 and #3
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   135
  > # are swapped.  "hg cat" below ensures #2 on "hg status" side.
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   136
  > 
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   137
  > hg update -q -C 0
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   138
  > hg cat -r 1 b > b
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   139
  > EOF
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   140
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   141
"hg status" below should excludes "e", of which exec flag is set, for
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   142
portability of test scenario, because unsure but missing "e" is
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   143
treated differently in _checklookup() according to runtime platform.
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   144
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   145
- "missing(!)" on POSIX, "pctx[f].cmp(self[f])" raises ENOENT
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   146
- "modified(M)" on Windows, "self.flags(f) != pctx.flags(f)" is True
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   147
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   148
  $ hg status --config extensions.dirstaterace=$TESTTMP/dirstaterace.py --debug -X path:e
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   149
  skip updating dirstate: identity mismatch
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   150
  M a
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   151
  ! d
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   152
  ! dir1/c
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   153
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   154
  $ hg parents -q
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   155
  0:* (glob)
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   156
  $ hg files
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   157
  a
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32751
diff changeset
   158
  $ hg debugdirstate
32802
f40eec7af044 test-dirstate-race: back out changeset c82fa7efcbc8
Siddharth Agarwal <sid0@fb.com>
parents: 32771
diff changeset
   159
  n * * * a (glob)
32815
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   160
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   161
  $ rm b
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   162
32816
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   163
#if fsmonitor
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   164
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   165
Create fsmonitor state.
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   166
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   167
  $ hg status
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   168
  $ f --type .hg/fsmonitor.state
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   169
  .hg/fsmonitor.state: file
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   170
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   171
Test that invalidating fsmonitor state in the middle (which doesn't require the
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   172
wlock) causes the fsmonitor update to be skipped.
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   173
hg debugrebuilddirstate ensures that the dirstaterace hook will be called, but
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   174
it also invalidates the fsmonitor state. So back it up and restore it.
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   175
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   176
  $ mv .hg/fsmonitor.state .hg/fsmonitor.state.tmp
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   177
  $ hg debugrebuilddirstate
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   178
  $ mv .hg/fsmonitor.state.tmp .hg/fsmonitor.state
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   179
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   180
  $ cat > $TESTTMP/dirstaterace.sh <<EOF
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   181
  > rm .hg/fsmonitor.state
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   182
  > EOF
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   183
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   184
  $ hg status --config extensions.dirstaterace=$TESTTMP/dirstaterace.py --debug
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   185
  skip updating fsmonitor.state: identity mismatch
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   186
  $ f .hg/fsmonitor.state
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   187
  .hg/fsmonitor.state: file not found
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   188
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   189
#endif
1b25c648d5b7 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32815
diff changeset
   190
32815
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   191
Set up a rebase situation for issue5581.
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   192
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   193
  $ echo c2 > a
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   194
  $ echo c2 > b
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   195
  $ hg add b
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   196
  $ hg commit -m c2
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   197
  created new head
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   198
  $ echo c3 >> a
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   199
  $ hg commit -m c3
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   200
  $ hg update 2
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   201
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   202
  $ echo c4 >> a
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   203
  $ echo c4 >> b
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   204
  $ hg commit -m c4
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   205
  created new head
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   206
33577
34a8ef358c93 test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents: 33139
diff changeset
   207
Configure a merge tool that runs status in the middle of the rebase. The goal of
34a8ef358c93 test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents: 33139
diff changeset
   208
the status call is to trigger a potential bug if fsmonitor's state is written
34a8ef358c93 test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents: 33139
diff changeset
   209
even though the wlock is held by another process. The output of 'hg status' in
34a8ef358c93 test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents: 33139
diff changeset
   210
the merge tool goes to /dev/null because we're more interested in the results of
34a8ef358c93 test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents: 33139
diff changeset
   211
'hg status' run after the rebase.
32815
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   212
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   213
  $ cat >> $TESTTMP/mergetool-race.sh << EOF
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   214
  > echo "custom merge tool"
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   215
  > printf "c2\nc3\nc4\n" > \$1
33577
34a8ef358c93 test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents: 33139
diff changeset
   216
  > hg --cwd "$TESTTMP/repo" status > /dev/null
32815
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   217
  > echo "custom merge tool end"
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   218
  > EOF
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   219
  $ cat >> $HGRCPATH << EOF
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   220
  > [extensions]
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   221
  > rebase =
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   222
  > [merge-tools]
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   223
  > test.executable=sh
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   224
  > test.args=$TESTTMP/mergetool-race.sh \$output
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   225
  > EOF
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   226
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   227
  $ hg rebase -s . -d 3 --tool test
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   228
  rebasing 4:b08445fd6b2a "c4" (tip)
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   229
  merging a
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   230
  custom merge tool
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   231
  custom merge tool end
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   232
  saved backup bundle to $TESTTMP/repo/.hg/strip-backup/* (glob)
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   233
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   234
This hg status should be empty, whether or not fsmonitor is enabled (issue5581).
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   235
15e85dded933 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents: 32812
diff changeset
   236
  $ hg status