tests/test-casecollision.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 14 Apr 2020 03:16:23 +0200
changeset 44791 b81486b609a3
parent 22046 7a9cbb315d84
child 48367 0b8e076e878c
permissions -rw-r--r--
nodemap: gate the feature behind a new requirement Now that the feature is working smoothly, a question was still open, should we gate the feature behind a new requirement or just treat it as a cache to be warmed by those who can and ignored by other. The advantage of using the cache approach is a transparent upgrade/downgrade story, making the feature easier to move to. However having out of date cache can come with a significant performance hit for process who expect an up to date cache but found none. In this case the file needs to be stored under `.hg/cache`. The "requirement" approach guarantee that the persistent nodemap is up to date. However, it comes with a less flexible activation story since an explicite upgrade is required. In this case the file can be stored in `.hg/store`. This wiki page is relevant to this questions: https://www.mercurial-scm.org/wiki/ComputedIndexPlan So which one should we take? Another element came into plan, the persistent nodemap use the `add` method of the transaction, it is used to keep track of a file content before a transaction in case we need to rollback it back. It turns out that the `transaction.add` API does not support file stored anywhere than `.hg/store`. Making it support file stored elsewhere is possible, require a change in on disk transaction format. Updating on disk file requires… introducing a new requirements. As a result, we pick the second option "gating the persistent nodemap behind a new requirements". Differential Revision: https://phab.mercurial-scm.org/D8417
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22046
7a9cbb315d84 tests: replace exit 80 with #require
Matt Mackall <mpm@selenic.com>
parents: 17096
diff changeset
     1
#require no-icasefs
14068
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
     2
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
     3
test file addition with colliding case
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
     4
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
     5
  $ hg init repo1
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
     6
  $ cd repo1
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
     7
  $ echo a > a
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
     8
  $ echo A > A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
     9
  $ hg add a
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    10
  $ hg st
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    11
  A a
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    12
  ? A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    13
  $ hg add --config ui.portablefilenames=abort A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    14
  abort: possible case-folding collision for A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    15
  [255]
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    16
  $ hg st
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    17
  A a
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    18
  ? A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    19
  $ hg add A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    20
  warning: possible case-folding collision for A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    21
  $ hg st
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    22
  A A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    23
  A a
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    24
  $ hg forget A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    25
  $ hg st
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    26
  A a
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    27
  ? A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    28
  $ hg add --config ui.portablefilenames=no A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    29
  $ hg st
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    30
  A A
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    31
  A a
17096
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    32
  $ mkdir b
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    33
  $ touch b/c b/D
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    34
  $ hg add b
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    35
  adding b/D
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    36
  adding b/c
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    37
  $ touch b/d b/C
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    38
  $ hg add b/C
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    39
  warning: possible case-folding collision for b/C
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    40
  $ hg add b/d
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    41
  warning: possible case-folding collision for b/d
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    42
  $ touch b/a1 b/a2
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    43
  $ hg add b
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    44
  adding b/a1
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    45
  adding b/a2
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    46
  $ touch b/A2 b/a1.1
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    47
  $ hg add b/a1.1 b/A2
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    48
  warning: possible case-folding collision for b/A2
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    49
  $ touch b/f b/F
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    50
  $ hg add b/f b/F
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    51
  warning: possible case-folding collision for b/f
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    52
  $ touch g G
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    53
  $ hg add g G
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    54
  warning: possible case-folding collision for g
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    55
  $ mkdir h H
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    56
  $ touch h/x H/x
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    57
  $ hg add h/x H/x
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    58
  warning: possible case-folding collision for h/x
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    59
  $ touch h/s H/s
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    60
  $ hg add h/s
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    61
  $ hg add H/s
14e44933d175 casecollision: add tests
Joshua Redstone <joshua.redstone@fb.com>
parents: 14178
diff changeset
    62
  warning: possible case-folding collision for H/s
14178
524c560e2d32 test-casecollision.t: add test for case changing rename
Adrian Buehlmann <adrian@cadifra.com>
parents: 14068
diff changeset
    63
524c560e2d32 test-casecollision.t: add test for case changing rename
Adrian Buehlmann <adrian@cadifra.com>
parents: 14068
diff changeset
    64
case changing rename must not warn or abort
524c560e2d32 test-casecollision.t: add test for case changing rename
Adrian Buehlmann <adrian@cadifra.com>
parents: 14068
diff changeset
    65
524c560e2d32 test-casecollision.t: add test for case changing rename
Adrian Buehlmann <adrian@cadifra.com>
parents: 14068
diff changeset
    66
  $ echo c > c
524c560e2d32 test-casecollision.t: add test for case changing rename
Adrian Buehlmann <adrian@cadifra.com>
parents: 14068
diff changeset
    67
  $ hg ci -qAmx
524c560e2d32 test-casecollision.t: add test for case changing rename
Adrian Buehlmann <adrian@cadifra.com>
parents: 14068
diff changeset
    68
  $ hg mv c C
14068
04ce8fa1015d add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
diff changeset
    69
  $ cd ..