[PATCH 1 of 1] Replacing select call with a thread to accumulate
the error output
Zbynek Winkler
zwin at users.sourceforge.net
Tue Sep 27 07:35:01 CDT 2005
Zbynek Winkler wrote:
># HG changeset patch
># User zbynek at localhost
># Node ID 3aaf4b5f48cdf7b0d0b4c20c36e2de27ce3b6a23
># Parent 0e2be889ccd7eaf0c5c1f08b486e02be3ec7358f
>Replacing select call with a thread to accumulate the error output.
>
>diff -r 0e2be889ccd7 -r 3aaf4b5f48cd mercurial/sshrepo.py
>--- a/mercurial/sshrepo.py Mon Sep 26 16:52:47 2005 -0700
>+++ b/mercurial/sshrepo.py Tue Sep 27 14:09:58 2005 +0200
>@@ -8,7 +8,7 @@
> from node import *
> from remoterepo import *
> from demandload import *
>-demandload(globals(), "hg os re select")
>+demandload(globals(), "hg os re threading")
>
> class sshrepository(remoterepository):
> def __init__(self, ui, path):
>@@ -35,21 +35,33 @@
> ui.note('running %s\n' % cmd)
> self.pipeo, self.pipei, self.pipee = os.popen3(cmd, 'b')
>
>+ def accumerr():
>+ while 1:
>+ l = self.pipee.readline()
>+ if l == "": return
>+ self.lock.acquire()
>+ self.err.append(l)
>+ self.lock.release()
>+
>+ self.lock = threading.Lock()
>
>
Sorry, it shouldn't have been 'lock' as it conflicts with the method of
the same name.
>+ self.err = []
>+ self.reader = threading.Thread(target=accumerr)
>+ self.reader.setDaemon(1)
>+ self.reader.start()
>+
> def readerr(self):
>- while 1:
>- r,w,x = select.select([self.pipee], [], [], 0)
>- if not r: break
>- l = self.pipee.readline()
>- if not l: break
>+ self.lock.acquire()
>+ for l in self.err:
> self.ui.status("remote: ", l)
>
>
I forgot to add self.err = [] here :(
>+ self.lock.release()
>
> def __del__(self):
> try:
> self.pipeo.close()
> self.pipei.close()
>- for l in self.pipee:
>- self.ui.status("remote: ", l)
> self.pipee.close()
>+ self.reader.join()
>+ readerr()
> except:
> pass
>
>
--
http://zw.matfyz.cz/ http://robotika.cz/
Faculty of Mathematics and Physics, Charles University, Prague, Czech Republic
More information about the Mercurial
mailing list