Mercurial > hg
changeset 39738:a93fe297dfb3
chgserver: add separate flag to remember if stdio fds are replaced
I want to make it use a separate saved buffer for "attachio" requests within
"runcommand" session. See the next patch for details.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 19 Sep 2018 22:57:47 +0900 |
parents | fd805a44b89d |
children | 7cdd47d9ccf8 |
files | mercurial/chgserver.py |
diffstat | 1 files changed, 6 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/chgserver.py Sat Sep 15 21:35:36 2018 +0900 +++ b/mercurial/chgserver.py Wed Sep 19 22:57:47 2018 +0900 @@ -311,6 +311,7 @@ _newchgui(ui, channeledsystem(fin, fout, 'S'), self.attachio), repo, fin, fout) self.clientsock = sock + self._ioattached = False self._oldios = [] # original (self.ch, ui.fp, fd) before "attachio" self.hashstate = hashstate self.baseaddress = baseaddress @@ -324,6 +325,7 @@ # handled by dispatch._dispatch() self.ui.flush() self._restoreio() + self._ioattached = False def attachio(self): """Attach to client's stdio passed via unix domain socket; all @@ -337,13 +339,13 @@ ui = self.ui ui.flush() - first = self._saveio() + self._saveio() for fd, (cn, fn, mode) in zip(clientfds, _iochannels): assert fd > 0 fp = getattr(ui, fn) os.dup2(fd, fp.fileno()) os.close(fd) - if not first: + if self._ioattached: continue # reset buffering mode when client is first attached. as we want # to see output immediately on pager, the mode stays unchanged @@ -362,18 +364,18 @@ setattr(ui, fn, newfp) setattr(self, cn, newfp) + self._ioattached = True self.cresult.write(struct.pack('>i', len(clientfds))) def _saveio(self): if self._oldios: - return False + return ui = self.ui for cn, fn, _mode in _iochannels: ch = getattr(self, cn) fp = getattr(ui, fn) fd = os.dup(fp.fileno()) self._oldios.append((ch, fp, fd)) - return True def _restoreio(self): ui = self.ui