Skip to content
Snippets Groups Projects
  1. Aug 15, 2018
  2. Aug 27, 2018
  3. Aug 15, 2018
    • Gregory Szorc's avatar
      perf: use storage API for resolving manifest node · c03c5f528e9b
      Gregory Szorc authored
      lookup() isn't part of the storage API. And this code shouldn't
      be accessing manifestlog._revlog directly for the modern code base.
      So let's port it to the modern API.
      
      Note that the previous code was busted for cases where we needed
      to call lookup() because lookup() isn't exposed by manifestrevlog
      any more.
      
      This change is strictly BC breaking because we no longer support
      resolving partial nodes. But it is a perf* command and I don't
      think we should flag the change as such.
      
      Differential Revision: https://phab.mercurial-scm.org/D4390
      c03c5f528e9b
  4. Aug 27, 2018
  5. Aug 15, 2018
  6. Aug 27, 2018
    • Gregory Szorc's avatar
      manifest: proxy to revlog instance instead of inheriting · 7f5e6d3e9032
      Gregory Szorc authored
      Previously, manifestrevlog inherited revlog.revlog and therefore
      exposed all its APIs. This inevitably resulted in consumers calling
      low-level revlog APIs.
      
      As part of abstracting storage, we want to formalize the interface
      for manifest storage. The revlog API is much too large to define as
      the interface.
      
      Like we did for filelog, this commit divorces the manifest class
      from revlog so that we can standardize on a smaller API surface.
      
      The way I went about this commit was I broke the inheritance, ran
      tests, and added proxies until all tests passed. Like filelog, there
      are a handful of attributes that don't belong on the interface.
      And like filelog, we'll tease these out in the future.
      
      As part of this, we formalize an interface for manifest storage and
      add checks that manifestrevlog conforms to the interface.
      
      Adding proxies will introduce some overhead due to extra attribute
      lookups and function calls. On the mozilla-unified repository:
      
      $ hg verify
      before: real 627.220 secs (user 525.870+0.000 sys 18.800+0.000)
      after:  real 628.930 secs (user 532.050+0.000 sys 18.320+0.000)
      
      $ hg serve (for a clone)
      before: user 223.580+0.000 sys 14.270+0.000
      after:  user 227.720+0.000 sys 13.920+0.000
      
      $ hg clone
      before: user 506.390+0.000 sys 29.720+0.000
      after:  user 513.080+0.000 sys 28.280+0.000
      
      There appears to be some overhead here. But it appears to be 1-2%.
      I think that is an appropriate price to pay for storage abstraction,
      which will eventually let us have much nicer things. If the overhead
      is noticed in other operations (whose CPU time isn't likely dwarfed by
      fulltext resolution) or if we want to cut down on the overhead, we
      could dynamically build up a type whose methods are effectively
      aliased to a revlog instance's. I'm inclined to punt on that problem
      for now. We may have to do it for the changelog. At which point it
      could be implemented in a generic way and ported to filelog and
      manifestrevlog easily enough I would think.
      
      .. api:: manifest.manifestrevlog no longer inherits from revlog
      
         The manifestrevlog class now wraps a revlog instance instead of
         inheriting from revlog. Various attributes and methods on instances
         are no longer available.
      
      Differential Revision: https://phab.mercurial-scm.org/D4386
      7f5e6d3e9032
  7. Aug 26, 2018
  8. Aug 22, 2018
    • Yuya Nishihara's avatar
      localrepo: do not cache auditor/nofsauditor which would make reference cycle · 9198e41df6ef
      Yuya Nishihara authored
      Before, self.auditor and self.nofsauditor held self through self._checknested,
      and the following code couldn't free a repo by ref-counting.
      
        def main():
            repo = localrepo.localrepository(uimod.ui(), '../testrepos/hello')
        main()
      
      With this change, the cache of the nofsauditor is limited to a single match
      session. I think that's okay as the nofsauditor doesn't do any filesystem
      access. Alternatively, maybe we can remove the callback from nofsauditor
      since it isn't used unless realfs=True, but I have no idea whether it is
      a bug or not.
      9198e41df6ef
  9. Aug 05, 2018
  10. Aug 25, 2018
  11. May 29, 2018
    • Boris Feld's avatar
      phases: enforce internal phase support · 7775c1fb8fa0
      Boris Feld authored
      We should not use the internal phase for repository without the requirement.
      Otherwise, older clients could have a look at the repository and see the
      internal changesets.
      
      For now, we introduce a low-level Programming error, more UI friendly error
      will be introduced later.
      7775c1fb8fa0
  12. May 24, 2018
    • Boris Feld's avatar
      phases: add a repository requirement about internal phase · 7a9f15ed3b96
      Boris Feld authored
      For internal changeset to be properly hidden, the client version needs to
      support it. So we introduce a new repository requirement that will make sure
      clients touching a repository that uses internal phase supports the feature.
      7a9f15ed3b96
  13. Aug 24, 2018
    • Boris Feld's avatar
      phases: add an internal phases · 06c976acc581
      Boris Feld authored
      The phase is meant to be used for internal commit that are a byproduct of
      command operation (eg:shelve).
      
      This changeset focus on getting the most important feature in, more advanced
      API is to be introduced in later changesets.
      
      The phase approach to handle internal has multiple advantages:
      * simple to implement, reuse optimized code,
      * fits well with existing phases. We don't want internal changeset to be
        exchanged or served.
      * easy to extend to for lifecycle handling.
      
      More thinking about internal changeset at https://www.mercurial-scm.org/wiki/InternalsPlan
      
      We add this new phases with a high number to leave some room to possible other
      phases. We also try out playing with the idea of "flag" for phases, each flag
      would convey a distinct meaning. We can drop the flag idea in the future
      (keeping the existing numbers). The flag property should still move in a
      monotonic direction (enabled -> disabled) or be immutable like the "internal"
      flag.
      
      To simplify the addition of this new phase, we introduce many placeholder
      phases. They are not meant to be used for now. Keeping `allphases` as a list
      ensure existing algorithm works fine.
      
      The full performance impact of adding that many hollow phases is unclear so
      far. The impact on phase computation is visible but not worrisome.
      
      Runnin `hg perfphase` in my mercurial development repository.
      Before: ! wall 0.001807 comb 0.000000 user 0.000000 sys 0.000000 (median of 1597)
      after:  ! wall 0.001906 comb 0.000000 user 0.000000 sys 0.000000 (median of 1521)
      06c976acc581
  14. Aug 22, 2018
  15. Aug 27, 2018
  16. Aug 25, 2018
  17. Aug 27, 2018
  18. Aug 24, 2018
    • Martin von Zweigbergk's avatar
      index: embed nodetree in index object to avoid reference cycle · 9f097214fbf3
      Martin von Zweigbergk authored
      Since the index has a reference to a nodetree and the nodetree has a
      reference back to the index, there is a reference cycle, so the index
      (and its nodetree) can never be freed. This patch fixes that by making
      "nodetree" a plan C struct that the index can embed, and also
      introduces a new "nodetreeObject" that is a Python type wrapping the
      nodetree struct.
      
      Thanks to Yuya for noticing this and for suggesting the solution.
      
      All tests passed on the first attempt once it compiled (I guess C is
      like Haskell in this regard?).
      
      Differential Revision: https://phab.mercurial-scm.org/D4372
      9f097214fbf3
  19. Aug 27, 2018
  20. Aug 26, 2018
  21. Aug 23, 2018
    • Kyle Lippincott's avatar
      log: respect graphshorten on terminal nodes (collapsing o-~ to just o~) · 3c4b2e880273
      Kyle Lippincott authored
      Internally we have a custom template that's inspired by ones that we have seen
      in the community. Normally, this looks something like:
      
          o  0834ec17 spectral tip
          |  crecord: support x to toggle single, X to toggle a range
          o  ee932990 spectral @
          |  filemerge: allow specifying $hgeditor as merge-tools.X.executable
          @  66f046116105 matt_harbison
          |  cext: fix truncation warnings in revlog on Windows
          o  42cc76d0f836 matt_harbison
          |  cext: fix revlog compiler error on Windows
          ~
          o  bd63ada7e1f8 stable boris
          |  phases: drop dead code in `newheads`
          ~
      
      With graphshorten on, and the descriptions of the public nodes hidden, it looks
      like this, note that the commits right before the ~ are still "full height":
      
          o  0834ec17 spectral tip
          |  crecord: support x to toggle single, X to toggle a range
          o  ee932990 spectral @
          |  filemerge: allow specifying $hgeditor as merge-tools.X.executable
          @  66f046116105 matt_harbison
          o  42cc76d0f836 matt_harbison
          |
          ~
          o  bd63ada7e1f8 stable boris
          |
          ~
      
      This patch makes them look like this, removing the | but keeping the ~:
      
          o  0834ec17 spectral tip
          |  crecord: support x to toggle single, X to toggle a range
          o  ee932990 spectral @
          |  filemerge: allow specifying $hgeditor as merge-tools.X.executable
          @  66f046116105 matt_harbison
          o  42cc76d0f836 matt_harbison
          ~
          o  bd63ada7e1f8 stable boris
          ~
      
      This originally removed the ~s entirely, but this was determined to be too much
      information loss and potentially confusing. This would have looked like the
      following (note that the last commit is on a different branch than all of the
      ones above it, and they are *not* linearly related):
      
          o  0834ec17 spectral tip
          |  crecord: support x to toggle single, X to toggle a range
          o  ee932990 spectral @
          |  filemerge: allow specifying $hgeditor as merge-tools.X.executable
          @  66f046116105 matt_harbison
          o  42cc76d0f836 matt_harbison
          o  bd63ada7e1f8 stable boris
      
      Differential Revision: https://phab.mercurial-scm.org/D4363
      3c4b2e880273
  22. Aug 26, 2018
  23. Aug 25, 2018
Loading