Skip to content
Snippets Groups Projects
  1. Nov 24, 2022
    • Matt Harbison's avatar
      contrib: add a script for adding vendored type stubs to typeshed · 03792c1ed341
      Matt Harbison authored
      I really hate this, but pytype doesn't support PEP 561 and doesn't seem to have
      the equivalent of `MYPYPATH` to point to custom stubs.  Ignoring the vendored
      stubs isn't necessarily harmful, but pytype has been choking on the vendored
      attr package after pytype 2022.03.29 with errors like this:
      
          File "/mnt/c/Users/Matt/hg/mercurial/linelog.py", line 52, in __iter__: Built-in function iter was called with the wrong arguments [wrong-arg-types]
                   Expected: (collection: bytearray)
            Actually passed: (collection: mercurial.thirdparty.attr._make._CountingAttr)
      
          File "/mnt/c/Users/Matt/hg/mercurial/dirstateutils/v2.py", line 143, in pack: Built-in function len was called with the wrong arguments [wrong-arg-types]
                   Expected: (obj: Sized)
            Actually passed: (obj: mercurial.thirdparty.attr._make._CountingAttr)
            Attributes of protocol Sized are not implemented on mercurial.thirdparty.attr._make._CountingAttr: __len__
          File "/mnt/c/Users/Matt/hg/mercurial/dirstateutils/v2.py", line 144, in pack: No attribute 'rfind' on mercurial.thirdparty.attr._make._CountingAttr [attribute-error]
          File "/mnt/c/Users/Matt/hg/mercurial/dirstateutils/v2.py", line 146, in pack: Built-in function len was called with the wrong arguments [wrong-arg-types]
                   Expected: (obj: Sized)
            Actually passed: (obj: mercurial.thirdparty.attr._make._CountingAttr)
            Attributes of protocol Sized are not implemented on mercurial.thirdparty.attr._make._CountingAttr: __len__
          File "/mnt/c/Users/Matt/hg/mercurial/dirstateutils/v2.py", line 152, in pack: No attribute 'v2_data' on mercurial.thirdparty.attr._make._CountingAttr [attribute-error]
      
          File "/mnt/c/Users/Matt/hg/mercurial/util.py", line 2817, in go: unsupported operand type(s) for /: 'count: mercurial.thirdparty.attr._make._CountingAttr' and 'float: float' [unsupported-operands]
            No attribute '__truediv__' on 'count: mercurial.thirdparty.attr._make._CountingAttr' or '__rtruediv__' on 'float: float'
          Called from (traceback):
            line 2981, in __bytes__
      
      This is essentially the same hack we've been using in TortoiseHg to add the
      vendored PyQt5 stubs.  What I don't understand is pytype *still* generates *.pyi
      files under .pytype/pyi/mercurial/thirdparty/attr, even when the package is
      explicitly ignored in the pytype command line args.  But it avoids the errors,
      which means we aren't stuck on pytype==2022.03.29.
      
      https://github.com/google/pytype/issues/151
      03792c1ed341
    • Matt Harbison's avatar
      contrib: update check-pytype.sh to list stubs that caused pytype to crash · 3e1869751cfe
      Matt Harbison authored
      The same logic is in the TortoiseHg tests for running pytype, and it's useful to
      know if a new version of pytype is better or worse.
      3e1869751cfe
  2. Nov 23, 2022
  3. Nov 21, 2022
    • Matt Harbison's avatar
      typing: add type hints to mercurial/help.py · 2a70d1fc70c4
      Matt Harbison authored
      Was hoping to find more issues like f09bc2ed9100, but it may be that nothing
      checks the args to that operation.  In any event, the work is done and pytype
      doesn't do a very good job inferring the types.  A few of th emore complicated
      things like the command table are left untyped, because they come from modules
      that aren't typed yet.
      2a70d1fc70c4
    • Matt Harbison's avatar
      configitems: add a default value for "merge-tools.xxx.regappend" · 5744ceeb9067
      Matt Harbison authored
      When trying to figure out how `hg help -v` took the Set interpolation path in
      f09bc2ed9100, I turned on devel warnings and noticed this (unrelated) warning:
      
          devel-warn: specifying a mismatched default value for a registered config
              item: 'merge-tools.beyondcompare4.regappend' ''
              at: c:\Users\Matt\hg\mercurial\filemerge.py:46 (_toolstr)
      
      The previous default value for this config was `None`, but that slightly
      complicates the code at the only site it is used, referenced above.
      5744ceeb9067
    • Matt Harbison's avatar
      attr: vendor 22.1.0 · e1c586b9a43c
      Matt Harbison authored
      The previous version was 5 years old, and pytype 2022.06.30 started complaining
      about various uses (e.g. seeing `mercurial.thirdparty.attr._make._CountingAttr`
      instead of `bytearray`).  Hopefully this helps.  Additionally, this has official
      python 3.11 support.
      
      The `attrs` package is left out, because it is simply a bunch of *.pyi stubs and
      `from attr.X import *`, and that's not how they've been used up to this point.
      We'd probably need to customize those anyway to
      `from mercurial.thirdparty.attr import *`.
      e1c586b9a43c
    • Matt Harbison's avatar
      tests: update test-util.py for modern attrs package · 7e6f3c69c0fb
      Matt Harbison authored
      When updating to 22.1.0, this test started failing:
      
          Traceback (most recent call last):
            File "/tmp/mercurial-ci/tests/test-util.py", line 53, in <module>
              _start_default = (util.timedcmstats.start.default, 'factory')
          AttributeError: type object 'timedcmstats' has no attribute 'start'
      
      Poking around in `hg debugshell`, the attribute is indeed missing, but looks to
      be attached to `__attrs_attrs__` in both the currently vendored and the modern
      version of attrs.  The old attrs packages will print the same for both accesses,
      so fingers crossed...
      
          >>> print((util.timedcmstats.start.default, 'factory'))
          (Factory(factory=<function timedcmstats.<lambda> at 0x000001EFDF0F21F0>, takes_self=False), 'factory')
      
          >>> print((util.timedcmstats.__attrs_attrs__.start.default, 'factory'))
          (Factory(factory=<function timedcmstats.<lambda> at 0x000001EFDF0F21F0>, takes_self=False), 'factory')
      7e6f3c69c0fb
  4. Nov 15, 2022
  5. Nov 14, 2022
  6. Oct 20, 2022
  7. Nov 19, 2022
    • Raphaël Gomès's avatar
      branching: merge stable into default · 7577b8644558
      Raphaël Gomès authored
      7577b8644558
    • Raphaël Gomès's avatar
      Added signature for changeset c890d8b8bc59 · 3324f39460e5
      Raphaël Gomès authored
      3324f39460e5
    • Raphaël Gomès's avatar
      Added tag 6.3.1 for changeset c890d8b8bc59 · 010d9e362ee4
      Raphaël Gomès authored
      010d9e362ee4
    • Raphaël Gomès's avatar
      relnotes: add 6.3.1 · c890d8b8bc59
      Raphaël Gomès authored
      6.3.1
      c890d8b8bc59
    • Pierre-Yves David's avatar
      tests: fix test-sparse-revlog · da636e7a6d63
      Pierre-Yves David authored
      This one is not covered by the CIbecause I requires an expensive artifact to be
      cached. So it goes out of think on regular basis (we should fix that…)
      
      The test ouput was affected by e706bb41fdb3 as we filtering now happens sooner,
      removing for the output.
      da636e7a6d63
    • Pierre-Yves David's avatar
      memory-usage: fix `hg log --follow --rev R F` space complexity · dcb2581e33be
      Pierre-Yves David authored
      When running `hg log --follow --rev REVS FILES`, the log code will walk the
      history of all FILES starting from the file revisions that exists in each REVS.
      
      Before doing so, it looks if the files actually exists in the target revisions.
      To do so, it opens the manifest of each revision in REVS to look up if we find
      the associated items in FILES.
      
      Before this changeset this was done in a way that created a changectx for
      each target revision, keeping them in memory while we look into each file.
      
      If the set of REVS is large, this means keeping the manifest for each entry in
      REVS in memory. That can be large… if REV is in the form `::X`, this can quickly
      become huge and saturate the memory. We have seen usage allocating 2GB per
      second until memory runs out.
      
      So this changeset invert the two loop so that only one revision is kept in
      memory during the operation. This solve the memory explosion issue.
      dcb2581e33be
  8. Nov 18, 2022
  9. Nov 17, 2022
  10. Nov 18, 2022
  11. Nov 17, 2022
  12. Nov 06, 2022
  13. Oct 17, 2022
Loading