[PATCH 2 of 3] killdaemons: use posixfile to avoid intermittent unlink errors on Windows
Yuya Nishihara
yuya at tcha.org
Tue May 16 10:29:45 EDT 2017
On Mon, 15 May 2017 21:40:24 -0400, Matt Harbison wrote:
> On Mon, 15 May 2017 10:19:19 -0400, Yuya Nishihara <yuya at tcha.org> wrote:
>
> > On Mon, 15 May 2017 00:08:31 -0400, Matt Harbison wrote:
> >> # HG changeset patch
> >> # User Matt Harbison <matt_harbison at yahoo.com>
> >> # Date 1494808413 14400
> >> # Sun May 14 20:33:33 2017 -0400
> >> # Node ID 809709930080937b6b56e5cad285798f29a10280
> >> # Parent 024271e90987e5794dab6eb00844467065fae7e4
> >> killdaemons: use posixfile to avoid intermittent unlink errors on
> >> Windows
> >>
> >> This is the aforementioned fix for the occasional cleanup error with
> >> #serve
> >> enabled. There are a handful of tests that neglect to kill the daemons
> >> they
> >> spawned, and this code is doing a last ditch reap of them. The test
> >> that got
> >> flagged was non-deterministic, and I've seen up to 3 fail in the same
> >> run.
> >>
> >> The problem with trying to import the mercurial module is that while it
> >> is
> >> available for running the individual *.t files, it is not in sys.path
> >> for
> >> run-tests.py itself. I couldn't think of any other way to make this
> >> work, and
> >> not affect sys.path for the indiviual tests. (The main source tree
> >> _is_ in
> >> PYTHONPATH when this is imported from run-tests.py.)
> >>
> >> diff --git a/tests/killdaemons.py b/tests/killdaemons.py
> >> --- a/tests/killdaemons.py
> >> +++ b/tests/killdaemons.py
> >> @@ -7,6 +7,16 @@
> >> import sys
> >> import time
> >>
> >> +# PYTHONPATH contains the hg source tree when invoked from
> >> ./run-tests, but
> >> +# sys.path does not, and importing mercurial fails. The first import
> >> works from
> >> +# the .t files without editing the path.
> >> +try:
> >> + from mercurial.util import posixfile
> >> +except ImportError:
> >> + srctree =
> >> os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
> >> + sys.path.insert(1, srctree)
> >> + from mercurial.util import posixfile
> >
> > sys.path is global. I slightly prefer moving this hack to run-tests.py if
> > it's okay for run-tests.py to depend on Mercurial modules.
>
> I'm not sure if the dependency is OK, but I wasn't sure what else to do.
> (util.posixfile is a wrapper around osutil.posixfile, so it's not like it
> can be copy/pasted.)
Maybe you can copy from the pure version. The whole class is big, but the
important part would be just a few lines.
If the problem can be mitigated by reading pidfile before killing, we won't
need a posixfile. But I guess the problem wouldn't be that simple.
More information about the Mercurial-devel
mailing list