Skip to content
Snippets Groups Projects
  1. Aug 05, 2018
  2. Aug 25, 2018
  3. May 29, 2018
    • Boris Feld's avatar
      phases: enforce internal phase support · 7775c1fb
      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.
      7775c1fb
  4. May 24, 2018
    • Boris Feld's avatar
      phases: add a repository requirement about internal phase · 7a9f15ed
      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.
      7a9f15ed
  5. Aug 24, 2018
    • Boris Feld's avatar
      phases: add an internal phases · 06c976ac
      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)
      06c976ac
  6. Aug 22, 2018
  7. Aug 27, 2018
  8. Aug 25, 2018
  9. Aug 27, 2018
  10. Aug 24, 2018
    • Martin von Zweigbergk's avatar
      index: embed nodetree in index object to avoid reference cycle · 9f097214
      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
      9f097214
  11. Aug 27, 2018
  12. Aug 26, 2018
  13. Aug 23, 2018
    • Kyle Lippincott's avatar
      log: respect graphshorten on terminal nodes (collapsing o-~ to just o~) · 3c4b2e88
      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
      3c4b2e88
  14. Aug 26, 2018
  15. Aug 25, 2018
  16. Aug 14, 2018
    • Gregory Szorc's avatar
      filelog: remove proxies to revlog · 71575a1e
      Gregory Szorc authored
      These proxy attributes and methods were added to facilitate various
      debug* and perf* commands. Now that cmdutil.openrevlog() returns
      an actual revlog, we no longer need these on the filelog class.
      
      There's probably a few other attributes that could be removed. But
      this feels like a worthy start.
      
      Differential Revision: https://phab.mercurial-scm.org/D4359
      71575a1e
  17. Aug 21, 2018
    • Gregory Szorc's avatar
      debugcommands: introduce debugrevlogindex (BC) · 828a4523
      Gregory Szorc authored
      `hg debugindex` was originally invented for displaying revlog index
      data and is highly tailored towards that. e.g. it accepts a --format
      option to display index data for a particular revlog version and
      displays things like offset and length.
      
      As we support non-revlog storage, it makes sense for `hg debugindex`
      to display generic index data and for there to exist storage-specific
      or storage-aware debug* commands for dumping non-generic index data.
      
      This commit effectively renames `hg debugindex` to
      `hg debugrevlogindex` and replaces `hg debugindex` with a version that
      is storage agnostic.
      
      Tests using --format have been updated to use `hg debugrevlogindex`.
      
      Output is backwards compatible. The replacement command uses the
      formatter, which means output can be templatized.
      
      At some point, we may want to tweak output (e.g. to add the revision
      size). But I don't feel like taking a bigger BC break at the moment.
      
      The renamed command/function had to be moved because check-code
      enforces alphabetical ordering of commands in this file.
      
      Differential Revision: https://phab.mercurial-scm.org/D4358
      828a4523
  18. Aug 20, 2018
  19. Aug 14, 2018
    • Gregory Szorc's avatar
      cmdutil: return a revlog from openrevlog() and split function · 53e53200
      Gregory Szorc authored
      The filelog class is a wrapper around a revlog instance. I have plans
      to give manifests and the changelog a similar treatment.
      
      When filelog was ported away from revlog and when I started writing
      patches to do the same for manifests, I noticed that a lot of
      debug* and perf* commands were relying on low-level revlog APIs
      like start(), end(), deltaparent(), etc. For filelog, I added these
      to the interface, even though I didn't want to because they don't
      belong on a generic storage interface.
      
      For manifest (and eventually changelog), the pain is too much to bear.
      We need to cut the tight coupling.
      
      These debug* and perf* commands use cmdutil.openrevlog() to obtain
      a revlog instance.
      
      This commit effectively renames openrevlog() to openstorage(), adds
      an argument to ensure a revlog instance is returned, and introduces a
      replacement openrevlog() that calls openstorage() such that a revlog
      instance is returned.
      
      By doing things this way, we allow the debug* and perf* commands to
      still work on revlog-based repositories without having to expose
      low-level revlog APIs in the storage interfaces.
      
      The practical side-effect of this on the current code base is we return
      a revlog instance instead of a filelog. The manifest and changelog are
      not affected at this time.
      
      Some of filelog's storage APIs are different from revlog. For example,
      read() strips the optional header containing copy/rename metadata. This
      may impact some perf* commands. But I don't think the impact is
      worth worrying about.
      
      Upcoming commits will port existing consumers to openstorage(), where
      appropriate.
      
      This commit does cause some test regressions when using the simple
      store. These will be fixed as commands are ported to use storage APIs.
      
      .. api:: cmdutil.openrevlog() now returns a revlog instance or aborts
      
         Previously, it would return a storage object, which may not be a
         revlog instance.
      
         Use the new cmdutil.openstorage() API to return an object conforming
         to the storage interface of the thing you are accessing if you don't
         need a revlog instance.
      
      Differential Revision: https://phab.mercurial-scm.org/D4354
      53e53200
  20. Aug 20, 2018
  21. Aug 16, 2018
    • Boris Feld's avatar
      bookmark: add an --active flag to display the active bookmark · 337443f0
      Boris Feld authored
      There is currently no official simple way to retrieve the current bookmark. In
      particular for automation.
      
      We add a `--active` flag to the `hg bookmarks` command. When set, the command
      display the current bookmark name if any or return 1.
      
      For now, this flag is read-only. However sensible combinations exist with
      `--delete`, `--rename` and `--rev` and can be implemented later.
      337443f0
  22. Aug 22, 2018
    • Boris Feld's avatar
      phase: use `_phase` revset instead of string interpolation · b17d27ea
      Boris Feld authored
      The previous code was hackyer and assume all phases had an associated revset.
      The later might no longer be true once we introduce more internal phase.
      b17d27ea
    • Boris Feld's avatar
      phase: expose a `_phase(idx)` revset · 31c0ee6e
      Boris Feld authored
      Internally phase related revset are calling the `_phase` function. We expose
      it as an internal revset. This is useful to refer to phase in revset doing
      debatable things around the phase name.
      31c0ee6e
    • Boris Feld's avatar
      phase: handle phase with no command flag · 1ea6772f
      Boris Feld authored
      Before this changeset, all existing phases have a corresponding flag on the `hg
      phase` command. (eg: `hg phase --draft`).
      
      After this changeset, a phase can exists without having an associated flag.
      This is useful to introduce a new internal phase that we do not want to expose
      to user.
      1ea6772f
  23. Jun 05, 2018
  24. Aug 24, 2018
    • Matt Harbison's avatar
      lfs: add a progress bar when searching for blobs to upload · 37e56607
      Matt Harbison authored
      The search itself can take an extreme amount of time if there are a lot of
      revisions involved.  I've got a local repo that took 6 minutes to push 1850
      commits, and 60% of that time was spent here (there are ~70K files):
      
           \ 58.1%  wrapper.py:     extractpointers      line 297:  pointers = extractpointers(...
             | 57.7%  wrapper.py:     pointersfromctx    line 352:  for p in pointersfromctx(ct...
             | 57.4%  wrapper.py:     pointerfromctx     line 397:  p = pointerfromctx(ctx, f, ...
               \ 38.7%  context.py:     __contains__     line 368:  if f not in ctx:
                 | 38.7%  util.py:        __get__        line 82:  return key in self._manifest
                 | 38.7%  context.py:     _manifest      line 1416:  result = self.func(obj)
                 | 38.7%  manifest.py:    read           line 472:  return self._manifestctx.re...
                   \ 25.6%  revlog.py:      revision     line 1562:  text = rl.revision(self._node)
                     \ 12.8%  revlog.py:      _chunks    line 2217:  bins = self._chunks(chain, ...
                       | 12.0%  revlog.py:      decompressline 2112:  ladd(decomp(buffer(data, ch...
                     \  7.8%  revlog.py:      checkhash  line 2232:  self.checkhash(text, node, ...
                       |  7.8%  revlog.py:      hash     line 2315:  if node != self.hash(text, ...
                       |  7.8%  revlog.py:      hash     line 2242:  return hash(text, p1, p2)
                   \ 12.0%  manifest.py:    __init__     line 1565:  self._data = manifestdict(t...
               \ 16.8%  context.py:     filenode         line 378:  if not _islfs(fctx.filelog(...
                 | 15.7%  util.py:        __get__        line 706:  return self._filelog
                 | 14.8%  context.py:     _filelog       line 1416:  result = self.func(obj)
                 | 14.8%  localrepo.py:   file           line 629:  return self._repo.file(self...
                 | 14.8%  filelog.py:     __init__       line 1134:  return filelog.filelog(self...
                 | 14.5%  revlog.py:      __init__       line 24:  censorable=True)
      37e56607
  25. Aug 22, 2018
    • Katsunori FUJIWARA's avatar
      i18n: merge i18n comments of translatable texts correctly · d0e8933d
      Katsunori FUJIWARA authored
      Before this patch, i18n comments of translatable texts are lost at
      creation of hg.pot file, if:
      
        - same translatable text appears multiple times,
        - the 1st appearance does not have i18n comment, and
        - any of rest has it
      
      For example, previous patch for filemerge.py adds translatable texts
      with i18n comments, but these comments are lost, because:
      
        - automatically added texts in docstring of internal merge tools are
          picked up earlier than these translatable texts, because of
          location in filemerge.py
      
        - but docstring has no i18n comment
      
      This patch makes addentry() of posplit merge i18n comments of later
      translatable texts, in order to keep them at creation of hg.pot.
      d0e8933d
    • Katsunori FUJIWARA's avatar
      help: revise explanation about capability check while selecting merge tool · 0dfcc348
      Katsunori FUJIWARA authored
      This is follow up of 7c6044634957 and cded904f7acc.
      
      This patch adds explanations about:
      
        - notation in capability columns in the table
        - how capabilities of external merge tools are treated
      0dfcc348
    • Katsunori FUJIWARA's avatar
      filemerge: avoid putting translated text into docstring · 88c5a3ef
      Katsunori FUJIWARA authored
      This is follow up of my mistake in e09fad982ef5.
      
      There is no merge tool, which has only one of binary or symlink
      capabilities, but this patch lists up all combinations of them for
      safety in the future. Maybe, it is too paranoid, though.
      88c5a3ef
Loading