tests/test-mailmap.t
author Matt Harbison <matt_harbison@yahoo.com>
Mon, 05 Dec 2022 16:05:04 -0500
branchstable
changeset 49602 f4a363b25859
parent 37262 8e57c3b0dce4
permissions -rw-r--r--
extensions: load help from hgext.__index__ as a fallback this time Prior to 843418dc0b1b, `hgext.__index__` was consulted first if present, which caused the longer help from the extension modules to be ignored, even when available. But that change causes a bunch of test failures when the pyoxidized binary bundles *.pyc in the binary, saying the there's no help topic for `hg help $disabled_extension` and suggesting the use of `--keyword`, rather than showing a summary and indicating that it is disabled. Current failures were in test-check-help.t, test-extension.t, test-help.t, and test-qrecord.t. Ideally, we would read the various *.pyc files from memory and slurp in the docstring, but I know that they used to not be readable as resources, and I can't figure out how to make it work now. So maybe 3.9 and/or the current PyOxidizer doesn't support it yet. I got closer in py2exe with `importlib.resources.open_binary("hgext", "rebase.pyc")`, but `open_binary()` on *.pyc fails in pyoxidizer.[1] Either way, the *.pyc can't be passed to `ast.parse()` as `extensions._disabledcmdtable()` is doing, so I'm setting that aside for now. [1] https://github.com/indygreg/PyOxidizer/issues/649

Create a repo and add some commits

  $ hg init mm
  $ cd mm
  $ echo "Test content" > testfile1
  $ hg add testfile1
  $ hg commit -m "First commit" -u "Proper <commit@m.c>"
  $ echo "Test content 2" > testfile2
  $ hg add testfile2
  $ hg commit -m "Second commit" -u "Commit Name 2 <commit2@m.c>"
  $ echo "Test content 3" > testfile3
  $ hg add testfile3
  $ hg commit -m "Third commit" -u "Commit Name 3 <commit3@m.c>"
  $ echo "Test content 4" > testfile4
  $ hg add testfile4
  $ hg commit -m "Fourth commit" -u "Commit Name 4 <commit4@m.c>"

Add a .mailmap file with each possible entry type plus comments
  $ cat > .mailmap << EOF
  > # Comment shouldn't break anything
  > <proper@m.c> <commit@m.c> # Should update email only
  > Proper Name 2 <commit2@m.c> # Should update name only
  > Proper Name 3 <proper@m.c> <commit3@m.c> # Should update name, email due to email
  > Proper Name 4 <proper@m.c> Commit Name 4 <commit4@m.c> # Should update name, email due to name, email
  > EOF
  $ hg add .mailmap
  $ hg commit -m "Add mailmap file" -u "Testuser <test123@m.c>"

Output of commits should be normal without filter
  $ hg log -T "{author}\n" -r "all()"
  Proper <commit@m.c>
  Commit Name 2 <commit2@m.c>
  Commit Name 3 <commit3@m.c>
  Commit Name 4 <commit4@m.c>
  Testuser <test123@m.c>

Output of commits with filter shows their mailmap values
  $ hg log -T "{mailmap(author)}\n" -r "all()"
  Proper <proper@m.c>
  Proper Name 2 <commit2@m.c>
  Proper Name 3 <proper@m.c>
  Proper Name 4 <proper@m.c>
  Testuser <test123@m.c>

Add new mailmap entry for testuser
  $ cat >> .mailmap << EOF
  > <newmmentry@m.c> <test123@m.c>
  > EOF

Output of commits with filter shows their updated mailmap values
  $ hg log -T "{mailmap(author)}\n" -r "all()"
  Proper <proper@m.c>
  Proper Name 2 <commit2@m.c>
  Proper Name 3 <proper@m.c>
  Proper Name 4 <proper@m.c>
  Testuser <newmmentry@m.c>

A commit with improperly formatted user field should not break the filter
  $ echo "some more test content" > testfile1
  $ hg commit -m "Commit with improper user field" -u "Improper user"
  $ hg log -T "{mailmap(author)}\n" -r "all()"
  Proper <proper@m.c>
  Proper Name 2 <commit2@m.c>
  Proper Name 3 <proper@m.c>
  Proper Name 4 <proper@m.c>
  Testuser <newmmentry@m.c>
  Improper user

No TypeError beacause of invalid input

  $ hg log -T '{mailmap(termwidth)}\n' -r0
  80