glasser@tigris.org 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.
Blair
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Thu Oct 18 02:42:06 2007