1. 05 Mar, 2021 1 commit
  2. 04 Mar, 2021 1 commit
    • Pulkit Goyal's avatar
      commit: reorder if-else conditional to give mergestate info priority · 270b22ca8057
      Pulkit Goyal authored
      Looking at the code now, I was unable to find a good reason as why we only rely
      on mergestate extras info after checking whether a filelog parent is ancestor of
      other or not.
      
      I mean if we have stored in mergestate that `other` was chosed, we should
      blindly pick that one.
      
      This cleanup will also help introduce more cases when both `fparent1` and
      `fparent2` are non-null but using info from mergestate, we can fastpath.
      
      The test change actually demonstrates the point of the patch. During merge we
      were getting the other side of the file but on commit we were marking that as
      merged.
      270b22ca8057
  3. 15 Feb, 2021 5 commits
  4. 11 Jan, 2021 1 commit
    • Simon Sapin's avatar
      copies-rust: add a macro-based unit-testing framework · fa21633af201
      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
      fa21633af201
  5. 06 Jan, 2021 1 commit
  6. 01 Mar, 2021 1 commit
  7. 15 Feb, 2021 1 commit
  8. 24 Dec, 2020 1 commit
    • Matt Harbison's avatar
      tests: demonstrate a case where a corrupt tag cache causes an abort · 9ea6b75b4a95
      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
      9ea6b75b4a95
  9. 16 Feb, 2021 2 commits
  10. 10 Feb, 2021 1 commit
  11. 04 Mar, 2021 1 commit
    • Martin von Zweigbergk's avatar
      copies: filter out copies grafted from another branch · 2803f94b7431
      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
      2803f94b7431
  12. 05 Mar, 2021 3 commits
  13. 07 Mar, 2021 2 commits
  14. 06 Mar, 2021 6 commits
    • Matt Harbison's avatar
      typing: add some type annotations to mercurial/phases.py · 77e129be10de
      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
      77e129be10de
    • Matt Harbison's avatar
    • Matt Harbison's avatar
      typing: add type annotations to mercurial/i18n.py · b9f40b743627
      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
      b9f40b743627
    • Matt Harbison's avatar
      typing: add type annotations to mercurial/utils/dateutil.py · 15c2f9220ae8
      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
      15c2f9220ae8
    • Matt Harbison's avatar
      shelve: fix conversion of exceptions to strings flagged by pytype · e571fec5b606
      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
      e571fec5b606
    • Pierre-Yves David's avatar
      releasenotes: use the right API to access the 'sections' · 88bd085cf2f8
      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
      88bd085cf2f8
  15. 03 Mar, 2021 3 commits
  16. 02 Mar, 2021 1 commit
  17. 05 Mar, 2021 1 commit
    • Martin von Zweigbergk's avatar
      copies: choose target directory based on longest match · ad30b29bc23d
      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
      ad30b29bc23d
  18. 04 Mar, 2021 1 commit
  19. 30 Jan, 2021 1 commit
  20. 01 Mar, 2021 1 commit
  21. 25 Feb, 2021 1 commit
  22. 05 Feb, 2021 1 commit
    • Kyle Lippincott's avatar
      debian: support a "chg-first" installation mechanism (hg is actually chg) · 90481550467c
      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
      90481550467c
  23. 03 Mar, 2021 3 commits