[PATCH] chgserver: remove Python 2 file descriptor logic
Gregory Szorc
gregory.szorc at gmail.com
Thu Mar 10 02:27:16 UTC 2022
Apparently I installed an older @, which wasn't working.
After applying this patch, I _think_ chg is happy again.
On Wed, Mar 9, 2022 at 7:13 PM Gregory Szorc <gregory.szorc at gmail.com>
wrote:
> I installed @ and am now seeing the following with `alias hg=chg`:
>
> $ hg version
> Mercurial Distributed SCM (version 6.1+hg145.469b9ee336a6)
> (see https://mercurial-scm.org for more information)
>
> Copyright (C) 2005-2022 Olivia Mackall and others
> This is free software; see the source for copying conditions. There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> gps at ubuntu-vm-main:~/src/hg (@)$ Traceback (most recent call last):
> File "/home/gps/lib/python/mercurial/commandserver.py", line 509, in
> _serverequest
> sv.cleanup()
> File "/home/gps/lib/python/mercurial/chgserver.py", line 382, in cleanup
> self._restoreio()
> File "/home/gps/lib/python/mercurial/chgserver.py", line 454, in
> _restoreio
> os.dup2(fd, fp.fileno())
> ValueError: I/O operation on closed file
> Traceback (most recent call last):
> File "/home/gps/lib/python/mercurial/commandserver.py", line 693, in
> _acceptnewconnection
> self._runworker(conn)
> File "/home/gps/lib/python/mercurial/commandserver.py", line 739, in
> _runworker
> _serverequest(
> File "/home/gps/lib/python/mercurial/commandserver.py", line 509, in
> _serverequest
> sv.cleanup()
> File "/home/gps/lib/python/mercurial/chgserver.py", line 382, in cleanup
> self._restoreio()
> File "/home/gps/lib/python/mercurial/chgserver.py", line 454, in
> _restoreio
> os.dup2(fd, fp.fileno())
> ValueError: I/O operation on closed file
>
> I didn't bisect. So the regression could be another patch. But it
> certainly looks like chg isn't working properly on @.
>
> On Wed, Mar 9, 2022 at 3:02 AM Raphaël Gomès <raphael.gomes at octobus.net>
> wrote:
>
>> Queued, thanks!
>>
>> On 3/4/22 03:12, Yuya Nishihara wrote:
>> > # HG changeset patch
>> > # User Yuya Nishihara <yuya at tcha.org>
>> > # Date 1646357326 -32400
>> > # Fri Mar 04 10:28:46 2022 +0900
>> > # Node ID 3a9729bead90ef7caaf4d25138680c83a888be78
>> > # Parent 46b3ecfb16e2781ede9752d972dc22f0e1dfea87
>> > chgserver: remove Python 2 file descriptor logic
>> >
>> > Follows up 0bb28b7736bc "chgserver: remove Python 2 support code."
>> >
>> > On Python 2, we had to close newfp prior to restoring the original file
>> > description since "delete newfp" would otherwise close the file
>> descriptor
>> > shared with the long-lived fp:
>> >
>> > in attachio():
>> > newfp = os.fdopen(fp.fileno(), mode, bufsize)
>> > in _restoreio():
>> > newfp.close() # temporarily close newfp.fileno() (= fp.fileno())
>> > os.dup2(fd, fp.fileno()) # reopen fp.fileno() with original fd
>> >
>> > On the other hand, we shouldn't call newfp.close() on Python 3 since
>> > any function calls are proxied to the underlying file object by
>> > procutil.LineBufferedWrapper.
>> >
>> > diff --git a/mercurial/chgserver.py b/mercurial/chgserver.py
>> > --- a/mercurial/chgserver.py
>> > +++ b/mercurial/chgserver.py
>> > @@ -438,14 +438,8 @@ class chgcmdserver(commandserver.server)
>> > nullfd = os.open(os.devnull, os.O_WRONLY)
>> > ui = self.ui
>> > for (ch, fp, fd), (cn, fn, mode) in zip(self._oldios,
>> _iochannels):
>> > - newfp = getattr(ui, fn)
>> > - # On Python 3, newfp is just a wrapper around fp even if
>> newfp is
>> > - # not fp, so deleting newfp is safe.
>> > - if newfp is not fp:
>> > - newfp.close()
>> > - # restore original fd: fp is open again
>> > try:
>> > - if newfp is fp and 'w' in mode:
>> > + if 'w' in mode:
>> > # Discard buffered data which couldn't be flushed
>> because
>> > # of EPIPE. The data should belong to the current
>> session
>> > # and should never persist.
>> >
>> > _______________________________________________
>> > Mercurial-devel mailing list
>> > Mercurial-devel at mercurial-scm.org
>> > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at mercurial-scm.org
>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-devel/attachments/20220309/9c62f03b/attachment-0002.html>
More information about the Mercurial-devel
mailing list