Skip to content
  • Pierre-Yves David's avatar
    revset: stop serializing node when using "%ln" · de5bf3fe0233
    Pierre-Yves David authored
    Turning hundred of thousand of node from node to hex and back can be slow… what
    about we stop doing it?
    
    In many case were we are using node id we should be using revision id. However
    this is not a good reason to have a stupidly slow implementation of "%ln".
    
    This caught my attention again because the phase discovery during push make an
    extensive use of "%ln" or huge set. In absolute, that phase discovery probably
    should use "%ld" and need to improves its algorithmic complexity, but improving
    "%ln" seems simple and long overdue. This greatly speeds up `hg push` on
    repository with many drafts.
    
    Here are some relevant poulpe benchmarks:
    
    ### data-env-vars.name                             = mozilla-try-2023-03-22-zstd-sparse-revlog
      # benchmark.name                                 = hg.command.push
      # bin-env-vars.hg.flavor                         = default
      # bin-env-vars.hg.py-re2-module                  = default
      # benchmark.variants.explicit-rev                = all-out-heads
      # benchmark.variants.issue6528                   = disabled
      # benchmark.variants.protocol                    = ssh
      # benchmark.variants.reuse-external-delta-parent = default
    
     ## benchmark.variants.revs                        = any-1-extra-rev
    before: 44.235070
    after:  20.416329 (-53.85%, -23.82)
     ## benchmark.variants.revs                        = any-100-extra-rev
    before: 49.234697
    after:  26.519829 (-46.14%, -22.71)
    
    
    
    ### 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            = heptapod-public-2024-03-25-zstd-sparse-revlog
    before:  10.138396
    after:    7.750458  (-23.55%, -2.39)
     ## data-env-vars.name            = mercurial-public-2024-03-22-zstd-sparse-revlog
    before:   1.263859
    after:    0.700229  (-44.60%, -0.56)
     ## data-env-vars.name            = mozilla-try-2023-03-22-zstd-sparse-revlog
    before: 399.484481
    after:  346.5089 (-13.26%, -52.98)
     ## data-env-vars.name            = pypy-2024-03-22-zstd-sparse-revlog
    before:   4.540080
    after:    3.401700  (-25.07%, -1.14)
     ## data-env-vars.name            = tryton-public-2024-03-22-zstd-sparse-revlog
    before:   2.975765
    after:    1.870798  (-37.13%, -1.10)
    de5bf3fe0233