Skip to content
Snippets Groups Projects
  1. Feb 15, 2021
  2. Jan 11, 2021
    • Simon Sapin's avatar
      copies-rust: add a macro-based unit-testing framework · fa21633a
      Simon Sapin authored
      `compare_values`, `merge_copies_dict`, and `CombineChangesetCopies`
      are APIs whose signatures involve non-trivial types.
      Calling them directly in unit tests would involve a lot of verbose
      setup code that obscures the meaningful parts of a given test case.
      
      This adds a macro-based test-harness with pseudo-syntax to tersely
      create arguments and expected return values in the correct types.
      
      For now there is only one (not particularly meaningful) test case
      per tested function, just to exercize the macros.
      
      Differential Revision: https://phab.mercurial-scm.org/D10071
      fa21633a
  3. Jan 06, 2021
  4. Mar 01, 2021
  5. Feb 15, 2021
  6. Dec 24, 2020
    • Matt Harbison's avatar
      tests: demonstrate a case where a corrupt tag cache causes an abort · 9ea6b75b
      Matt Harbison authored
      I happened to hit this trying to cover other cases around valid vs missing
      entries.  I have no idea if this is something that could occur more naturally
      (similar to how a missing file node in `hgtagsfnodes1` can occur after a strip).
      There is a test just above this added in f5a7cf0adb12 mentioning it "overwrites
      the junk", though that tests truncation instead of actual garbage.
      
      But since this is just a cache, it probably shouldn't abort with a cryptic
      message like this.  The two options I see both have downsides- either rebuild
      the cache (and potentially take a long time), or hint to the user to run a debug
      command.
      
      Differential Revision: https://phab.mercurial-scm.org/D9812
      9ea6b75b
  7. Feb 16, 2021
  8. Feb 10, 2021
  9. Mar 04, 2021
    • Martin von Zweigbergk's avatar
      copies: filter out copies grafted from another branch · 2803f94b
      Martin von Zweigbergk authored
      Consider this simple history:
      
      ```
      @  3 modify y
      |
      o  2 copy x to y, modify x
      |
      | o  1 copy x to y, modify x
      |/
      o  0 add x
      
      ```
      
      If we now rebase commit 3 onto 1, Mercurial will look for copies
      between commit 2 and commit 1. It does that by going backwards from 2
      to 0 and then forwards from 0 to 1. It will find that x was copied to
      y, since that was what happened on the path between them (namely in
      commit 1). That leads Mercurial to do a 3-way merge between y@3 and
      y@1 with x@2 as base. We want to use y@2 as base instead. That's also
      what happened until commit 1d6d1a15a963. This patch fixes the regression
      by adding another filtering step when chaining copies via a
      diffbase. The new filtering step removes copies that were the same
      between the two branches (same source and destination, but not
      necessarily the same contents).
      
      Differential Revision: https://phab.mercurial-scm.org/D10120
      2803f94b
  10. Mar 05, 2021
  11. Mar 07, 2021
  12. Mar 06, 2021
    • Matt Harbison's avatar
      typing: add some type annotations to mercurial/phases.py · 77e129be
      Matt Harbison authored
      Some of these were helpful in typing other modules, and then I typed the
      easy-ish ones.  Black forces the long `Phasedefaults` definition to be wrapped,
      which pytype seems OK with (as shown with `reveal_type()`), but it does seem to
      confuse PyCharm a bit.
      
      Differential Revision: https://phab.mercurial-scm.org/D10126
      77e129be
    • Matt Harbison's avatar
    • Matt Harbison's avatar
      typing: add type annotations to mercurial/i18n.py · b9f40b74
      Matt Harbison authored
      I'm a little unsure of this because `gettext()` clearly allows for passing
      unicode.  But the comments seem to indicate that this is related to tests, and
      this was useful for catching unicode being passed to `_()` in the keyring
      extension.  I'm also not sure why `_(None)` would make any sense, so maybe the
      argument shouldn't be optional?  I didn't add it to the lambda in plain mode
      because that spilled beyond 80 characters and so black mangled it.
      
      Black and pytype disagree on where the comment to disable a check needs to go,
      so this has to disable and then enable the checking.
      
      Differential Revision: https://phab.mercurial-scm.org/D10124
      b9f40b74
    • Matt Harbison's avatar
      typing: add type annotations to mercurial/utils/dateutil.py · 15c2f922
      Matt Harbison authored
      For now, I'm just typing around the edges to help find issues with TortoiseHg.
      If the custom `hgdate` type is useful elsewhere as I go, I'll move it to a file
      dedicated to custom types.  I'm not loving the ban on camelcase type names here
      that test-check-code.t flagged, but I'm not sure how to disable that even if
      everyone agreed that it's a bad idea to go against the normal convention for
      types.
      
      While here, fix an issue that pytype found in `parsedate` when an invalid date
      tuple is passed by raising a ProgrammingError instead of crashing.  (Tuple
      doesn't have a `strip` attribute.)
      
      Differential Revision: https://phab.mercurial-scm.org/D10123
      15c2f922
    • Matt Harbison's avatar
      shelve: fix conversion of exceptions to strings flagged by pytype · e571fec5
      Matt Harbison authored
      I've seen this done several ways and don't know what's correct.  But pytype was
      unhappy about the previous way:
      
          FAILED: /mnt/c/Users/Matt/hg/tests/.pytype/pyi/mercurial/shelve.pyi
          /usr/bin/python3.6 -m pytype.single --imports_info /mnt/c/Users/Matt/hg/tests/.pytype/imports/mercurial.shelve.imports --module-name mercurial.shelve -V 3.6 -o /mnt/c/Users/Matt/hg/tests/.pytype/pyi/mercurial/shelve.pyi --analyze-annotated --nofail --quick /mnt/c/Users/Matt/hg/mercurial/shelve.py
          File "/mnt/c/Users/Matt/hg/mercurial/shelve.py", line 244, in _verifyandtransform: Function bytestr.__init__ was called with the wrong arguments [wrong-arg-types]
                   Expected: (self, ints: Iterable[int])
            Actually passed: (self, ints: Union[KeyError, TypeError, ValueError])
          File "/mnt/c/Users/Matt/hg/mercurial/shelve.py", line 253, in _getversion: Function bytestr.__init__ was called with the wrong arguments [wrong-arg-types]
                   Expected: (self, ints: Iterable[int])
            Actually passed: (self, ints: ValueError)
            The following methods aren't implemented on ValueError:
            __iter__
      
      Differential Revision: https://phab.mercurial-scm.org/D10122
      e571fec5
    • Pierre-Yves David's avatar
      releasenotes: use the right API to access the 'sections' · 88bd085c
      Pierre-Yves David authored
      Preventing direct access to the underlying dict fix a breakage introduced by the
      refactoring in d3df397e7a59.
      
      This changeset is similar to 271dfcb98544, 5272542196cc and f7621fa14b84. The
      breackage of `releasenotes.py` stayed under my radar as the CI did not have
      fuzzywuzzy installed. (Something that is about to be fixed).
      
      Differential Revision: https://phab.mercurial-scm.org/D10121
      88bd085c
  13. Mar 03, 2021
  14. Mar 02, 2021
  15. Mar 05, 2021
    • Martin von Zweigbergk's avatar
      copies: choose target directory based on longest match · ad30b29b
      Martin von Zweigbergk authored
      If one side of a merge renames `dir1/` to `dir2/` and the subdirectory
      `dir1/subdir1/` to `dir2/subdir2/`, and the other side of the merge
      adds a file in `dir1/subdir1/`, we should clearly move that into
      `dir2/subdir2/`. We already detect the directories correctly before
      this patch, but we iterate over them in arbitrary order. That results
      in the new file sometimes ending up in `dir2/subdir1/` instead. This
      patch fixes it by iterating over the source directories by visiting
      subdirectories first. That's achieved by simply iterating over them in
      reverse lexicographical order.
      
      Without the fix, the test case still passes on Python 2 but fails on
      Python 3. It depends on the iteration order of the dict. I did not
      look into how it's built up and why it behaved differently before the
      fix. I could probably have gotten it to fail on Python 2 as well by
      choosing different directory names.
      
      Differential Revision: https://phab.mercurial-scm.org/D10115
      ad30b29b
  16. Mar 04, 2021
  17. Jan 30, 2021
  18. Mar 01, 2021
  19. Feb 25, 2021
  20. Feb 05, 2021
    • Kyle Lippincott's avatar
      debian: support a "chg-first" installation mechanism (hg is actually chg) · 90481550
      Kyle Lippincott authored
      This mechanism builds chg such that it looks for `hg` to be available at
      /usr/lib/mercurial/hg instead of in the $PATH as `hg`, and makes the `hg` in
      /usr/bin be a symlink to `chg`.
      
      It's important to note that the hg binary must continue to be named `hg`. If we
      wanted to instead place it at /usr/bin/pyhg or something similar, we would need
      to modify Mercurial to allow that basename. Failure to do so would break
      Mercurial's shell aliases that use `hg`, `chg`, or `$HG`.
      
      I don't know if we should ever have a setup like this be the default setup, but
      I'm willing to get more information on our experience with it for making such a
      determination. Actually making it the default might be rather involved, as we
      don't maintain the official debian packaging rules.
      
      Differential Revision: https://phab.mercurial-scm.org/D10020
      90481550
  21. Mar 03, 2021
  22. Feb 18, 2021
  23. Feb 19, 2021
Loading