tests/test-dirstate-read-race.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Thu, 07 Mar 2024 10:55:22 +0100
changeset 51531 f85f23f1479b
parent 50355 e6532a7336d0
permissions -rw-r--r--
branchcache: skip entries that are topological heads in the on disk file In the majority of cases, topological heads are also branch heads. We have efficient way to get the topological heads and efficient way to retrieve their branch information. So there is little value in putting them in the branch cache file explicitly. On the contrary, writing them explicitly tend to create very large cache file that are inefficient to read and update. So the branch cache v3 format is no longer including them. This changeset focus on the format aspect and have no focus on the performance aspect. We will cover that later.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     1
==============================================================================
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     2
Check potential race conditions between a dirstate's read and other operations
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     3
==============================================================================
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     4
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
     5
#testcases dirstate-v1 dirstate-v2-append dirstate-v2-rewrite
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
     6
#testcases pre-all-read pre-some-read
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
     7
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     8
Some commands, like `hg status`, do not need to take the wlock but need to
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     9
access dirstate data.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    10
Other commands might update the dirstate data while this happens.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    11
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    12
This can create issues if repository data is read in the wrong order, or for
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    13
the dirstate-v2 format where the data is contained in multiple files.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    14
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    15
This test file is meant to test various cases where such parallel operations
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    16
happen and make sure the reading process behaves fine. We do so with a `hg
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    17
status` command since it is probably the most advanced of such read-only
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    18
command.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    19
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    20
It bears simililarity with `tests/test-dirstate-status-race.t ` but tests a
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    21
different type of race.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    22
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    23
Setup
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    24
=====
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    25
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    26
  $ cat >> $HGRCPATH << EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    27
  > [storage]
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    28
  > dirstate-v2.slow-path=allow
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    29
  > EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    30
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    31
#if no-dirstate-v1
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    32
  $ cat >> $HGRCPATH << EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    33
  > [format]
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    34
  > use-dirstate-v2=yes
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    35
  > EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    36
#else
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    37
  $ cat >> $HGRCPATH << EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    38
  > [format]
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    39
  > use-dirstate-v2=no
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    40
  > EOF
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    41
#endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    42
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    43
#if dirstate-v2-rewrite
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    44
  $ d2args="--config devel.dirstate.v2.data_update_mode=force-new"
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    45
#endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    46
#if dirstate-v2-append
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    47
  $ d2args="--config devel.dirstate.v2.data_update_mode=force-append"
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    48
#endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
    49
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    50
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    51
#if dirstate-v1
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    52
  $ cfg="devel.sync.dirstate.pre-read-file"
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    53
#else
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    54
#if pre-all-read
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    55
  $ cfg="devel.sync.dirstate.pre-read-file"
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    56
#else
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    57
  $ cfg="devel.sync.dirstate.post-docket-read-file"
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    58
#endif
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    59
#endif
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
    60
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    61
  $ directories="dir dir/nested dir2"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    62
  $ first_files="dir/nested/a dir/b dir/c dir/d dir2/e f"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    63
  $ second_files="g dir/nested/h dir/i dir/j dir2/k dir2/l dir/nested/m"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    64
  $ extra_files="dir/n dir/o p q"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    65
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    66
  $ hg init reference-repo
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    67
  $ cd reference-repo
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    68
  $ mkdir -p dir/nested dir2
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    69
  $ touch -t 200001010000 $first_files $directories
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    70
  $ hg commit -Aqm "recreate a bunch of files to facilitate dirstate-v2 append"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    71
  $ touch -t 200001010010 $second_files $directories
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    72
  $ hg commit -Aqm "more files to have two commit"
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    73
  $ hg log -G -v
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    74
  @  changeset:   1:9a86dcbfb938
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    75
  |  tag:         tip
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    76
  |  user:        test
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    77
  |  date:        Thu Jan 01 00:00:00 1970 +0000
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    78
  |  files:       dir/i dir/j dir/nested/h dir/nested/m dir2/k dir2/l g
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    79
  |  description:
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    80
  |  more files to have two commit
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    81
  |
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    82
  |
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    83
  o  changeset:   0:4f23db756b09
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    84
     user:        test
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    85
     date:        Thu Jan 01 00:00:00 1970 +0000
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    86
     files:       dir/b dir/c dir/d dir/nested/a dir2/e f
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    87
     description:
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    88
     recreate a bunch of files to facilitate dirstate-v2 append
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    89
  
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    90
  
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    91
  $ hg manifest
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    92
  dir/b
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    93
  dir/c
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    94
  dir/d
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    95
  dir/i
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    96
  dir/j
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    97
  dir/nested/a
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    98
  dir/nested/h
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    99
  dir/nested/m
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   100
  dir2/e
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   101
  dir2/k
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   102
  dir2/l
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   103
  f
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   104
  g
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   105
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   106
Add some unknown files and refresh the dirstate
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   107
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   108
  $ touch -t 200001010020 $extra_files
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   109
  $ hg add dir/o
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   110
  $ hg remove dir/nested/m
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   111
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   112
  $ hg st --config devel.dirstate.v2.data_update_mode=force-new
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   113
  A dir/o
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   114
  R dir/nested/m
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   115
  ? dir/n
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   116
  ? p
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   117
  ? q
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   118
  $ hg debugstate
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   119
  n 644          0 2000-01-01 00:00:00 dir/b
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   120
  n 644          0 2000-01-01 00:00:00 dir/c
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   121
  n 644          0 2000-01-01 00:00:00 dir/d
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   122
  n 644          0 2000-01-01 00:10:00 dir/i
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   123
  n 644          0 2000-01-01 00:10:00 dir/j
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   124
  n 644          0 2000-01-01 00:00:00 dir/nested/a
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   125
  n 644          0 2000-01-01 00:10:00 dir/nested/h
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   126
  r ?????????????????????????????????? dir/nested/m (glob)
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   127
  a ?????????????????????????????????? dir/o (glob)
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   128
  n 644          0 2000-01-01 00:00:00 dir2/e
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   129
  n 644          0 2000-01-01 00:10:00 dir2/k
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   130
  n 644          0 2000-01-01 00:10:00 dir2/l
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   131
  n 644          0 2000-01-01 00:00:00 f
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   132
  n 644          0 2000-01-01 00:10:00 g
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   133
  $ hg debugstate > ../reference
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   134
  $ cd ..
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   135
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   136
Actual Testing
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   137
==============
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   138
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   139
Race with a `hg add`
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   140
-------------------
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   141
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   142
  $ cp -a reference-repo race-with-add
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   143
  $ cd race-with-add
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   144
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   145
spin a `hg status` with some caches to update
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   146
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   147
  $ hg st >$TESTTMP/status-race-lock.out 2>$TESTTMP/status-race-lock.log \
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   148
  > --config rhg.on-unsupported=abort \
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   149
  > --config ${cfg}=$TESTTMP/status-race-lock \
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   150
  > &
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   151
  $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/status-race-lock.waiting
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   152
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   153
Add a file
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   154
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   155
  $ hg $d2args add dir/n
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   156
  $ touch $TESTTMP/status-race-lock
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   157
  $ wait
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   158
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   159
The file should in a "added" state
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   160
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   161
  $ hg status
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   162
  A dir/n
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   163
  A dir/o
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   164
  R dir/nested/m
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   165
  ? p
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   166
  ? q
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   167
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   168
The status process should return a consistent result and not crash.
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   169
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   170
#if dirstate-v1
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   171
  $ cat $TESTTMP/status-race-lock.out
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   172
  A dir/n
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   173
  A dir/o
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   174
  R dir/nested/m
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   175
  ? p
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   176
  ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   177
#else
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   178
#if rhg pre-some-read dirstate-v2-append
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   179
  $ cat $TESTTMP/status-race-lock.out
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   180
  A dir/o
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   181
  R dir/nested/m
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   182
  ? dir/n
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   183
  ? p
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   184
  ? q
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   185
#else
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   186
#if rust no-rhg dirstate-v2-append
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   187
  $ cat $TESTTMP/status-race-lock.out
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   188
  A dir/o
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   189
  R dir/nested/m
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   190
  ? dir/n
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   191
  ? p
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   192
  ? q
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   193
#else
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   194
  $ cat $TESTTMP/status-race-lock.out
50239
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
   195
  A dir/n
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
   196
  A dir/o
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
   197
  R dir/nested/m
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
   198
  ? p
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
   199
  ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   200
#endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   201
#endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   202
#endif
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   203
  $ cat $TESTTMP/status-race-lock.log
50229
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   204
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   205
final cleanup
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   206
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   207
  $ rm $TESTTMP/status-race-lock $TESTTMP/status-race-lock.waiting
7169ff59a2f8 dirstate: initial creation of a test file to check dirstate race read
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   208
  $ cd ..
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   209
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   210
Race with a `hg commit`
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   211
-----------------------
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   212
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   213
  $ cp -a reference-repo race-with-commit
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   214
  $ cd race-with-commit
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   215
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   216
spin a `hg status with some cache to update
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   217
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   218
  $ hg st >$TESTTMP/status-race-lock.out 2>$TESTTMP/status-race-lock.log \
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   219
  > --config rhg.on-unsupported=abort \
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   220
  > --config ${cfg}=$TESTTMP/status-race-lock \
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   221
  > &
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   222
  $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/status-race-lock.waiting
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   223
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   224
Add a do a commit
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   225
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   226
  $ hg status
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   227
  A dir/o
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   228
  R dir/nested/m
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   229
  ? dir/n
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   230
  ? p
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   231
  ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   232
  $ hg $d2args commit -m 'racing commit'
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   233
  $ touch $TESTTMP/status-race-lock
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   234
  $ wait
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   235
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   236
commit was created, and status is now clean
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   237
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   238
  $ hg log -GT '{node|short} {desc}\n'
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   239
  @  02a67a77ee9b racing commit
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   240
  |
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   241
  o  9a86dcbfb938 more files to have two commit
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   242
  |
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   243
  o  4f23db756b09 recreate a bunch of files to facilitate dirstate-v2 append
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   244
  
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   245
  $ hg status
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   246
  ? dir/n
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   247
  ? p
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   248
  ? q
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   249
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   250
The status process should return a consistent result and not crash.
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   251
50355
e6532a7336d0 dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50244
diff changeset
   252
#if no-rhg
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   253
  $ cat $TESTTMP/status-race-lock.out
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   254
  A dir/o
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   255
  R dir/nested/m
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   256
  ? dir/n
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   257
  ? p
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   258
  ? q
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   259
  $ cat $TESTTMP/status-race-lock.log
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   260
#else
50355
e6532a7336d0 dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50244
diff changeset
   261
#if pre-some-read dirstate-v2-append
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   262
  $ cat $TESTTMP/status-race-lock.out
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   263
  A dir/o
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   264
  R dir/nested/m
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   265
  ? dir/n
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   266
  ? p
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   267
  ? q
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   268
  $ cat $TESTTMP/status-race-lock.log
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   269
#else
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   270
  $ cat $TESTTMP/status-race-lock.out
50238
c9066fc609ef dirstate: deal with read-race for python code using rust object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50237
diff changeset
   271
  ? dir/n
c9066fc609ef dirstate: deal with read-race for python code using rust object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50237
diff changeset
   272
  ? p
c9066fc609ef dirstate: deal with read-race for python code using rust object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50237
diff changeset
   273
  ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   274
  $ cat $TESTTMP/status-race-lock.log
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   275
#endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   276
#endif
50230
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   277
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   278
final cleanup
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   279
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   280
  $ rm $TESTTMP/status-race-lock $TESTTMP/status-race-lock.waiting
e5fea4f1b052 dirstate: check dirstate race condition around commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50229
diff changeset
   281
  $ cd ..
50231
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   282
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   283
Race with a `hg update`
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   284
-----------------------
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   285
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   286
  $ cp -a reference-repo race-with-update
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   287
  $ cd race-with-update
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   288
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   289
spin a `hg status` with some caches to update
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   290
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   291
  $ hg st >$TESTTMP/status-race-lock.out 2>$TESTTMP/status-race-lock.log \
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   292
  > --config rhg.on-unsupported=abort \
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   293
  > --config ${cfg}=$TESTTMP/status-race-lock \
50231
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   294
  > &
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   295
  $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/status-race-lock.waiting
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   296
do an update
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   297
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   298
  $ hg status
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   299
  A dir/o
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   300
  R dir/nested/m
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   301
  ? dir/n
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   302
  ? p
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   303
  ? q
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   304
  $ hg log -GT '{node|short} {desc}\n'
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   305
  @  9a86dcbfb938 more files to have two commit
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   306
  |
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   307
  o  4f23db756b09 recreate a bunch of files to facilitate dirstate-v2 append
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   308
  
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   309
  $ hg $d2args update --merge ".~1"
50231
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   310
  0 files updated, 0 files merged, 6 files removed, 0 files unresolved
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   311
  $ touch $TESTTMP/status-race-lock
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   312
  $ wait
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   313
  $ hg log -GT '{node|short} {desc}\n'
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   314
  o  9a86dcbfb938 more files to have two commit
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   315
  |
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   316
  @  4f23db756b09 recreate a bunch of files to facilitate dirstate-v2 append
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   317
  
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   318
  $ hg status
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   319
  A dir/o
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   320
  ? dir/n
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   321
  ? p
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   322
  ? q
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   323
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   324
The status process should return a consistent result and not crash.
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   325
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   326
#if rhg dirstate-v2-append pre-some-read
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   327
  $ cat $TESTTMP/status-race-lock.out
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   328
  A dir/o
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   329
  R dir/nested/m
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   330
  ! dir/i
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   331
  ! dir/j
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   332
  ! dir/nested/h
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   333
  ! dir2/k
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   334
  ! dir2/l
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   335
  ! g
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   336
  ? dir/n
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   337
  ? p
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   338
  ? q
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   339
#else
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   340
#if rust no-rhg dirstate-v2-append
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   341
  $ cat $TESTTMP/status-race-lock.out
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   342
  A dir/o
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   343
  R dir/nested/m
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   344
  ! dir/i
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   345
  ! dir/j
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   346
  ! dir/nested/h
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   347
  ! dir2/k
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   348
  ! dir2/l
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   349
  ! g
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   350
  ? dir/n
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   351
  ? p
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   352
  ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   353
#else
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   354
  $ cat $TESTTMP/status-race-lock.out
50237
a3b1ab5f5dee dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50235
diff changeset
   355
  A dir/o
a3b1ab5f5dee dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50235
diff changeset
   356
  ? dir/n
a3b1ab5f5dee dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50235
diff changeset
   357
  ? p
a3b1ab5f5dee dirstate: deal with read-race for pure python code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50235
diff changeset
   358
  ? q
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   359
#endif
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   360
#endif
50240
3ddff85fa2c8 dirstate: simplify the dirstate's read race testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50239
diff changeset
   361
  $ cat $TESTTMP/status-race-lock.log
50231
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   362
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   363
final cleanup
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   364
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   365
  $ rm $TESTTMP/status-race-lock $TESTTMP/status-race-lock.waiting
0f483a2c29e7 dirstate: check dirstate race condition around update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50230
diff changeset
   366
  $ cd ..
50232
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   367
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   368
Race with a cache updating `hg status`
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   369
--------------------------------------
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   370
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   371
It is interesting to race with "read-only" operation (that still update its cache)
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   372
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   373
  $ cp -a reference-repo race-with-status
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   374
  $ cd race-with-status
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   375
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   376
spin a `hg status` with some caches to update
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   377
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   378
  $ hg st >$TESTTMP/status-race-lock.out 2>$TESTTMP/status-race-lock.log \
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   379
  > --config rhg.on-unsupported=abort \
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   380
  > --config ${cfg}=$TESTTMP/status-race-lock \
50232
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   381
  > &
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   382
  $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/status-race-lock.waiting
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   383
do an update
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   384
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   385
  $ touch -t 200001020006 f
50233
cf0d7cd6a6fa dirstate: add v1-v2 variants to the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50232
diff changeset
   386
  $ hg $d2args status
50232
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   387
  A dir/o
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   388
  R dir/nested/m
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   389
  ? dir/n
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   390
  ? p
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   391
  ? q
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   392
  $ touch $TESTTMP/status-race-lock
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   393
  $ wait
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   394
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   395
The status process should return a consistent result and not crash.
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   396
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   397
  $ cat $TESTTMP/status-race-lock.out
50239
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
   398
  A dir/o
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
   399
  R dir/nested/m
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
   400
  ? dir/n
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
   401
  ? p
491f3dd080eb dirstate: deal with read-race for pure rust code path (rhg)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50238
diff changeset
   402
  ? q
50235
385977432227 dirstate: add append/new-file variants in the dirstate's read race tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50233
diff changeset
   403
  $ cat $TESTTMP/status-race-lock.log
50232
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   404
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   405
final cleanup
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   406
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   407
  $ rm $TESTTMP/status-race-lock $TESTTMP/status-race-lock.waiting
5bf6b8015035 dirstate: check dirstate race condition around status
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50231
diff changeset
   408
  $ cd ..