Skip to content
Snippets Groups Projects
  1. Dec 10, 2021
  2. Dec 08, 2021
  3. Dec 18, 2021
  4. Dec 17, 2021
  5. Nov 09, 2021
  6. Dec 08, 2021
    • Martin von Zweigbergk's avatar
      simplemerge: make `localorother` a "mode" instead of a separate thing · 5151b0f6
      Martin von Zweigbergk authored
      `simplemerge()` takes a `mode` argument, which can be "union", "merge"
      or "mergediff", and a `localorother` argument, which can be `None`,
      "local", or "other". The two options are not at all orthogonal -- most
      combinations don't make sense. Also, at least "union", "local", and
      "other" are very closely related. Therefore, it makes sense to combine
      them into one.
      
      It probably makes sense to split the `mode` argument into `resolve`
      and `marker_style`, where the former can be `None`, "union", "local",
      or "other", and the latter can be "merge", "merge3", "mergediff", or
      "minimize". This is a good step in that direction whether or not we
      end up doing that.
      
      Differential Revision: https://phab.mercurial-scm.org/D11887
      5151b0f6
  7. Dec 07, 2021
    • Martin von Zweigbergk's avatar
    • Martin von Zweigbergk's avatar
      simplemerge: stop merging file flags · 58a3be48
      Martin von Zweigbergk authored
      As 384df4db6520 (merge: merge file flags together with file content,
      2013-01-09) explains, we shouldn't do a 3-way merge of the
      symlink. However, since 84614212ae39 (flags: actually merge flags in
      simplemerge, 2020-05-16), we do that in
      `simplemerge.simplemerge()`. What's more, the merging of the
      executable flag there isn't actually necessary; it was made a no-op by
      the very next commit, i.e. 4234c9af515d (flags: read flag from
      dirstate/disk for workingcopyctx (issue5743), 2020-05-16).
      
      I found the overall flag-merging code (not the bit in
      `simplemerge.py`) very hard to follow, but I think I now finally
      understand how it works. `mergestate.resolve()` calculates the merged
      file flags and sets them on the local side of the merge (confusingly
      by calling `_restore_backup()`). Then it calls
      `filemerge.filemerge()`, which in turn calls
      `simplemerge.simplemerge()` (if premerge is enabled). That means that
      the flags on the local side `fcs.flags()` are already correct when the
      flag-merging code in `simplemerge.simplemerge()` runs. Interestingly,
      that code still works when the local side already has the merged
      value, it just doesn't change the value. Here's a truth table to
      explain why:
      
      ```
      BLOMCAR
      0000000
      0011111
      0101011
      0111111
      1000000
      1010000
      1100000
      1111101
      ```
      
      B: Base
      L: Local
      O: Other
      M: Merged flags from `mergestate.resolve()`, i.e. what's called "local"
         when we get to `simplemerge.simplemerge()`
      C: `commonflags` in `simplemerge.simplemerge()`, i.e. `M & O`
      A: `addedflags` in `simplemerge.simplemerge()`, i.e. `(M ^ O) - B`
      R: Re-merged flags `simplemerge.simplemerge()`, i.e. `C | A`
      
      As you can see, the re-merged flags are always unchanged compared to
      the initial merged flags (R equals M).
      
      Therefore, this patch effectively backs out 84614212ae39. (I might
      later refactor this code to have the flags explicitly passed in.)
      
      `simplemerge.simplemerge()` is also called from
      `contrib/simplemerge.py`, but that code never passes any flags.
      
      Differential Revision: https://phab.mercurial-scm.org/D11879
      58a3be48
  8. Dec 08, 2021
  9. Dec 06, 2021
  10. Dec 19, 2021
  11. Dec 17, 2021
  12. Dec 15, 2021
  13. Dec 14, 2021
    • Pierre-Yves David's avatar
      rank: add a "rank" value to the revlog-entry tuple · 52034c42
      Pierre-Yves David authored
      The rank of a revision is the size of sub-graph it defines as a head. In other
      words, the rank of X is the size of `ancestors(X)` (X included).
      
      This is a property that can help various algorithm and we intend to store it in
      changelog-v2. We start with adding this new information to the "entry tuple",
      with a default value. We will start to compute and persist the rank later.
      
      Differential Revision: https://phab.mercurial-scm.org/D11936
      52034c42
  14. Dec 15, 2021
  15. Dec 14, 2021
  16. Dec 15, 2021
  17. Dec 16, 2021
  18. Dec 17, 2021
  19. Dec 15, 2021
    • Matt Harbison's avatar
      pytype: stop excluding ssutil.py · 08af0adc
      Matt Harbison authored
      Pytype simply can't distinguish the type for this one entry's value from the
      other values:
      
        File "/mnt/c/Users/Matt/hg/mercurial/sslutil.py", line 142, in _hostsettings:
            No attribute 'append' on None [attribute-error]
          In Optional[Union[Any, List[nothing], bool, bytes]]
        File "/mnt/c/Users/Matt/hg/mercurial/sslutil.py", line 142, in _hostsettings:
            No attribute 'append' on bool [attribute-error]
          In Optional[Union[Any, List[nothing], bool, bytes]]
        File "/mnt/c/Users/Matt/hg/mercurial/sslutil.py", line 142, in _hostsettings:
            No attribute 'append' on bytes [attribute-error]
          In Optional[Union[Any, List[nothing], bool, bytes]]
        File "/mnt/c/Users/Matt/hg/mercurial/sslutil.py", line 147, in _hostsettings:
            No attribute 'append' on None [attribute-error]
          In Optional[Union[Any, List[Tuple[Any, Any]], bool, bytes]]
        File "/mnt/c/Users/Matt/hg/mercurial/sslutil.py", line 147, in _hostsettings:
            No attribute 'append' on bool [attribute-error]
          In Optional[Union[Any, List[Tuple[Any, Any]], bool, bytes]]
        File "/mnt/c/Users/Matt/hg/mercurial/sslutil.py", line 147, in _hostsettings:
            No attribute 'append' on bytes [attribute-error]
          In Optional[Union[Any, List[Tuple[Any, Any]], bool, bytes]]
      
      Differential Revision: https://phab.mercurial-scm.org/D11931
      08af0adc
    • Matt Harbison's avatar
      pytype: stop excluding wireprotoserver.py · 81805bba
      Matt Harbison authored
      The `config` entry is a 2 part tuple, which has `__iter__()`:
      
        File "/mnt/c/Users/Matt/hg/mercurial/wireprotoserver.py", line 253, in _availableapis:
            No attribute '__iter__' on Callable[[Any, Any], Any] [attribute-error]
          In Union[Callable[[Any, Any, Any, Any, Any], None], Callable[[Any, Any], Any]]
        File "/mnt/c/Users/Matt/hg/mercurial/wireprotoserver.py", line 253, in _availableapis:
            No attribute '__iter__' on Callable[[Any, Any, Any, Any, Any], None] [attribute-error]
          In Union[Callable[[Any, Any, Any, Any, Any], None], Callable[[Any, Any], Any]]
      
      Differential Revision: https://phab.mercurial-scm.org/D11930
      81805bba
  20. Dec 14, 2021
    • Matt Harbison's avatar
      pytype: stop excluding pycompat.py · 12a43f85
      Matt Harbison authored
      Whatever issues were here seem to have been previously fixed.
      
      Differential Revision: https://phab.mercurial-scm.org/D11929
      12a43f85
    • Matt Harbison's avatar
      procutil: avoid an uninitialized variable usage on tempfile exception · f8540fe4
      Matt Harbison authored
      If `pycompat.unnamedtempfile()` raises an exception, it would have called
      `stdin.close()` in the `finally` block without it being initialized first.
      
      Differential Revision: https://phab.mercurial-scm.org/D11928
      f8540fe4
    • Matt Harbison's avatar
      pytype: stop excluding procutil.py · 333a2656
      Matt Harbison authored
      This avoids these false warnings:
      
        File "/mnt/c/Users/Matt/hg/mercurial/utils/procutil.py", line 78, in <module>:
            No attribute 'register' on Type[io.BufferedIOBase] [attribute-error]
        File "/mnt/c/Users/Matt/hg/mercurial/utils/procutil.py", line 117, in <module>:
            No attribute 'register' on Type[io.IOBase] [attribute-error]
        File "/mnt/c/Users/Matt/hg/mercurial/utils/procutil.py", line 770, in runbgcommandpy3:
            No attribute 'close' on int [attribute-error]
          In Union[IO[Union[bytes, str]], int]
      
      Differential Revision: https://phab.mercurial-scm.org/D11927
      333a2656
    • Matt Harbison's avatar
      pytype: stop excluding chgserver.py · 7caaefa4
      Matt Harbison authored
      This teaches pytype about some lazy initialization, and avoids the following:
      
        File "/mnt/c/Users/Matt/hg/mercurial/chgserver.py", line 666, in _checkextensions:
            No attribute '_hashstate' on chgunixservicehandler [attribute-error]
        File "/mnt/c/Users/Matt/hg/mercurial/chgserver.py", line 672, in _checkextensions:
            No attribute '_hashstate' on chgunixservicehandler [attribute-error]
        File "/mnt/c/Users/Matt/hg/mercurial/chgserver.py", line 677, in _bind:
            No attribute '_realaddress' on chgunixservicehandler [attribute-error]
        File "/mnt/c/Users/Matt/hg/mercurial/chgserver.py", line 683, in _bind:
            No attribute '_realaddress' on chgunixservicehandler [attribute-error]
        File "/mnt/c/Users/Matt/hg/mercurial/chgserver.py", line 686, in _createsymlink:
            No attribute '_baseaddress' on chgunixservicehandler [attribute-error]
        File "/mnt/c/Users/Matt/hg/mercurial/chgserver.py", line 686, in _createsymlink:
            No attribute '_realaddress' on chgunixservicehandler [attribute-error]
        File "/mnt/c/Users/Matt/hg/mercurial/chgserver.py", line 688, in _createsymlink:
            No attribute '_baseaddress' on chgunixservicehandler [attribute-error]
        File "/mnt/c/Users/Matt/hg/mercurial/chgserver.py", line 689, in _createsymlink:
            No attribute '_realaddress' on chgunixservicehandler [attribute-error]
        File "/mnt/c/Users/Matt/hg/mercurial/chgserver.py", line 690, in _createsymlink:
            No attribute '_baseaddress' on chgunixservicehandler [attribute-error]
      
      Differential Revision: https://phab.mercurial-scm.org/D11926
      7caaefa4
    • Matt Harbison's avatar
      pytype: stop excluding webcommands.py · ea13dabb
      Matt Harbison authored
      I have no idea why, but asserting that each value added to `emptydirs` is not
      None didn't fix this:
      
        File "/mnt/c/Users/Matt/hg/mercurial/hgweb/webcommands.py", line 621, in dirlist:
            Function bytes.join was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, iterable: Iterable[bytes])
          Actually passed: (self, iterable: List[None])
      
      Differential Revision: https://phab.mercurial-scm.org/D11924
      ea13dabb
    • Matt Harbison's avatar
    • Matt Harbison's avatar
      pytype: stop excluding patch.py · 290f9c15
      Matt Harbison authored
      The underlying `email.generator.BytesGenerator` is documented as requiring an
      `fp` that accepts bytes, so I'm not sure why pytype is getting confused:
      
        File "/mnt/c/Users/Matt/hg/mercurial/patch.py", line 112, in msgfp:
            Function Generator.__init__ was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, outfp: TextIO, ...)
          Actually passed: (self, outfp: io.BytesIO, ...)
      
      Differential Revision: https://phab.mercurial-scm.org/D11922
      290f9c15
    • Matt Harbison's avatar
      pytype: stop excluding statprof.py · d2fff292
      Matt Harbison authored
      This seems to have worked fine before (at least on Linux).  We could just add
      suppression comments, but this file already imports from the mercurial package,
      which seems to prevent this from running as a standalone program because of the
      relative import of `pycompat`.  PyCharm isn't happy either way.
      
        File "/mnt/c/Users/Matt/hg/mercurial/statprof.py", line 501, in display:
            Function TextIO.write was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, s: str)
          Actually passed: (self, s: bytes)
        Called from (traceback):
          line 1091, in main
        File "/mnt/c/Users/Matt/hg/mercurial/statprof.py", line 501, in display:
            Function TextIO.write was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, s: str)
          Actually passed: (self, s: bytes)
        Called from (traceback):
          line 431, in profile
        File "/mnt/c/Users/Matt/hg/mercurial/statprof.py", line 522, in display:
            Function TextIO.write was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, s: str)
          Actually passed: (self, s: bytes)
        Called from (traceback):
          line 1091, in main
        File "/mnt/c/Users/Matt/hg/mercurial/statprof.py", line 522, in display:
            Function TextIO.write was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, s: str)
          Actually passed: (self, s: bytes)
        Called from (traceback):
          line 431, in profile
        File "/mnt/c/Users/Matt/hg/mercurial/statprof.py", line 523, in display:
            Function TextIO.write was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, s: str)
          Actually passed: (self, s: bytes)
        Called from (traceback):
          line 1091, in main
        File "/mnt/c/Users/Matt/hg/mercurial/statprof.py", line 523, in display:
            Function TextIO.write was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, s: str)
          Actually passed: (self, s: bytes)
        Called from (traceback):
          line 431, in profile
        File "/mnt/c/Users/Matt/hg/mercurial/statprof.py", line 524, in display:
            Function TextIO.write was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, s: str)
          Actually passed: (self, s: bytes)
        Called from (traceback):
          line 1091, in main
        File "/mnt/c/Users/Matt/hg/mercurial/statprof.py", line 524, in display:
            Function TextIO.write was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, s: str)
          Actually passed: (self, s: bytes)
        Called from (traceback):
          line 431, in profile
        File "/mnt/c/Users/Matt/hg/mercurial/statprof.py", line 796, in _write:
            Function TextIO.write was called with the wrong arguments [wrong-arg-types]
                 Expected: (self, s: str)
          Actually passed: (self, s: bytes)
      
      Differential Revision: https://phab.mercurial-scm.org/D11921
      d2fff292
  21. Dec 13, 2021
Loading