Skip to content
Snippets Groups Projects
  1. Mar 11, 2025
  2. Feb 28, 2025
  3. Mar 06, 2025
  4. Mar 05, 2025
    • Pierre-Yves David's avatar
      branching: merging with 7.0 changes · e705fec4a03f
      Pierre-Yves David authored
      Since 6.9.3 was made after 7.0rc0 we need to deal with more branching than
      usual.
      e705fec4a03f
    • Pierre-Yves David's avatar
      stream-bundle: properly process requirements · 89ab2459f62a
      Pierre-Yves David authored
      When the manifest bundle constain some known requirement that does not affect
      the stream clone, we used to crash. However since we know them and know they
      don't affect the stream clone, we can ignore them.
      
      Mozilla generated such buggy manifest bundle for a time which allowed us to
      catch this error. The issue was not caught until 961900fbd67c (released in
      6.9.2) as the requirements information were ignored for stream-v2 until then.
      
      We fix the issue, refactor the code for robustness and adds more tests to better
      catch this kind of issue in the future.
      6.9.3
      89ab2459f62a
  5. Feb 22, 2025
  6. Feb 20, 2025
    • Matt Harbison's avatar
      test-fix-path: avoid a test hang on Windows · 3fb2fbad4b13
      Matt Harbison authored
      Windows can't typically invoke `*.py` directly as a command, and will instead
      show a prompt asking what program should be used to open the file.  We can't
      directly invoke the interpreter as is usually done in this case, because the
      whole point is to run something not in `PATH`.  The easiest thing to do is
      invoke a *.bat file that runs the interpreter.  We can get away with this
      because the current implementation is to effectively run `cmd.exe /c %command%`,
      which doesn't need the file extension specified.
      3fb2fbad4b13
  7. Feb 19, 2025
  8. Feb 03, 2023
    • Pierre-Yves David's avatar
      diff: add a --ignore-changes-from-ancestors option · 688665425496
      Pierre-Yves David authored
      This is a generalisation of the new feature from evolve but for any diff, it
      allow to compares changes to patches regardless of the changes introduced by
      ancestors, this is typically useful after rebase and graft.
      
      I am not very happy about the name, but it is still experimental, so that can
      be improved later.
      
      Having the ability to compare ranges of commit would probably be handy too, but
      this changeset focus in getting the basic case in. We have to think about the
      UI a bit ahead however.
      688665425496
  9. Feb 07, 2025
    • Mitchell Kember's avatar
      rhg-annotate: support whitespace options · 874c64e041b5
      Mitchell Kember authored
      This adds support to rhg annotate for all the whitespace options:
      
          -w, --ignore-all-space
          -b, --ignore-space-change
          -B, --ignore-blank-lines
          -Z, --ignore-space-at-eol
      
      Note that --ignore-blank-lines has no effect on annotate so it is ignored. You
      can see this in dagop.py _annotepair which only checks if blocks are '=' or not,
      whereas the effect of --ignore-blank-lines is to change some '!' into '~'.
      
      When the other 3 are combined, we use the strongest option since -w implies -b
      and -b implies -Z. This is not explicit in the Python implementation, but I have
      verified that's how it behaves.
      874c64e041b5
  10. Feb 12, 2025
  11. Feb 18, 2025
    • Pierre-Yves David's avatar
      branching: merge with stable · 42f78c859dd1
      Pierre-Yves David authored
      42f78c859dd1
    • Pierre-Yves David's avatar
      dirstatemap: stop setting identity after reading the data · e16065bb7f42
      Pierre-Yves David authored
      The code was calling `_set_identity` in too many places, resulting in fetching
      cache information after reading the on disk data. This could result in old data
      labelled with the identity of new, never loaded data.
      
      Fixing it solve the issue spotted in the previous changesets.
      
      Further cleanup are warranted but it seems more reasonable to do them on stable.
      e16065bb7f42
    • Pierre-Yves David's avatar
      dirstate-race: fix a missing synchronisation in the python code · 51a9148f8349
      Pierre-Yves David authored
      This was giving the wrong output in the `dirstate-v2-rewrite` case. As the
      dirstate is rewritten, the data file is missing and we reload the full dirstate.
      The make the dirstate reloaded after the commit and it no longer see the file as
      dirty.
      
      Note that if we were deleting the data file less aggressively, we would see the other
      output. (for example if we were keeping old data file around for some time
      before deletion).
      
      One last thing… fixing this reveal a quite serious bug where a `hg status`
      end up overwriting a `hg update` done concurrently. Hooray for proper testing.
      51a9148f8349
    • Pierre-Yves David's avatar
      dirstate-race: simplify some output match to highligh an error · 565191843567
      Pierre-Yves David authored
      `#if dirstate-v2` is always false, because `dirstate-v2` is not one of the test
      cases. So we fix the conditionnal and adjust the expected matching.
      
      This highlight that the rhg/no-rhg output differ because an issue in the code.
      We will fix that in the next changeset.
      565191843567
    • Pierre-Yves David's avatar
      dirstate-race: add more output to highlight a "to-be-revealed" bug · 5b36cb26c650
      Pierre-Yves David authored
      We are going to fix a bug in the test framework, that will reveal a fairly
      serious bug with the Rust code. So we update the test before hand for clarity.
      5b36cb26c650
    • Julien Cristau's avatar
      bundles: filter out unsupported requirements for non-packed1 format · 961900fbd67c
      Julien Cristau authored
      stream bundle specs specify requirements, but we were ignoring this when
      selecting which bundle to apply, causing spurious clone failures.
      961900fbd67c
  12. Feb 17, 2025
  13. Jan 27, 2025
    • Pierre-Yves David's avatar
      stream-clone-v2: introduce a way to limit memory usage of the threaded version · aee193b1c784
      Pierre-Yves David authored
      This mechanism limit the read-aheadto avoid uncontrolled memory usage. Note that
      the memory target is not a hard limit and that mercurial will use more memory
      that specified in some cases, but "not too much more".
      
      The current implementation focus on "simplicity" and could be more efficient.
      However this provide a "safe" baseline for the feature. Now that the overall
      shape of the feature is here we can start making it faster.
      
      Here is more benchmark of how everything slows down. The next series will focus
      on optimizing this code path to actually speeds things up.
      
      ### benchmark.name                         = hg.perf.exchange.stream.consume
        # bin-env-vars.hg.flavor                 = default
        # bin-env-vars.hg.py-re2-module          = default
        # benchmark.variants.memory-target       = default
        # benchmark.variants.num-writer          = default
        # benchmark.variants.parallel-processing = yes
        # benchmark.variants.progress            = no
        # benchmark.variants.read-from-memory    = yes
        # benchmark.variants.version             = v2
       ## data-env-vars.name                     = heptapod-public-2024-03-25-zstd-sparse-revlog
      no-thread:    7.244015  ~~~~~
      write-thread: 9.128669  (+26.02%, +1.88)
      read-thread:  9.387256  (+29.59%, +2.14)
      mem-target:   9.901032  (+36.68%, +2.66)
       ## data-env-vars.name                     = mercurial-public-2024-03-22-zstd-sparse-revlog
      no-thread:    0.249693  ~~~~~
      write-thread: 0.275081  (+10.17%, +0.03)
      read-thread:  0.292601  (+17.18%, +0.04)
      mem-target:   0.305973  (+22.54%, +0.06)
       ## data-env-vars.name                     = netbeans-2019-11-07-zstd-sparse-revlog
      no-thread:    13.136674  ~~~~~
      write-thread: 16.374306  (+24.65%, +3.24)
      read-thread:  17.008865  (+29.48%, +3.87)
      mem-target:   18.467590  (+40.58%, +5.33)
       ## data-env-vars.name                     = netbsd-xsrc-all-2024-09-19-zstd-sparse-revlog
      no-thread:    5.317709  ~~~~~
      write-thread: 6.783031  (+27.56%, +1.47)
      read-thread:  7.107141  (+33.65%, +1.79)
      mem-target:   7.338505  (+38.00%, +2.02)
       ## data-env-vars.name                     = netbsd-xsrc-draft-2024-09-19-zstd-sparse-revlog
      no-thread:    5.398368  ~~~~~
      write-thread: 6.737864  (+24.81%, +1.34)
      read-thread:  7.163505  (+32.70%, +1.77)
      mem-target:   7.333354  (+35.84%, +1.93)
       ## data-env-vars.name                     = pypy-2024-03-22-zstd-sparse-revlog
      no-thread:    3.acbb55  ~~~~~
      write-thread: 3.758324  (+22.48%, +0.69)
      read-thread:  3.907693  (+27.34%, +0.84)
      mem-target:   4.238172  (+38.11%, +1.17)
      
       ## data-env-vars.name                     = mozilla-central-2024-03-22-zstd-sparse-revlog
      no-thread:    51.934795  ~~~~~
      write-thread: 66.561340 (+28.16%, +14.63)
      read-thread:  66.902619 (+28.82%, +14.97)
      mem-target:   78.194540 (+50.56%, +26.26)
       ## data-env-vars.name                     = mozilla-unified-2024-03-22-zstd-sparse-revlog
        # benchmark.variants.read-from-memory    = yes
      no-thread:    52.253858  ~~~~~
      write-thread: 66.955037 (+28.13%, +14.70)
      read-thread:  66.397609 (+27.07%, +14.14)
      mem-target:   77.492938 (+48.30%, +25.24)
       ## data-env-vars.name                     = mozilla-try-2024-03-26-zstd-sparse-revlog
        # benchmark.variants.read-from-memory    = no
      no-thread:    130.584329  ~~~~~
      write-thread: 138.770454   (+6.27%, +8.19)
      read-thread:  145.137477 (+11.14%, +14.55)
      mem-target:   164.366925 (+25.87%, +33.78)
      aee193b1c784
  14. Jan 21, 2025
    • Pierre-Yves David's avatar
      stream-clone-v2: use the pass through for threaded stream clone · 9abf173a958b
      Pierre-Yves David authored
      The reader thread just want to iterate over chunk, so let it do just that. This avoid some silly layer of filechunkiter and chunk buffer.
      
      Before this change, we had the following layers:
      
          bundle2part (iterator of chunks)
          → chunkbuffer (iterator of chunks to file-like)
          → filechunkiter (file-like to chunkgs)
          → _DataQueue (thread safe iterator of chunks)
          → chunkbuffer (iterator of chunks to file-like).
      
      We now have removed the first layer of chunkbuffer + filechunkiter:
      
          bundle2part (iterator of chunks)
          → _DataQueue (thread safe iterator of chunks)
          → chunkbuffer (iterator of chunks to file-like).
      
      This fix the output order change that was previously introduced.
      9abf173a958b
  15. Jan 20, 2025
    • Pierre-Yves David's avatar
      stream-clone-v2: also use a thread to read the streamed data · d5ae681834e8
      Pierre-Yves David authored
      We could do useful thing while waiting for data, so we introduce another thread
      dedicated to reading the bundle data and pass them to the thread parsing the
      bundle.
      
      This has a small impact on test output because the bundle part is consumed at a
      different time. However this will be smoothed out very soon so lets ignore that
      for now.
      
      As for the previous patch, the speed up in not there yet. We need to adjust
      various part of the implementation to see some benefit. However, this put the
      generic architecture in place so that we can focus on performance later.
      
      Below are some benchmark result to highlight the slowdown.
      
      ### benchmark.name                         = hg.perf.exchange.stream.consume
        # bin-env-vars.hg.flavor                 = default
        # bin-env-vars.hg.py-re2-module          = default
        # benchmark.variants.memory-target       = default
        # benchmark.variants.num-writer          = default
        # benchmark.variants.parallel-processing = yes
        # benchmark.variants.progress            = no
        # benchmark.variants.read-from-memory    = yes
        # benchmark.variants.version             = v2
       ## data-env-vars.name                     = heptapod-public-2024-03-25-zstd-sparse-revlog
      no-thread:    7.244015  ~~~~~
      write-thread: 9.128669  (+26.02%, +1.88)
      read-thread:  9.387256  (+29.59%, +2.14)
       ## data-env-vars.name                     = mercurial-public-2024-03-22-zstd-sparse-revlog
      no-thread:    0.249693  ~~~~~
      write-thread: 0.275081  (+10.17%, +0.03)
      read-thread:  0.292601  (+17.18%, +0.04)
       ## data-env-vars.name                     = netbeans-2019-11-07-zstd-sparse-revlog
      no-thread:    13.136674  ~~~~~
      write-thread: 16.374306  (+24.65%, +3.24)
      read-thread:  17.008865  (+29.48%, +3.87)
       ## data-env-vars.name                     = netbsd-xsrc-all-2024-09-19-zstd-sparse-revlog
      no-thread:    5.317709  ~~~~~
      write-thread: 6.783031  (+27.56%, +1.47)
      read-thread:  7.107141  (+33.65%, +1.79)
       ## data-env-vars.name                     = netbsd-xsrc-draft-2024-09-19-zstd-sparse-revlog
      no-thread:    5.398368  ~~~~~
      write-thread: 6.737864  (+24.81%, +1.34)
      read-thread:  7.163505  (+32.70%, +1.77)
       ## data-env-vars.name                     = pypy-2024-03-22-zstd-sparse-revlog
      no-thread:    3.acbb55  ~~~~~
      write-thread: 3.758324  (+22.48%, +0.69)
      read-thread:  3.907693  (+27.34%, +0.84)
       ## data-env-vars.name                     = mozilla-central-2024-03-22-zstd-sparse-revlog
      no-thread:    51.934795  ~~~~~
      write-thread: 66.561340 (+28.16%, +14.63)
      read-thread:  66.902619 (+28.82%, +14.97)
       ## data-env-vars.name                     = mozilla-unified-2024-03-22-zstd-sparse-revlog
      no-thread:    52.253858  ~~~~~
      write-thread: 66.955037 (+28.13%, +14.70)
      read-thread:  66.397609 (+27.07%, +14.14)
       ## data-env-vars.name                     = mozilla-try-2024-03-26-zstd-sparse-revlog
        # benchmark.variants.read-from-memory    = no
      no-thread:    130.584329  ~~~~~
      write-thread: 138.770454   (+6.27%, +8.19)
      read-thread:  145.137477 (+11.14%, +14.55)
      d5ae681834e8
    • Pierre-Yves David's avatar
      stream-clone-v2: use dedicated threads to write the data on disk · 7f848cfc4286
      Pierre-Yves David authored
      This could provide a significant performance boost, but various implementation
      details means it is currently slower. More update will help make this boost
      real, but here is the basic idea. The implementation in this patch is unbounded
      in memory which could be a problem in some situation. We will deal with that
      soon.
      
      There is the benchmark result showing a slower run
      
      ### benchmark.name                         = hg.perf.exchange.stream.consume
        # bin-env-vars.hg.flavor                 = default
        # bin-env-vars.hg.py-re2-module          = default
        # benchmark.variants.parallel-processing = yes
        # benchmark.variants.progress            = no
        # benchmark.variants.read-from-memory    = yes
        # benchmark.variants.version             = v2
       ## data-env-vars.name                     = mercurial-public-2024-03-22-zstd-sparse-revlog
      before: 0.249693  ~~~~~
      after:  0.275081  (+10.17%, +0.03)
       ## data-env-vars.name                     = netbsd-xsrc-all-2024-09-19-zstd-sparse-revlog
      before: 5.317709  ~~~~~
      after:  6.783031  (+27.56%, +1.47)
       ## data-env-vars.name                     = netbsd-xsrc-draft-2024-09-19-zstd-sparse-revlog
      before: 5.398368  ~~~~~
      after:  6.737864  (+24.81%, +1.34)
       ## data-env-vars.name                     = pypy-2024-03-22-zstd-sparse-revlog
      before: 3.acbb55  ~~~~~
      after:  3.758324  (+22.48%, +0.69)
       ## data-env-vars.name                     = heptapod-public-2024-03-25-zstd-sparse-revlog
      before: 7.244015  ~~~~~
      after:  9.128669  (+26.02%, +1.88)
       ## data-env-vars.name                     = netbeans-2019-11-07-zstd-sparse-revlog
      before: 13.136674  ~~~~~
      after:  16.374306  (+24.65%, +3.24)
       ## data-env-vars.name                     = mozilla-unified-2024-03-22-zstd-sparse-revlog
      before: 52.253858  ~~~~~
      after:  66.955037 (+28.13%, +14.70)
       ## data-env-vars.name                     = mozilla-central-2024-03-22-zstd-sparse-revlog
      before: 51.934795  ~~~~~
      after:  66.561340 (+28.16%, +14.63)
       ## data-env-vars.name                     = mozilla-try-2024-03-26-zstd-sparse-revlog
        # benchmark.variants.read-from-memory    = no
      before: 130.584329  ~~~~~
      after:  138.770454   (+6.27%, +8.19)
      7f848cfc4286
  16. Feb 13, 2025
    • Raphaël Gomès's avatar
      index: remember the generaldelta config instead of getting it from the revlog · 8de68446a5bd
      Raphaël Gomès authored
      The code (especially the Rust code) was jumping in 4 dimensions to make sense
      of what was going on because it wrongly assumed that we needed to somehow
      be able to ask a generaldelta index for a non-generaldelta delta chain, which
      doesn't make any sense.
      
      Removing the cargo-culted/vestigial code, this is cleaner and less confusing.
      8de68446a5bd
  17. Feb 10, 2025
    • Pierre-Yves David's avatar
      cleanup: remove the sqlitestore extension · e6069f84abbb
      Pierre-Yves David authored
      The idea of having a clear storage interface and a small extension to test it
      was not bad in theory. However this never materialize to anything concrete, and
      nobody has touched this extensions for over 6 years. So it is mainly getting in
      the way of other works.
      
      Incidently, the clarification of interface is seeing progress thanks to the Matt
      Harbison typing effort and the slow rewrite into rust of core element led by
      Octobus.
      
      So I suggest we drop this extension, freeing energy for other improvements.
      e6069f84abbb
    • Pierre-Yves David's avatar
      test-storage: actually allow things to run with rust · 513b518d07d7
      Pierre-Yves David authored
      The tests seems to run fine with `--rust` now ¯\_(ツ)_/¯
      513b518d07d7
    • Pierre-Yves David's avatar
      test-storage: add an explanation for the skip · 6dafd64d7bc1
      Pierre-Yves David authored
      It is kind of useful to know why things happens.
      6dafd64d7bc1
  18. Jan 07, 2025
    • Raphaël Gomès's avatar
      rust-pyo3: switch over to the pyo3 `InnerRevlog` · e52dc683bf6b
      Raphaël Gomès authored
      This does many things that would involve a lot of churn if done separately:
      	- Move the ancestors, revision and dagops modules to use the
      	  new `SharedByPyObject` instead of the old `UnsafePyLeaked`
      	- Move the ancestors and discovery Python tests to using PyO3
      	- Change all calls to `importrust` to use `pyo3=True`, where applicable
      
      # Benchmarks
      
      I've run a bunch of benchmarks that involve revlog use. The TL;DR is that
      the pyo3 code is basically always very slightly faster if/when it's not within
      the noise levels.
      
      Here is the report:
      
      ```
      ### data-env-vars.name            = heptapod-public-2024-03-25-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 8.425445  ~~~~~
       after: 8.170007   (-3.03%, -0.26)
      ### data-env-vars.name            = heptapod-public-2024-03-25-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 8.328969  ~~~~~
       after: 8.193693   (-1.62%, -0.14)
      ### data-env-vars.name            = heptapod-public-2024-03-25-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.318721  ~~~~~
       after: 0.317050
      ### data-env-vars.name            = heptapod-public-2024-03-25-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.315603  ~~~~~
       after: 0.311842   (-1.19%, -0.00)
      ### data-env-vars.name            = heptapod-public-2024-03-25-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 15.422452  ~~~~~
       after: 15.417195
      ### data-env-vars.name            = heptapod-public-2024-03-25-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 15.424805  ~~~~~
       after: 15.417188
      ### data-env-vars.name            = heptapod-public-2024-03-25-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 8.447181  ~~~~~
       after: 8.279321   (-1.99%, -0.17)
      ### data-env-vars.name            = heptapod-public-2024-03-25-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 8.399840  ~~~~~
       after: 8.310752   (-1.06%, -0.09)
      ### data-env-vars.name            = heptapod-public-2024-03-25-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.352319  ~~~~~
       after: 0.353375
      ### data-env-vars.name            = heptapod-public-2024-03-25-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.322006  ~~~~~
       after: 0.323852
      ### data-env-vars.name            = heptapod-public-2024-03-25-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 16.183304  ~~~~~
       after: 16.177351
      ### data-env-vars.name            = heptapod-public-2024-03-25-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 16.169041  ~~~~~
       after: 16.173200
      ### data-env-vars.name            = mercurial-public-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 0.559746  ~~~~~
       after: 0.548727   (-1.97%, -0.01)
      ### data-env-vars.name            = mercurial-public-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 0.551662  ~~~~~
       after: 0.548478
      ### data-env-vars.name            = mercurial-public-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.294767  ~~~~~
       after: 0.291008   (-1.28%, -0.00)
      ### data-env-vars.name            = mercurial-public-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.290598  ~~~~~
       after: 0.288139
      ### data-env-vars.name            = mercurial-public-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.128753  ~~~~~
       after: 0.127942
      ### data-env-vars.name            = mercurial-public-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.128310  ~~~~~
       after: 0.128236
      ### data-env-vars.name            = mercurial-public-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 4.968975  ~~~~~
       after: 4.804225   (-3.32%, -0.16)
      ### data-env-vars.name            = mercurial-public-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 5.038150  ~~~~~
       after: 4.821872   (-4.29%, -0.22)
      ### data-env-vars.name            = mercurial-public-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 0.560542  ~~~~~
       after: 0.557323
      ### data-env-vars.name            = mercurial-public-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 0.554099  ~~~~~
       after: 0.553200
      ### data-env-vars.name            = mercurial-public-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.292676  ~~~~~
       after: 0.292513
      ### data-env-vars.name            = mercurial-public-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.288629  ~~~~~
       after: 0.287737
      ### data-env-vars.name            = mercurial-public-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.223442  ~~~~~
       after: 0.223168
      ### data-env-vars.name            = mercurial-public-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.223376  ~~~~~
       after: 0.222181
      ### data-env-vars.name            = mercurial-public-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 4.691464  ~~~~~
       after: 4.567641   (-2.64%, -0.12)
      ### data-env-vars.name            = mercurial-public-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 4.700062  ~~~~~
       after: 4.616739   (-1.77%, -0.08)
      ### data-env-vars.name            = mercurial-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 0.708915  ~~~~~
       after: 0.697581   (-1.60%, -0.01)
      ### data-env-vars.name            = mercurial-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 0.698667  ~~~~~
       after: 0.693792
      ### data-env-vars.name            = mercurial-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.302459  ~~~~~
       after: 0.296517   (-1.96%, -0.01)
      ### data-env-vars.name            = mercurial-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.297432  ~~~~~
       after: 0.293347   (-1.37%, -0.00)
      ### data-env-vars.name            = mercurial-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.200229  ~~~~~
       after: 0.199035
      ### data-env-vars.name            = mercurial-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.199995  ~~~~~
       after: 0.199130
      ### data-env-vars.name            = mercurial-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 0.712384  ~~~~~
       after: 0.703804   (-1.20%, -0.01)
      ### data-env-vars.name            = mercurial-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 0.704736  ~~~~~
       after: 0.699944
      ### data-env-vars.name            = mercurial-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.300989  ~~~~~
       after: 0.300870
      ### data-env-vars.name            = mercurial-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.296388  ~~~~~
       after: 0.295122
      ### data-env-vars.name            = mercurial-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.323753  ~~~~~
       after: 0.328260   (+1.39%, +0.00)
      ### data-env-vars.name            = mercurial-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.326091  ~~~~~
       after: 0.325825
      ### data-env-vars.name            = mozilla-central-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 36.797693  ~~~~~
       after: 35.395390   (-3.81%, -1.40)
      ### data-env-vars.name            = mozilla-central-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 36.400602  ~~~~~
       after: 35.793828   (-1.67%, -0.61)
      ### data-env-vars.name            = mozilla-central-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.303372  ~~~~~
       after: 0.302275
      ### data-env-vars.name            = mozilla-central-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.300228  ~~~~~
       after: 0.299014
      ### data-env-vars.name            = mozilla-central-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 133.610273  ~~~~~
       after: 134.082667
      ### data-env-vars.name            = mozilla-central-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 133.560602  ~~~~~
       after: 133.560186
      ### data-env-vars.name            = mozilla-central-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 32.279654  ~~~~~
       after: 31.937365   (-1.06%, -0.34)
      ### data-env-vars.name            = mozilla-central-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 32.393790  ~~~~~
       after: 32.059161   (-1.03%, -0.33)
      ### data-env-vars.name            = mozilla-central-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 36.750314  ~~~~~
       after: 35.659837   (-2.97%, -1.09)
      ### data-env-vars.name            = mozilla-central-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 36.132511  ~~~~~
       after: 35.533999   (-1.66%, -0.60)
      ### data-env-vars.name            = mozilla-central-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.426249  ~~~~~
       after: 0.427237
      ### data-env-vars.name            = mozilla-central-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.297567  ~~~~~
       after: 0.297548
      ### data-env-vars.name            = mozilla-central-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 135.684726  ~~~~~
       after: 135.554733
      ### data-env-vars.name            = mozilla-central-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 135.521429  ~~~~~
       after: 135.471735
      ### data-env-vars.name            = mozilla-central-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 32.138181  ~~~~~
       after: 31.376612   (-2.37%, -0.76)
      ### data-env-vars.name            = mozilla-central-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 32.436170  ~~~~~
       after: 31.800662   (-1.96%, -0.64)
      ### data-env-vars.name            = mozilla-central-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 56.412651  ~~~~~
       after: 55.968979
      ### data-env-vars.name            = mozilla-central-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 57.291139  ~~~~~
       after: 55.623600   (-2.91%, -1.67)
      ### data-env-vars.name            = mozilla-central-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.305015  ~~~~~
       after: 0.302645
      ### data-env-vars.name            = mozilla-central-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.299651  ~~~~~
       after: 0.296140   (-1.17%, -0.00)
      ### data-env-vars.name            = mozilla-central-2024-03-22-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 372.603646  ~~~~~
       after: 379.958592   (+1.97%, +7.35)
      ### data-env-vars.name            = mozilla-central-2024-03-22-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 372.571283  ~~~~~
       after: 376.975082   (+1.18%, +4.40)
      ### data-env-vars.name            = mozilla-central-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 57.900620  ~~~~~
       after: 56.628974   (-2.20%, -1.27)
      ### data-env-vars.name            = mozilla-central-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 56.772457  ~~~~~
       after: 56.219994
      ### data-env-vars.name            = mozilla-central-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.497401  ~~~~~
       after: 0.498934
      ### data-env-vars.name            = mozilla-central-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.298446  ~~~~~
       after: 0.297411
      ### data-env-vars.name            = mozilla-central-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 376.794500  ~~~~~
       after: 377.126872
      ### data-env-vars.name            = mozilla-central-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 377.108643  ~~~~~
       after: 378.355222
      ### data-env-vars.name            = mozilla-try-2024-03-26-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 58.211350  ~~~~~
       after: 56.179941   (-3.49%, -2.03)
      ### data-env-vars.name            = mozilla-try-2024-03-26-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 1.221867  ~~~~~
       after: 1.171836   (-4.09%, -0.05)
      ### data-env-vars.name            = mozilla-try-2024-03-26-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = yes
        # benchmark.variants.rev        = none
      before: 169.190180  ~~~~~
       after: 167.816681
      ### data-env-vars.name                             = mozilla-try-2024-03-26-ds2-pnm
        # benchmark.name                                 = hg.command.unbundle
        # bin-env-vars.hg.flavor                         = rust
        # bin-env-vars.hg.py-re2-module                  = default
        # benchmark.variants.issue6528                   = default
        # benchmark.variants.resource-usage              = default
        # benchmark.variants.reuse-external-delta-parent = default
        # benchmark.variants.revs                        = any-10000-extra-rev
        # benchmark.variants.source                      = unbundle
        # benchmark.variants.validate                    = default
        # benchmark.variants.verbosity                   = quiet
      before: 70.573063  ~~~~~
       after: 70.149730
      ### data-env-vars.name            = mozilla-try-2024-03-26-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 2469.554928  ~~~~~
       after: 2459.756854
      ### data-env-vars.name            = mozilla-try-2024-03-26-ds2-pnm
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 63.259498  ~~~~~
       after: 62.934324
      ### data-env-vars.name            = mozilla-unified-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 52.009024  ~~~~~
       after: 51.021327   (-1.90%, -0.99)
      ### data-env-vars.name            = mozilla-unified-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 52.021120  ~~~~~
       after: 51.187100   (-1.60%, -0.83)
      ### data-env-vars.name            = mozilla-unified-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.316214  ~~~~~
       after: 0.313213
      ### data-env-vars.name            = mozilla-unified-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.314039  ~~~~~
       after: 0.309434   (-1.47%, -0.00)
      ### data-env-vars.name            = mozilla-unified-2024-03-22-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 419.229602  ~~~~~
       after: 418.731461
      ### data-env-vars.name            = mozilla-unified-2024-03-22-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 419.121169  ~~~~~
       after: 418.893086
      ### data-env-vars.name            = mozilla-unified-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 52.298052  ~~~~~
       after: 51.680823   (-1.18%, -0.62)
      ### data-env-vars.name            = mozilla-unified-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 51.979719  ~~~~~
       after: 50.517619   (-2.81%, -1.46)
      ### data-env-vars.name            = mozilla-unified-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.542347  ~~~~~
       after: 0.541494
      ### data-env-vars.name            = mozilla-unified-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.361585  ~~~~~
       after: 0.359601
      ### data-env-vars.name            = mozilla-unified-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 424.435573  ~~~~~
       after: 425.054393
      ### data-env-vars.name            = mozilla-unified-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 425.369579  ~~~~~
       after: 424.182501
      ### data-env-vars.name            = netbeans-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 17.169597  ~~~~~
       after: 16.809620   (-2.10%, -0.36)
      ### data-env-vars.name            = netbeans-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 17.052174  ~~~~~
       after: 16.873865   (-1.05%, -0.18)
      ### data-env-vars.name            = netbeans-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.300405  ~~~~~
       after: 0.296493   (-1.30%, -0.00)
      ### data-env-vars.name            = netbeans-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.296907  ~~~~~
       after: 0.291884   (-1.69%, -0.01)
      ### data-env-vars.name            = netbeans-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 76.353166  ~~~~~
       after: 76.315550
      ### data-env-vars.name            = netbeans-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 76.304418  ~~~~~
       after: 76.314896
      ### data-env-vars.name            = netbeans-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 41.448226  ~~~~~
       after: 39.696075   (-4.23%, -1.75)
      ### data-env-vars.name            = netbeans-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 41.489911  ~~~~~
       after: 40.213760   (-3.08%, -1.28)
      ### data-env-vars.name            = netbeans-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 17.276211  ~~~~~
       after: 16.934238   (-1.98%, -0.34)
      ### data-env-vars.name            = netbeans-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 17.275566  ~~~~~
       after: 17.151560
      ### data-env-vars.name            = netbeans-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.363647  ~~~~~
       after: 0.364217
      ### data-env-vars.name            = netbeans-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.292249  ~~~~~
       after: 0.293737
      ### data-env-vars.name            = netbeans-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 77.242740  ~~~~~
       after: 77.165247
      ### data-env-vars.name            = netbeans-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 77.189009  ~~~~~
       after: 77.153971
      ### data-env-vars.name            = netbeans-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 40.341299  ~~~~~
       after: 40.604985
      ### data-env-vars.name            = netbeans-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 40.585503  ~~~~~
       after: 40.820806
      ### data-env-vars.name            = netbeans-2019-11-07-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 17.515332  ~~~~~
       after: 17.190762   (-1.85%, -0.32)
      ### data-env-vars.name            = netbeans-2019-11-07-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 17.343596  ~~~~~
       after: 17.050369   (-1.69%, -0.29)
      ### data-env-vars.name            = netbeans-2019-11-07-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.316108  ~~~~~
       after: 0.315292
      ### data-env-vars.name            = netbeans-2019-11-07-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.311521  ~~~~~
       after: 0.307919   (-1.16%, -0.00)
      ### data-env-vars.name            = netbeans-2019-11-07-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 80.169792  ~~~~~
       after: 80.090093
      ### data-env-vars.name            = netbeans-2019-11-07-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 80.168257  ~~~~~
       after: 80.203922
      ### data-env-vars.name            = netbeans-2019-11-07-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 17.471723  ~~~~~
       after: 17.104498   (-2.10%, -0.37)
      ### data-env-vars.name            = netbeans-2019-11-07-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 17.351268  ~~~~~
       after: 17.039244   (-1.80%, -0.31)
      ### data-env-vars.name            = netbeans-2019-11-07-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.379920  ~~~~~
       after: 0.380529
      ### data-env-vars.name            = netbeans-2019-11-07-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.306940  ~~~~~
       after: 0.308172
      ### data-env-vars.name            = netbeans-2019-11-07-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 81.143787  ~~~~~
       after: 81.205227
      ### data-env-vars.name            = netbeans-2019-11-07-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 81.208757  ~~~~~
       after: 81.201285
      ### data-env-vars.name            = pypy-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.409354  ~~~~~
       after: 1.384783   (-1.74%, -0.02)
      ### data-env-vars.name            = pypy-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.395327  ~~~~~
       after: 1.379295   (-1.15%, -0.02)
      ### data-env-vars.name            = pypy-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.305516  ~~~~~
       after: 0.301302   (-1.38%, -0.00)
      ### data-env-vars.name            = pypy-2018-08-01-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.300681  ~~~~~
       after: 0.296424   (-1.42%, -0.00)
      ### data-env-vars.name            = pypy-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 1.228350  ~~~~~
       after: 1.225184
      ### data-env-vars.name            = pypy-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 1.227250  ~~~~~
       after: 1.226652
      ### data-env-vars.name            = pypy-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 10.441251  ~~~~~
       after: 10.233845   (-1.99%, -0.21)
      ### data-env-vars.name            = pypy-2018-08-01-ds2-pnm
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 10.477187  ~~~~~
       after: 10.518723
      ### data-env-vars.name            = pypy-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.406229  ~~~~~
       after: 1.383834   (-1.59%, -0.02)
      ### data-env-vars.name            = pypy-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.404700  ~~~~~
       after: 1.386296   (-1.31%, -0.02)
      ### data-env-vars.name            = pypy-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.303247  ~~~~~
       after: 0.304695
      ### data-env-vars.name            = pypy-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.295575  ~~~~~
       after: 0.294873
      ### data-env-vars.name            = pypy-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 1.614998  ~~~~~
       after: 1.619019
      ### data-env-vars.name            = pypy-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 1.608089  ~~~~~
       after: 1.613761
      ### data-env-vars.name            = pypy-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 10.494740  ~~~~~
       after: 10.183642   (-2.96%, -0.31)
      ### data-env-vars.name            = pypy-2018-08-01-zstd-sparse-revlog
        # benchmark.name                = hg.perf.unbundle
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = default
        # benchmark.variants.revs       = any-10000-extra-rev
        # benchmark.variants.source     = default
      before: 10.153362  ~~~~~
       after: 10.208118
      ### data-env-vars.name            = pypy-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.613760  ~~~~~
       after: 1.595667   (-1.12%, -0.02)
      ### data-env-vars.name            = pypy-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.601770  ~~~~~
       after: 1.589591
      ### data-env-vars.name            = pypy-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.300656  ~~~~~
       after: 0.299511
      ### data-env-vars.name            = pypy-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.298116  ~~~~~
       after: 0.34f44a
      ### data-env-vars.name            = pypy-2024-03-22-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 1.451637  ~~~~~
       after: 1.449828
      ### data-env-vars.name            = pypy-2024-03-22-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 1.447463  ~~~~~
       after: 1.447144
      ### data-env-vars.name            = pypy-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.618347  ~~~~~
       after: 1.593819   (-1.52%, -0.02)
      ### data-env-vars.name            = pypy-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.610104  ~~~~~
       after: 1.591181   (-1.18%, -0.02)
      ### data-env-vars.name            = pypy-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.299082  ~~~~~
       after: 0.302411   (+1.11%, +0.00)
      ### data-env-vars.name            = pypy-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.294385  ~~~~~
       after: 0.294103
      ### data-env-vars.name            = pypy-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 1.896348  ~~~~~
       after: 1.892661
      ### data-env-vars.name            = pypy-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 1.897075  ~~~~~
       after: 1.896864
      ### data-env-vars.name            = tryton-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.823667  ~~~~~
       after: 1.791246   (-1.78%, -0.03)
      ### data-env-vars.name            = tryton-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.820555  ~~~~~
       after: 1.765854   (-3.00%, -0.05)
      ### data-env-vars.name            = tryton-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.340665  ~~~~~
       after: 0.336729   (-1.16%, -0.00)
      ### data-env-vars.name            = tryton-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.335204  ~~~~~
       after: 0.333865
      ### data-env-vars.name            = tryton-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.262541  ~~~~~
       after: 0.261794
      ### data-env-vars.name            = tryton-public-2024-03-22-ds2-pnm
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.261495  ~~~~~
       after: 0.260879
      ### data-env-vars.name            = tryton-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.856138  ~~~~~
       after: 1.784902   (-3.84%, -0.07)
      ### data-env-vars.name            = tryton-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.cat
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.files      = all-root
        # benchmark.variants.output     = plain
        # benchmark.variants.rev        = tip
      before: 1.811432  ~~~~~
       after: 1.782845   (-1.58%, -0.03)
      ### data-env-vars.name            = tryton-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.343215  ~~~~~
       after: 0.341859
      ### data-env-vars.name            = tryton-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.command.log
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.limit-rev  = 1000
        # benchmark.variants.patch      = no
        # benchmark.variants.rev        = none
      before: 0.332617  ~~~~~
       after: 0.331202
      ### data-env-vars.name            = tryton-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rhg
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.590326  ~~~~~
       after: 0.590407
      ### data-env-vars.name            = tryton-public-2024-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.read-revisions
        # bin-env-vars.hg.flavor        = rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.order      = default
        # benchmark.variants.revlog     = manifestlog
      before: 0.589567  ~~~~~
       after: 0.588821
      ```
      e52dc683bf6b
  19. Jan 02, 2025
  20. Dec 25, 2024
    • Georges Racinet's avatar
      rust-pyo3-index: _index_headrevs · adf91dfe6c04
      Georges Racinet authored
      This one demonstrates that why the `with_index_read` and similar
      helpers are useful and was actually the main motivation for doing
      them: if we kept the borrow used to grab the index before updating
      the caches, there would be a panic when calling `borrow_mut`.
      This was confirmed with an earlier version by the Python test.
      
      There are perhaps some internal API clarifications to be made, as
      the method updating the cache does a seemingly useless return), but
      we are keeping it as it was in `hg-cpython`.
      adf91dfe6c04
  21. Dec 22, 2024
  22. Dec 25, 2024
    • Georges Racinet's avatar
      rust-pyo3-index: first mutating methods · 34f44aa5e844
      Georges Racinet authored
      This brings in `append()` and `__delitem__`, and is for us the
      first validation of our inner mutability.
      
      In the case of `__delitem__`, there was a tricky case where we
      were tempted to use the higher level `PySlice::indices` API, with
      a possible dangerous change of behaviour. We test it carefully from
      the Python side.
      34f44aa5e844
    • Georges Racinet's avatar
      rust-pyo3-revlog: _index___len__ · e5f89bd1a5ee
      Georges Racinet authored
      e5f89bd1a5ee
Loading