tests/test-strip-branch-cache.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 09 Apr 2024 22:37:15 +0200
changeset 51595 3a6fae3bef35
parent 51493 82c1a388e86a
permissions -rw-r--r--
outgoing: add a simple fastpath when there is no common This further speed up case like `hg bundle --all` for larger repository. ### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog # benchmark.name = hg.command.bundle # bin-env-vars.hg.flavor = default # bin-env-vars.hg.py-re2-module = default # benchmark.variants.revs = all # benchmark.variants.type = none-streamv2 before: 316.749699 after: 311.165461 (-1.76%, -5.58) There is further work to be done in this area like not doing any outgoing computation in the stream case for example. however the recent changes already gives use a large win for a small amount of local work. ### benchmark.name = hg.command.bundle # bin-env-vars.hg.flavor = default # bin-env-vars.hg.py-re2-module = default # benchmark.variants.revs = all # benchmark.variants.type = none-streamv2 ## data-env-vars.name = mercurial-public-2024-03-22-zstd-sparse-revlog pre-%ln-change: 1.263859 the-%ln-change: 0.700229 (-44.60%, -0.56) prev-changeset: 0.496050 (-60.75%, -0.77) this-changeset: 0.495243 (-60.81%, -0.77) ## data-env-vars.name = tryton-public-2024-03-22-zstd-sparse-revlog pre-%ln-change: 2.975765 the-%ln-change: 1.870798 (-37.13%, -1.10) prev-changeset: 1.461583 (-50.88%, -1.51) this-changeset: 1.469185 (-50.63%, -1.51) ## data-env-vars.name = pypy-2024-03-22-zstd-sparse-revlog pre-%ln-change: 4.540080 the-%ln-change: 3.401700 (-25.07%, -1.14) prev-changeset: 2.915810 (-35.78%, -1.62) this-changeset: 2.911643 (-35.87%, -1.63) ## data-env-vars.name = heptapod-public-2024-03-25-zstd-sparse-revlog pre-%ln-change: 10.138396 the-%ln-change: 7.750458 (-23.55%, -2.39) prev-changeset: 6.665565 (-34.25%, -3.47) this-changeset: 6.672078 (-34.19%, -3.47) ## data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog pre-%ln-change: 399.484481 the-%ln-change: 346.508952 (-13.26%, -52.98) prev-changeset: 316.749699 (-20.71%, -82.73) this-changeset: 311.165461 (-22.11%, -88.32)

This test cover a bug that no longer exist.

Define helpers.

  $ hg_log () { hg log -G -T "{rev}:{node|short}"; }
  $ commit () { echo "foo - ${2:-$1}" > $1; hg commit -Aqm "Edited $1"; }
  $ strip() { hg --config extensions.strip= strip -q -r "$1" ; }

Setup hg repo.

  $ hg init repo
  $ cd repo
  $ touch x; hg add x; hg commit -m "initial"
  $ hg clone -q . ../clone
  $ commit a

  $ cd ../clone

  $ commit b

  $ hg pull -q ../repo

  $ ls -1 .hg/cache/branch?*
  .hg/cache/branch2-base
  .hg/cache/branch2-served
  $ cat .hg/cache/branch?-served
  222ae9789a75703f9836e44de7db179cbfd420ee 2
  a3498d6e39376d2456425dd8c692367bdbf00fa2 o default
  222ae9789a75703f9836e44de7db179cbfd420ee o default

  $ hg_log
  o  2:222ae9789a75
  |
  | @  1:a3498d6e3937
  |/
  o  0:7ab0a3bd758a
  

  $ strip '1:'

After the strip the "served" cache is now identical to the "base" one, and the
older one have been actively deleted.

  $ ls -1 .hg/cache/branch?*
  .hg/cache/branch2-base
  $ cat .hg/cache/branch?-base
  7ab0a3bd758a58b9f79557ce708533e627776cce 0
  7ab0a3bd758a58b9f79557ce708533e627776cce o default

We do a new commit and we get a new valid branchmap for the served version

  $ commit c
  $ ls -1 .hg/cache/branch?*
  .hg/cache/branch2-base
  .hg/cache/branch2-served
  $ cat .hg/cache/branch?-served
  a1602b357cfca067600406eb19060c7128804d72 1
  a1602b357cfca067600406eb19060c7128804d72 o default


On pull we end up with the same tip, and so wrongly reuse the invalid cache and crash.

  $ hg pull ../repo --quiet
  $ hg heads -T '{rev} {node} {branch}\n'
  2 222ae9789a75703f9836e44de7db179cbfd420ee default
  1 a1602b357cfca067600406eb19060c7128804d72 default
  $ ls -1 .hg/cache/branch?*
  .hg/cache/branch2-base
  .hg/cache/branch2-served
  $ cat .hg/cache/branch?-served
  222ae9789a75703f9836e44de7db179cbfd420ee 2
  a1602b357cfca067600406eb19060c7128804d72 o default
  222ae9789a75703f9836e44de7db179cbfd420ee o default