errors: introduce StateError and use it from commands and cmdutil
This very similar to an earlier patch (which was for `InputError`).
In this patch, I also updated the transplant extension only because
`test-transplant.t` would otherwise have needed a `#if continueflag`.
Differential Revision: https://phab.mercurial-scm.org/D9310
errors: set detailed exit code to 100 for some remote errors
This is per https://www.mercurial-scm.org/wiki/ErrorCategoriesPlan.
Differential Revision: https://phab.mercurial-scm.org/D9309
errors: catch urllib errors specifically instead of using safehasattr()
Before this patch, we would catch `IOError` and `OSError` and check if
the instance had a `.code` member (indicates `HTTPError`) or a
`.reason` member (indicates the more generic `URLError`). It seems to
me that can simply catch those exception specifically instead, so
that's what this code does. The existing code is from
fbe8834923c5
(commands: report http exceptions nicely, 2005-06-17), so I suspect
it's just that there was no `urllib2` (where `URLError` lives) back
then.
The old code mentioned `SSLError` in a comment. The new code does
*not* try to catch that. The documentation for `ssl.SSLError` says
that it has a `.reason` property, but `python -c 'import ssl;
print(dir(ssl.SSLError("foo", Exception("bar"))))` doesn't mention
that property on either Python 2 or Python 3 on my system. It also
seems that `sslutil` is pretty careful about converting `ssl.SSLError`
to `error.Abort`. It also is carefult to not assume that instances of
the exception have a `.reason`. So I at least don't want to catch
`ssl.SSLError` and handle it the same way as `URLError` because that
would likely result in a crash. I also wonder if we don't need to
handle it at all (because `sslutil` might handle all the cases). It's
now early in the release cycle, so perhaps we can just see how it
goes?
Differential Revision: https://phab.mercurial-scm.org/D9318
errors: raise InputError in fancyopts
If a value of wrong type is passed to a command line flag, that's
cleary an InputError.
Differential Revision: https://phab.mercurial-scm.org/D9308
packaging: switch centos 7 packaging to python 3
Differential Revision: https://phab.mercurial-scm.org/D9293
packaging: remove centos5 and centos6 support
Differential Revision: https://phab.mercurial-scm.org/D9292
test-filecache: use sys.executable to call python
As was mentioned in
c102b704edb5, test scripts calling 'python' or 'python3'
might use the wrong python.
For test-filecache.py, this causes a failed test on CentOS 7.
Differential Revision: https://phab.mercurial-scm.org/D9295
make: add a pyoxidizer target
Differential Revision: https://phab.mercurial-scm.org/D9291
pyoxidizer: switch to modern config using run_command instead of run_mode
Differential Revision: https://phab.mercurial-scm.org/D9290
pyoxidizer: default to one-file binary on non-Windows platforms
Windows has some extra constraints that require a multi-file install,
but we expect folks to use an MSI or similar installer there so it's
less of a big deal.
Differential Revision: https://phab.mercurial-scm.org/D9289