From commits-noreply at bitbucket.org Wed Apr 21 16:19:33 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Wed, 21 Apr 2010 14:19:33 +0000 (UTC) Subject: [execnet-commit] execnet commit 08271099126a: fix a couple of jython issues on windows Message-ID: <20100421141933.701B27EF65@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1271858968 25200 # Node ID 08271099126ae2cc0e57be8671afbc3f8d9b1595 # Parent 6cc53b6a86e1a781ba1c64922757e8f1dd9a2058 fix a couple of jython issues on windows bumping version number --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +1.0.6 +-------------------------------- + +- fix jython/windows interactions + 1.0.5 -------------------------------- --- a/execnet/gateway.py +++ b/execnet/gateway.py @@ -142,7 +142,7 @@ class PopenCmdGateway(Gateway): p.pid = self.remote_exec( "import os; channel.send(os.getpid())").receive() -popen_bootstrapline = "import sys ; exec(eval(sys.stdin.readline()))" +popen_bootstrapline = "import sys;exec(eval(sys.stdin.readline()))" class PopenGateway(PopenCmdGateway): """ This Gateway provides interaction with a newly started python subprocess. @@ -153,7 +153,7 @@ class PopenGateway(PopenCmdGateway): """ if not python: python = sys.executable - args = [str(python), '-c', popen_bootstrapline] + args = [str(python), '-u', '-c', popen_bootstrapline] super(PopenGateway, self).__init__(args, id=id) def _remote_bootstrap_gateway(self, io): --- a/execnet/multi.py +++ b/execnet/multi.py @@ -242,7 +242,7 @@ def killpopen(popen): def killpid(pid): if hasattr(os, 'kill'): os.kill(pid, 15) - elif sys.platform == "win32": + elif sys.platform == "win32" or getattr(os, '_name', None) == 'nt': try: import ctypes except ImportError: @@ -259,7 +259,7 @@ def killpid(pid): ctypes.windll.kernel32.TerminateProcess(handle, -1) ctypes.windll.kernel32.CloseHandle(handle) else: - raise EnvironmmentError("no method to kill %s" %(pid,)) + raise EnvironmentError("no method to kill %s" %(pid,)) default_group = Group() makegateway = default_group.makegateway --- a/testing/test_gateway.py +++ b/testing/test_gateway.py @@ -179,7 +179,7 @@ class TestPopenGateway: waschangedir = old.chdir() c = gw.remote_exec("import os ; channel.send(os.getcwd())") x = c.receive() - assert x == str(waschangedir) + assert x.lower() == str(waschangedir).lower() def test_remoteerror_readable_traceback(self, gw): e = py.test.raises(gateway_base.RemoteError, --- a/testing/test_rsync.py +++ b/testing/test_rsync.py @@ -94,7 +94,8 @@ class TestRSync: assert not err def test_symlink_rsync(self, dirs, gw1): - if py.std.sys.platform == 'win32': + if (py.std.sys.platform == 'win32' or + getattr(py.std.os, '_name', '') == 'nt'): py.test.skip("symlinks are unsupported on Windows.") source = dirs.source dest = dirs.dest1 --- a/execnet/__init__.py +++ b/execnet/__init__.py @@ -3,7 +3,7 @@ execnet: pure python lib for connecting (c) 2010, Holger Krekel and others """ -__version__ = "1.0.5" +__version__ = "1.0.6" import execnet.apipkg --- a/testing/test_xspec.py +++ b/testing/test_xspec.py @@ -126,7 +126,7 @@ class TestMakegateway: testdir.chdir() gw = execnet.makegateway("popen//chdir=hello") rinfo = gw._rinfo() - assert rinfo.cwd == str(testdir.tmpdir.join("hello").realpath()) + assert rinfo.cwd.lower() == str(testdir.tmpdir.join("hello").realpath()).lower() def test_ssh(self, specssh): sshhost = specssh.ssh --- a/.hgignore +++ b/.hgignore @@ -7,3 +7,4 @@ syntax:glob *.pyc *$py.class *.orig +*~ From commits-noreply at bitbucket.org Thu Apr 22 20:36:04 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 22 Apr 2010 18:36:04 +0000 (UTC) Subject: [execnet-commit] execnet commit ec1b91a27995: add internal handshake on remote_init_threads protocol Message-ID: <20100422183604.C3F407EE75@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1271961352 -7200 # Node ID ec1b91a279955abbc8c16f62d07f817535b586f0 # Parent 08271099126ae2cc0e57be8671afbc3f8d9b1595 add internal handshake on remote_init_threads protocol --- a/execnet/gateway.py +++ b/execnet/gateway.py @@ -107,6 +107,7 @@ class Gateway(gateway_base.BaseGateway): source = inspect.getsource(threadpool) self._remotechannelthread = self.remote_exec(source) self._remotechannelthread.send(num) + status = self._remotechannelthread.receive() class RInfo: def __init__(self, kwargs): --- a/doc/Makefile +++ b/doc/Makefile @@ -30,7 +30,7 @@ help: clean: -rm -rf $(BUILDDIR)/* -install: clean html linkcheck +install: clean html rsync -avz $(BUILDDIR)/html/ code:www-execnet/ html: --- a/execnet/threadpool.py +++ b/execnet/threadpool.py @@ -207,6 +207,7 @@ if __name__ == '__channelexec__': maxthreads = channel.receive() execpool = WorkerPool(maxthreads=maxthreads) gw = channel.gateway + channel.send("ok") gw._trace("instantiated thread work pool maxthreads=%s" %(maxthreads,)) while 1: gw._trace("waiting for new exec task") From commits-noreply at bitbucket.org Mon Apr 26 15:43:57 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Mon, 26 Apr 2010 13:43:57 +0000 (UTC) Subject: [execnet-commit] execnet commit 61ae5d8a3258: tag doc version as 1.0.6 as well Message-ID: <20100426134357.9D2157EFD6@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1272288630 -7200 # Node ID 61ae5d8a32582d48871672ba894b2761fcaeec43 # Parent ec1b91a279955abbc8c16f62d07f817535b586f0 tag doc version as 1.0.6 as well --- a/doc/conf.py +++ b/doc/conf.py @@ -46,7 +46,7 @@ copyright = '2009, holger krekel and oth # # The short X.Y version. import execnet -version = "1.0.5" +version = "1.0.6" # The full version, including alpha/beta/rc tags. release = version From commits-noreply at bitbucket.org Mon Apr 26 15:43:59 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Mon, 26 Apr 2010 13:43:59 +0000 (UTC) Subject: [execnet-commit] execnet commit 5aa9fce2d69a: Added tag 1.0.6 for changeset 61ae5d8a3258 Message-ID: <20100426134359.C72977EFD7@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1272289411 -7200 # Node ID 5aa9fce2d69a203ad7f999df5e49228633c224e1 # Parent 61ae5d8a32582d48871672ba894b2761fcaeec43 Added tag 1.0.6 for changeset 61ae5d8a3258 --- a/.hgtags +++ b/.hgtags @@ -7,3 +7,4 @@ 330b0032a09e13e38644c74d4a679d3760cdcdcf 5d74dad7f425b1e51d15f52825579a83a4b3be99 1.0.3 534f61972976f51c9163bbae3cf3cf6b97cabb8a 1.0.4 9e7b55db59f94009e739273916efbb356d385b96 1.0.5 +61ae5d8a32582d48871672ba894b2761fcaeec43 1.0.6 From commits-noreply at bitbucket.org Tue Apr 27 11:47:57 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 27 Apr 2010 09:47:57 +0000 (UTC) Subject: [execnet-commit] execnet commit 9ae1c5121e81: try to ensure that a callback is called with the endmarker before Message-ID: <20100427094757.DB6857EEF4@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1272361609 -7200 # Node ID 9ae1c5121e815c00e7385a95256916d481078143 # Parent 5aa9fce2d69a203ad7f999df5e49228633c224e1 try to ensure that a callback is called with the endmarker before channel.waitclose() can return in another thread. should fix the sometimes failing test_channel_endmarker_callback test. --- a/execnet/gateway_base.py +++ b/execnet/gateway_base.py @@ -491,13 +491,13 @@ class ChannelFactory(object): # state transition to "closed" state if remoteerror: channel._remoteerrors.append(remoteerror) - if not sendonly: # otherwise #--> "sendonly" - channel._closed = True # --> "closed" - channel._receiveclosed.set() queue = channel._items if queue is not None: queue.put(ENDMARKER) self._no_longer_opened(id) + if not sendonly: # otherwise #--> "sendonly" + channel._closed = True # --> "closed" + channel._receiveclosed.set() def _local_receive(self, id, data): # executes in receiver thread --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ 1.0.6 -------------------------------- - fix jython/windows interactions +- fix waitclose/callback-with-endmarker race condition 1.0.5 -------------------------------- From commits-noreply at bitbucket.org Tue Apr 27 12:28:49 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 27 Apr 2010 10:28:49 +0000 (UTC) Subject: [execnet-commit] execnet commit 5137795e56c5: trying a more careful fix than 9ae1c5121e81 Message-ID: <20100427102849.45C3B7EF0C@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1272364110 -7200 # Node ID 5137795e56c525c450f92c43385c110c8f450a5b # Parent 9ae1c5121e815c00e7385a95256916d481078143 trying a more careful fix than 9ae1c5121e81 --- a/execnet/gateway_base.py +++ b/execnet/gateway_base.py @@ -487,6 +487,7 @@ class ChannelFactory(object): # channel already in "deleted" state if remoteerror: remoteerror.warn() + self._no_longer_opened(id) else: # state transition to "closed" state if remoteerror: @@ -494,10 +495,10 @@ class ChannelFactory(object): queue = channel._items if queue is not None: queue.put(ENDMARKER) - self._no_longer_opened(id) - if not sendonly: # otherwise #--> "sendonly" - channel._closed = True # --> "closed" - channel._receiveclosed.set() + self._no_longer_opened(id) + if not sendonly: # otherwise #--> "sendonly" + channel._closed = True # --> "closed" + channel._receiveclosed.set() def _local_receive(self, id, data): # executes in receiver thread From commits-noreply at bitbucket.org Wed Apr 28 21:27:15 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Wed, 28 Apr 2010 19:27:15 +0000 (UTC) Subject: [execnet-commit] execnet commit 4fe771f940b4: fix a race condition when multiple threads push channel messages Message-ID: <20100428192715.68DA47EF11@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1272482811 -7200 # Node ID 4fe771f940b4172816ff6a8916b1dc3e3ca5b871 # Parent f7185c217370888d2ba194bc489f232bcc34170f fix a race condition when multiple threads push channel messages --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,8 @@ 1.0.6 - fix jython/windows interactions - fix waitclose/callback-with-endmarker race condition +- fix race condition where multiple threads sending data over channels + would crash the serializer and process 1.0.5 -------------------------------- --- a/execnet/gateway.py +++ b/execnet/gateway.py @@ -108,6 +108,7 @@ class Gateway(gateway_base.BaseGateway): self._remotechannelthread = self.remote_exec(source) self._remotechannelthread.send(num) status = self._remotechannelthread.receive() + assert status == "ok", status class RInfo: def __init__(self, kwargs): --- a/execnet/gateway_base.py +++ b/execnet/gateway_base.py @@ -75,6 +75,7 @@ class Popen2IO: except (AttributeError, IOError): pass self._read = getattr(infile, "buffer", infile).read + self._write = getattr(outfile, "buffer", outfile).write def read(self, numbytes): """Read exactly 'numbytes' bytes from the pipe. """ @@ -90,10 +91,7 @@ class Popen2IO: def write(self, data): """write out all data bytes. """ assert isinstance(data, bytes) - try: - self.outfile.buffer.write(data) - except AttributeError: - self.outfile.write(data) + self._write(data) self.outfile.flush() def close_read(self): @@ -110,8 +108,8 @@ class Message: self.channelid = channelid self.data = data - def writeto(self, serializer): - serializer.save((self.msgtype, self.channelid, self.data)) + def writeto(self, io): + serialize(io, (self.msgtype, self.channelid, self.data)) def readfrom(cls, unserializer): msgtype, senderid, data = unserializer.load() @@ -595,7 +593,6 @@ class BaseGateway(object): self.id = id self._channelfactory = ChannelFactory(self, _startcount) self._receivelock = threading.RLock() - self._serializer = Serializer(io) # globals may be NONE at process-termination self._trace = trace self._geterrortext = geterrortext @@ -651,7 +648,7 @@ class BaseGateway(object): def _send(self, msg): assert isinstance(msg, Message) - msg.writeto(self._serializer) + msg.writeto(self._io) self._trace('sent', msg) def _local_schedulexec(self, channel, sourcetask): @@ -923,37 +920,40 @@ def _buildopcodes(): _buildopcodes() -class Serializer(object): - WRITE_ON_SUCCESS=True # more robust against serialize failures +def serialize(io, obj): + _Serializer(io).save(obj) + +class _Serializer(object): + _dispatch = {} def __init__(self, stream): - self.dispatch = {} self._stream = stream + self._streamlist = [] + + def _write(self, data): + self._streamlist.append(data) def save(self, obj): - if self.WRITE_ON_SUCCESS: - self.streamlist = [] - self._write = self.streamlist.append - else: - self._write = self.stream.write + # calling here is not re-entrant but multiple instances + # may write to the same stream because of the common platform + # atomic-write guaruantee (concurrent writes each happen atomicly) self._save(obj) self._write(opcode.STOP) - if self.WRITE_ON_SUCCESS: - # atomic write! (compatible to python3 and python2) - s = type(self.streamlist[0])().join(self.streamlist) - self._stream.write(s) + s = type(self._streamlist[0])().join(self._streamlist) + # atomic write + self._stream.write(s) def _save(self, obj): tp = type(obj) try: - dispatch = self.dispatch[tp] + dispatch = self._dispatch[tp] except KeyError: methodname = 'save_' + tp.__name__ - meth = getattr(self, methodname, None) + meth = getattr(self.__class__, methodname, None) if meth is None: raise SerializationError("can't serialize %s" % (tp,)) - dispatch = self.dispatch[tp] = meth - dispatch(obj) + dispatch = self._dispatch[tp] = meth + dispatch(self, obj) def save_NoneType(self, non): self._write(opcode.NONE) --- a/testing/test_gateway.py +++ b/testing/test_gateway.py @@ -277,6 +277,27 @@ class TestThreads: res = c1.receive() assert res == 42 + def test_threads_race_sending(self): + # multiple threads sending data in parallel + gw = execnet.makegateway("popen//python=jython") + num = 5 + gw.remote_init_threads(num) + print ("remote_init_threads(%d)" % num) + channels = [] + for x in range(num): + ch = gw.remote_exec(""" + for x in range(10): + channel.send(''*1000) + channel.receive() + """) + channels.append(ch) + for ch in channels: + for x in range(10): + ch.receive(TESTTIMEOUT) + ch.send(1) + for ch in channels: + ch.waitclose(TESTTIMEOUT) + def test_status_with_threads(self): gw = execnet.makegateway('popen') gw.remote_init_threads(3) --- a/testing/test_basics.py +++ b/testing/test_basics.py @@ -66,13 +66,12 @@ def test_io_message(anypython, tmpdir): temp_out = BytesIO() temp_in = BytesIO() io = Popen2IO(temp_out, temp_in) - serializer = Serializer(io) unserializer = Unserializer(io) for i, msg_cls in Message._types.items(): print ("checking %s %s" %(i, msg_cls)) for data in "hello", "hello".encode('ascii'): msg1 = msg_cls(i, data) - msg1.writeto(serializer) + msg1.writeto(io) x = io.outfile.getvalue() io.outfile.truncate(0) io.outfile.seek(0) @@ -176,9 +175,8 @@ class TestMessage: def test_wire_protocol(self): for cls in Message._types.values(): one = py.io.BytesIO() - serializer = gateway_base.Serializer(one) data = '23'.encode('ascii') - cls(42, data).writeto(serializer) + cls(42, data).writeto(one) two = py.io.BytesIO(one.getvalue()) unserializer = gateway_base.Unserializer(two) msg = Message.readfrom(unserializer) --- a/testing/test_serializer.py +++ b/testing/test_serializer.py @@ -46,8 +46,8 @@ sys.path.insert(0, %r) from execnet import gateway_base as serializer if sys.version_info > (3, 0): # Need binary output sys.stdout = sys.stdout.detach() -saver = serializer.Serializer(sys.stdout) -saver.save(%s)""" % (pyimportdir, obj_rep,)) +saver = serializer.serialize(sys.stdout, %s) +""" % (pyimportdir, obj_rep,)) popen = subprocess.Popen([str(self.executable), str(script_file)], stdin=subprocess.PIPE, stderr=subprocess.PIPE, From commits-noreply at bitbucket.org Wed Apr 28 21:27:17 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Wed, 28 Apr 2010 19:27:17 +0000 (UTC) Subject: [execnet-commit] execnet commit f7185c217370: remove tests duplicated from test_gateway.py Message-ID: <20100428192717.483EF7EF7B@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1272467332 -7200 # Node ID f7185c217370888d2ba194bc489f232bcc34170f # Parent 5137795e56c525c450f92c43385c110c8f450a5b remove tests duplicated from test_gateway.py --- a/testing/test_channel.py +++ b/testing/test_channel.py @@ -338,67 +338,5 @@ class TestChannelFile: channel = gw.newchannel() py.test.raises(ValueError, 'channel.makefile("rw")') -def test_socket_gw_host_not_found(gw): - py.test.raises(execnet.HostNotFound, - 'execnet.makegateway("socket=qwepoipqwe:9000")' - ) -class TestSshPopenGateway: - gwtype = "ssh" - def test_sshconfig_config_parsing(self, monkeypatch): - import subprocess - l = [] - monkeypatch.setattr(subprocess, 'Popen', - lambda *args, **kwargs: l.append(args[0])) - py.test.raises(AttributeError, - """execnet.makegateway("ssh=xyz//ssh_config=qwe")""") - assert len(l) == 1 - popen_args = l[0] - i = popen_args.index('-F') - assert popen_args[i+1] == "qwe" - - def test_sshaddress(self, gw, specssh): - assert gw.remoteaddress == specssh.ssh - - def test_host_not_found(self, gw): - py.test.raises(execnet.HostNotFound, - "execnet.makegateway('ssh=nowhere.codespeak.net')") - -class TestThreads: - def test_threads(self): - gw = execnet.makegateway('popen') - gw.remote_init_threads(3) - c1 = gw.remote_exec("channel.send(channel.receive())") - c2 = gw.remote_exec("channel.send(channel.receive())") - c2.send(1) - res = c2.receive() - assert res == 1 - c1.send(42) - res = c1.receive() - assert res == 42 - - def test_status_with_threads(self): - gw = execnet.makegateway('popen') - gw.remote_init_threads(3) - c1 = gw.remote_exec("channel.send(1) ; channel.receive()") - c2 = gw.remote_exec("channel.send(2) ; channel.receive()") - c1.receive() - c2.receive() - rstatus = gw.remote_status() - assert rstatus.numexecuting == 2 + 1 - assert rstatus.execqsize == 0 - c1.send(1) - c2.send(1) - c1.waitclose() - c2.waitclose() - rstatus = gw.remote_status() - assert rstatus.numexecuting == 0 + 1 - assert rstatus.execqsize == 0 - - def test_threads_twice(self): - gw = execnet.makegateway('popen') - gw.remote_init_threads(3) - py.test.raises(IOError, gw.remote_init_threads, 3) - - From commits-noreply at bitbucket.org Wed Apr 28 21:53:56 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Wed, 28 Apr 2010 19:53:56 +0000 (UTC) Subject: [execnet-commit] execnet commit f4f785cd543e: fix race tests to use sys.executable interpreter Message-ID: <20100428195356.7CB6F7EF7B@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1272484444 -7200 # Node ID f4f785cd543ec95455907841840ba2b965f1400b # Parent 4fe771f940b4172816ff6a8916b1dc3e3ca5b871 fix race tests to use sys.executable interpreter --- a/testing/test_gateway.py +++ b/testing/test_gateway.py @@ -279,7 +279,7 @@ class TestThreads: def test_threads_race_sending(self): # multiple threads sending data in parallel - gw = execnet.makegateway("popen//python=jython") + gw = execnet.makegateway("popen") num = 5 gw.remote_init_threads(num) print ("remote_init_threads(%d)" % num) From commits-noreply at bitbucket.org Sun May 2 14:36:05 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Sun, 2 May 2010 12:36:05 +0000 (UTC) Subject: [execnet-commit] execnet commit 53a74e22691e: Added tag 1.0.6 for changeset f4f785cd543e Message-ID: <20100502123605.84B137EEFB@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1272803729 -7200 # Node ID 53a74e22691e4a1a0955a691bd31ed47438c21a1 # Parent f4f785cd543ec95455907841840ba2b965f1400b Added tag 1.0.6 for changeset f4f785cd543e --- a/.hgtags +++ b/.hgtags @@ -8,3 +8,5 @@ 5d74dad7f425b1e51d15f52825579a83a4b3be99 534f61972976f51c9163bbae3cf3cf6b97cabb8a 1.0.4 9e7b55db59f94009e739273916efbb356d385b96 1.0.5 61ae5d8a32582d48871672ba894b2761fcaeec43 1.0.6 +61ae5d8a32582d48871672ba894b2761fcaeec43 1.0.6 +f4f785cd543ec95455907841840ba2b965f1400b 1.0.6 From commits-noreply at bitbucket.org Wed May 5 14:25:17 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Wed, 5 May 2010 12:25:17 +0000 (UTC) Subject: [execnet-commit] execnet commit 169c9d174f6d: add python3 classifier, remove testing Message-ID: <20100505122517.CFD0E7EF06@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1273062217 -7200 # Node ID 169c9d174f6d28c31562188e12d382acec30960e # Parent 53a74e22691e4a1a0955a691bd31ed47438c21a1 add python3 classifier, remove testing --- a/setup.py +++ b/setup.py @@ -56,11 +56,11 @@ def main(): 'Operating System :: POSIX', 'Operating System :: Microsoft :: Windows', 'Operating System :: MacOS :: MacOS X', - 'Topic :: Software Development :: Testing', 'Topic :: Software Development :: Libraries', 'Topic :: System :: Distributed Computing', 'Topic :: System :: Networking', - 'Programming Language :: Python'], + 'Programming Language :: Python', + 'Programming Language :: Python :: 3'], packages=['execnet', 'execnet.script'], ) From commits-noreply at bitbucket.org Thu May 20 14:35:27 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 20 May 2010 12:35:27 +0000 (UTC) Subject: [execnet-commit] execnet commit 504c13e39094: explicitely xfail a sometimes hanging tests on python2.4 Message-ID: <20100520123527.137677EF0D@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1274359114 -7200 # Node ID 504c13e3909491f90d43aea8795ed92377650b28 # Parent 169c9d174f6d28c31562188e12d382acec30960e explicitely xfail a sometimes hanging tests on python2.4 --- a/testing/test_termination.py +++ b/testing/test_termination.py @@ -58,6 +58,8 @@ def test_termination_on_remote_channel_r assert str(pid) not in out, out def test_close_initiating_remote_no_error(testdir, anypython): + if '2.4' in str(anypython): + py.test.xfail("race/wait/interrupt_main/thread-loop issue with python2.4") p = testdir.makepyfile(""" import sys sys.path.insert(0, %r) From commits-noreply at bitbucket.org Sat May 29 09:18:44 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Sat, 29 May 2010 07:18:44 +0000 (UTC) Subject: [execnet-commit] execnet commit aaff8a632c37: add distribution names to install page Message-ID: <20100529071844.74F207EEEA@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project execnet # URL http://bitbucket.org/hpk42/execnet/overview # User holger krekel # Date 1275117793 -7200 # Node ID aaff8a632c3713c19b060aa5c8c81f22351dfde9 # Parent 504c13e3909491f90d43aea8795ed92377650b28 add distribution names to install page --- a/doc/install.txt +++ b/doc/install.txt @@ -1,3 +1,22 @@ +Info in a nutshell +==================== + +**Pythons**: 2.4, 2.5, 2.6, 2.7, 3.0, 3.1.x, Jython-2.5.1, PyPy-1.2 + +**Operating systems**: Linux, Windows, OSX, Unix + +**Requirements**: plain distutils, setuptools_ or Distribute_ + +**Installers**: easy_install_ and pip_ or distutils + +**Distribution names**: + +* PyPI name: ``execnet`` +* redhat fedora: ``python-execnet`` +* debian: ``python-execnet`` +* gentoo: ``dev-python/execnet`` + +**hg repository**: https://bitbucket.org/hpk42/execnet Installation ====================