typing: add type hints to the `opener` attributes and arguments of revlog
When making revlog and filelog classes visible to pytype, it got confused quite
a bit in `mercurial/revlogutils/rewrite.py`, thinking it had a plain `Callable`,
and flagging additional methods on it like `join()` and `rename()`. I couldn't
figure out how it reduced to that (and PyCharm flagged `opener` references as
`Any`), but this makes it happy. So make this change before making the classes
visible.
The vfs class hierarchy is a bit wonky (e.g. `filteredvfs` is not a `vfs`), so
this may need to be revisited with a Protocol class that covers all of the `vfs`
classes. But for now, everything works.
Tests that the exit code is as expected when ui.detailed-exit-code is *not*
enabled.
$ cat >> $HGRCPATH << EOF
> [ui]
> detailed-exit-code=no
> EOF
$ hg init repo
$ cd repo
$ echo a > a
Expect exit code 0 on success
$ hg ci -Aqm initial
$ hg co nonexistent
abort: unknown revision 'nonexistent'
[255]
$ hg co 'none()'
abort: empty revision set
[255]
$ hg co 'invalid('
hg: parse error at 8: not a prefix: end
(invalid(
^ here)
[255]
$ hg co 'invalid('
hg: parse error at 8: not a prefix: end
(invalid(
^ here)
[255]
$ hg continue
abort: no operation in progress
[255]
$ hg st --config a=b
abort: malformed --config option: 'a=b' (use --config section.name=value)
[255]
$ echo b > a
$ hg ci -m second
$ echo c > a
$ hg ci -m third
$ hg --config extensions.rebase= rebase -r . -d 0 -q
warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
unresolved conflicts (see 'hg resolve', then 'hg rebase --continue')
[1]