tests/test-empty-file.t
author Simon Sapin <simon.sapin@octobus.net>
Tue, 27 Apr 2021 12:42:21 +0200
changeset 47130 04bcba539c96
parent 16913 f2719b387380
permissions -rw-r--r--
dirstate-tree: Avoid BTreeMap double-lookup when inserting a dirstate entry The child nodes of a given node in the tree-shaped dirstate are kept in a `BTreeMap` where keys are file names as strings. Finding or inserting a value in the map takes `O(log(n))` string comparisons, which adds up when constructing the tree. The `entry` API allows finding a "spot" in the map that may or may not be occupied and then access that value or insert a new one without doing map lookup again. However the current API is limited in that calling `entry` requires an owned key (and so a memory allocation), even if it ends up not being used in the case where the map already has a value with an equal key. This is still a win, with 4% better end-to-end time for `hg status` measured here with hyperfine: ``` Benchmark #1: ../hg2/hg status -R $REPO --config=experimental.dirstate-tree.in-memory=1 Time (mean ± σ): 1.337 s ± 0.018 s [User: 892.9 ms, System: 437.5 ms] Range (min … max): 1.316 s … 1.373 s 10 runs Benchmark #2: ./hg status -R $REPO --config=experimental.dirstate-tree.in-memory=1 Time (mean ± σ): 1.291 s ± 0.008 s [User: 853.4 ms, System: 431.1 ms] Range (min … max): 1.283 s … 1.309 s 10 runs Summary './hg status -R $REPO --config=experimental.dirstate-tree.in-memory=1' ran 1.04 ± 0.02 times faster than '../hg2/hg status -R $REPO --config=experimental.dirstate-tree.in-memory=1' ``` * ./hg is this revision * ../hg2/hg is its parent * $REPO is an old snapshot of mozilla-central Differential Revision: https://phab.mercurial-scm.org/D10550
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12159
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     1
  $ hg init a
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     2
  $ cd a
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     3
  $ touch empty1
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     4
  $ hg add empty1
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     5
  $ hg commit -m 'add empty1'
3509
9de0e64545a3 Test that we notice the empty files from the second parent during a merge
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     6
12159
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     7
  $ touch empty2
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     8
  $ hg add empty2
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
     9
  $ hg commit -m 'add empty2'
3509
9de0e64545a3 Test that we notice the empty files from the second parent during a merge
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    10
12159
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    11
  $ hg up -C 0
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    12
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    13
  $ touch empty3
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    14
  $ hg add empty3
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    15
  $ hg commit -m 'add empty3'
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    16
  created new head
3509
9de0e64545a3 Test that we notice the empty files from the second parent during a merge
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    17
12159
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    18
  $ hg heads
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    19
  changeset:   2:a1cb177e0d44
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    20
  tag:         tip
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    21
  parent:      0:1e1d9c4e5b64
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    22
  user:        test
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    23
  date:        Thu Jan 01 00:00:00 1970 +0000
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    24
  summary:     add empty3
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    25
  
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    26
  changeset:   1:097d2b0e17f6
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    27
  user:        test
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    28
  date:        Thu Jan 01 00:00:00 1970 +0000
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    29
  summary:     add empty2
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    30
  
3509
9de0e64545a3 Test that we notice the empty files from the second parent during a merge
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    31
12159
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    32
  $ hg merge 1
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    33
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    34
  (branch merge, don't forget to commit)
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    35
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    36
Before changeset 05257fd28591, we didn't notice the
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    37
empty file that came from rev 1:
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    38
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    39
  $ hg status
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    40
  M empty2
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    41
  $ hg commit -m merge
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    42
  $ hg manifest --debug tip
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    43
  b80de5d138758541c5f05265ad144ab9fa86d1db 644   empty1
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    44
  b80de5d138758541c5f05265ad144ab9fa86d1db 644   empty2
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    45
  b80de5d138758541c5f05265ad144ab9fa86d1db 644   empty3
8bedcfc38659 tests: unify test-empty-file
Adrian Buehlmann <adrian@cadifra.com>
parents: 12156
diff changeset
    46
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 12159
diff changeset
    47
  $ cd ..