OSError 'Not a directory' when creating env on Jython 2.7.0

Issue #326 on hold
Cosimo Lupo
created an issue

Hi,

I cannot use tox with Jython. I'm using the latest tox 2.3.1, and Jython 2.7.0 on OS X 10.10.5 with Java 1.7.0_79.

I tried to clone this repository and run the test suite using jython. Below is the output from test_venv.py::test_create that shows my issue.

It seems that the subprocess call to virtualenv command that creates the new tox environment is failing because a listdir call in session._initlogpath raises OSError because the envlogdir (where the output from the subprocess is to be logged) does not exist. If I browse the .tox directory in Finder, I can see there is no {envdir}/log subfolder.

Thank you for your support.

Cosimo

(jython-venv) cosimolupo@Cosimo-MBP ~/Documents/Github/tox
$ py.test -v tests/test_venv.py::test_create
============================= test session starts ==============================
platform java1.7.0_79 -- Python 2.7.0, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- /Users/cosimolupo/Documents/Github/fonttools/jython-venv/bin/jython
cachedir: .cache
tox comes from: '/Users/cosimolupo/Documents/Github/tox/tox/__init__$py.class'
rootdir: /Users/cosimolupo/Documents/Github/tox, inifile: tox.ini
collected 28 items 

tests/test_venv.py::test_create FAILED

=================================== FAILURES ===================================
_________________________________ test_create __________________________________

monkeypatch = <_pytest.monkeypatch.monkeypatch instance at 0x69>
mocksession = <tox._pytestplugin.MockSession instance at 0x6a>
newconfig = <function newconfig at 0x6b>

    def test_create(monkeypatch, mocksession, newconfig):
        config = newconfig([], """
            [testenv:py123]
        """)
        envconfig = config.envconfigs['py123']
        venv = VirtualEnv(envconfig, session=mocksession)
        assert venv.path == envconfig.envdir
        assert not venv.path.check()
        action = mocksession.newaction(venv, "getenv")
>       tox_testenv_create(action=action, venv=venv)

tests/test_venv.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tox/venv.py:395: in tox_testenv_create
    venv._pcall(args, venv=False, action=action, cwd=basepath)
tox/venv.py:361: in _pcall
    return action.popen(args, cwd=cwd, env=env,
tox/session.py:121: in popen
    fout = self._initlogpath(self.id)
tox/session.py:107: in _initlogpath
    l = logdir.listdir("%s-*" % actionid)
tox/session.py:107: in _initlogpath
    l = logdir.listdir("%s-*" % actionid)
../fonttools/jython-venv/Lib/site-packages/py/_path/local.py:388: in listdir
    names = py.error.checked_call(os.listdir, self.strpath)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <py._error.ErrorMaker object at 0x6c>
func = <java function listdir 0x6d>
args = ('/private/var/folders/jb/rjz76yw92w7144mwqg119jnm0000gn/T/pytest-of-cosimolupo/pytest-3/test_create0/.tox/py123/log',)
kwargs = {}, __tracebackhide__ = False, cls = <class 'py.error.ENOTDIR'>
value = OSError(20, 'Not a directory'), tb = <traceback object at 0x6e>
errno = 20

    def checked_call(self, func, *args, **kwargs):
        """ call a function and raise an errno-exception if applicable. """
        __tracebackhide__ = True
        try:
            return func(*args, **kwargs)
        except self.Error:
            raise
        except (OSError, EnvironmentError):
            cls, value, tb = sys.exc_info()
            if not hasattr(value, 'errno'):
                raise
            __tracebackhide__ = False
            errno = value.errno
            try:
                if not isinstance(value, WindowsError):
                    raise NameError
            except NameError:
                # we are not on Windows, or we got a proper OSError
                cls = self._geterrnoclass(errno)
            else:
                try:
                    cls = self._geterrnoclass(_winerrnomap[errno])
                except KeyError:
                    raise value
>           raise cls("%s%r" % (func.__name__, args))
E           ENOTDIR: [Not a directory]: listdir('/private/var/folders/jb/rjz76yw92w7144mwqg119jnm0000gn/T/pytest-of-cosimolupo/pytest-3/test_create0/.tox/py123/log',)

../fonttools/jython-venv/Lib/site-packages/py/_error.py:84: ENOTDIR
=========================== 1 failed in 2.31 seconds ===========================