Yuya Nishihara <yuya@tcha.org> [Tue, 17 Nov 2020 19:29:08 +0900] rev 45852
chgserver: backport py3 buffered I/O workarounds from procutil
I've recently switched to new machine and I found chg's stdout is fully
buffered.
Even though chg server is a daemon process, it inherits the environment
where the chg client originally forked the server. This means the server's
stdout might have been wrapped by LineBufferedWrapper. That's why we need
to do wrap/unwrap in both ways.
The "if" condition in _restoreio() looks weird, but I'm not willing to
clean things up because stdio behavior is fundamentally different between
py2 and py3, and py2 support will be dropped anyway.
Yuya Nishihara <yuya@tcha.org> [Tue, 03 Nov 2020 11:24:21 +0900] rev 45851
chg: reset errno prior to calling strtol()
Otherwise we can't figure out if the last strtol() invocation failed or
not.
Yuya Nishihara <yuya@tcha.org> [Tue, 03 Nov 2020 11:15:50 +0900] rev 45850
chg: do not close dir fd while iterating
It works so long as the dp is the last entry, but readdir(dp) would fail
with EBADF. Let's not do that and close the dir fd explicitly.
Yuya Nishihara <yuya@tcha.org> [Tue, 03 Nov 2020 11:12:25 +0900] rev 45849
chg: show debug message for each fd to be closed
It helps debugging. The number of file descriptors should be small in most
cases, so the console output wouldn't get bloated even with CHG_DEBUG=1.
Yuya Nishihara <yuya@tcha.org> [Tue, 03 Nov 2020 11:06:15 +0900] rev 45848
chg: apply clang-format
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 Nov 2020 15:28:06 -0800] rev 45847
errors: use InputError for some errors on `hg clone`
Differential Revision: https://phab.mercurial-scm.org/D9329
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 Nov 2020 13:22:40 -0800] rev 45846
errors: raise InputError when given non-existent paths etc
Differential Revision: https://phab.mercurial-scm.org/D9328
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 Nov 2020 10:35:33 -0800] rev 45845
errors: use InputError for errors about bad label names (tags etc)
Differential Revision: https://phab.mercurial-scm.org/D9327
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 Nov 2020 09:53:14 -0800] rev 45844
errors: use InputError for errors about bad paths
Differential Revision: https://phab.mercurial-scm.org/D9326
Martin von Zweigbergk <martinvonz@google.com> [Tue, 10 Nov 2020 09:14:01 -0800] rev 45843
destutil: raise more specific error when histedit.defaultrev is empty
Differential Revision: https://phab.mercurial-scm.org/D9313
Martin von Zweigbergk <martinvonz@google.com> [Tue, 20 Oct 2020 08:56:00 -0700] rev 45842
errors: raise more specific errors when default remote not configured
Differential Revision: https://phab.mercurial-scm.org/D9312
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Oct 2020 13:56:01 -0700] rev 45841
errors: set detailed exit code to 30 for config errors
This is per https://www.mercurial-scm.org/wiki/ErrorCategoriesPlan.
Differential Revision: https://phab.mercurial-scm.org/D9311
Martin von Zweigbergk <martinvonz@google.com> [Mon, 12 Oct 2020 12:44:18 -0700] rev 45840
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
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Oct 2020 13:31:34 -0700] rev 45839
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
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 Nov 2020 21:56:52 -0800] rev 45838
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
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 Nov 2020 08:29:55 -0800] rev 45837
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