On 10/17/07, Blair Zajac <firstname.lastname@example.org> wrote:
> email@example.com wrote:
> > Author: glasser
> > Date: Wed Oct 17 17:29:04 2007
> > New Revision: 27266
> > Log:
> > Make sure we wait on the right PID in the test suite. Makes
> > --parallel more stable.
> > * subversion/tests/cmdline/svntest/main.py
> > (): Instead of checking to see if we have os.wait, check to see if
> > we have popen2.Popen3.
> > (open_pipe): New function to replace calls to os.popen3; returns the
> > three file descriptors and a token to pass to wait_on_pipe. On
> > Unix this token is the Popen3 object and the command; on Windows it
> > is None.
> > (wait_on_pipe): New function; on Unix, waits on the provided Popen3
> > object and deals with errors.
> > (spawn_process): Use open_pipe and wait_on_pipe instead of os.popen3
> > and dealing with wait itself.
> > (copy_repos): Use open_pipe and wait_on_pipe instead of os.popen3
> > and child endangerment.
> > Modified:
> > trunk/subversion/tests/cmdline/svntest/main.py
> > Modified: trunk/subversion/tests/cmdline/svntest/main.py
> > URL: http://svn.collab.net/viewvc/svn/trunk/subversion/tests/cmdline/svntest/main.py?pathrev=27266&r1=27265&r2=27266
> > ==============================================================================
> > --- trunk/subversion/tests/cmdline/svntest/main.py (original)
> > +++ trunk/subversion/tests/cmdline/svntest/main.py Wed Oct 17 17:29:04 2007
> > @@ -94,12 +94,11 @@
> > file_scheme_prefix = 'file://'
> > _exe = ''
> > -# os.wait() specifics
> > try:
> > - from os import wait
> > - platform_with_os_wait = True
> > + from popen2 import Popen3
> > + platform_with_popen3_class = True
> > except ImportError:
> > - platform_with_os_wait = False
> > + platform_with_popen3_class = False
> > # The location of our mock svneditor script.
> > if sys.platform == 'win32':
> > @@ -300,6 +299,43 @@
> > arg = arg.replace('$', '\$')
> > return '"%s"' % (arg,)
> > +def open_pipe(command, mode):
> > + """Opens a popen3 pipe to COMMAND in MODE.
> > +
> > + Returns (infile, outfile, errfile, waiter); waiter
> > + should be passed to wait_on_pipe."""
> > + if platform_with_popen3_class:
> > + kid = Popen3(command, True)
> > + return kid.tochild, kid.fromchild, kid.childerr, (kid, command)
> > + else:
> > + inf, outf, errf = os.popen3(command, mode)
> > + return inf, outf, errf, None
> > +
> > +def wait_on_pipe(waiter):
> > + """Waits for KID (opened with open_pipe) to finish, dying
> > + if it does. Returns kid's exit code."""
> > + if waiter is None:
> > + return
> Even on Windows, don't you want to wait, even though you may pick up the wrong
> PID? Better than leaving the child processes un-waited upon.
I agree, but is this a regression? I thought (and the docs back me
up) that windows didn't have os.wait and so the platform_has_os_wait
blocks weren't being executed.
If people think it's OK to require Python 2.2 or 2.4 for the test
suite we should jus use subprocess, which works on both platforms,
David Glasser | glasser_at_davidglasser.net | http://www.davidglasser.net/
To unsubscribe, e-mail: firstname.lastname@example.org
For additional commands, e-mail: email@example.com
Received on Thu Oct 18 03:28:45 2007