Skip to content

Instantly share code, notes, and snippets.

@mgedmin
Last active March 13, 2017 14:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mgedmin/915b5e797c42f622225e to your computer and use it in GitHub Desktop.
Save mgedmin/915b5e797c42f622225e to your computer and use it in GitHub Desktop.

detox creates environments unnecessarily

Version information :

$ detox --version
2.1.1 imported from /home/mg/.venv/local/lib/python2.7/site-packages/tox/__init__.pyc

$ tox --version
2.1.1 imported from /home/mg/.venv/local/lib/python2.7/site-packages/tox/__init__.pyc

$ pip list | grep tox
detox (0.10.0)
tox (2.1.1)

Steps to reproduce:

  1. Create a tox.ini:

    [tox]
    envlist = py27,py34
    skipsdist = true
    
    [testenv]
    deps =
        mock
    commands =
        python -c pass
  2. Run detox :

    $ detox
    py27 create: /home/mg/src/bugs/detox-bug/.tox/py27
    py34 create: /home/mg/src/bugs/detox-bug/.tox/py34
    py27 installdeps: mock
    py34 installdeps: mock
    py27 runtests: PYTHONHASHSEED='1700383350'
    py27 runtests: commands[0] | python -c pass
    py34 runtests: PYTHONHASHSEED='1700383350'
    py34 runtests: commands[0] | python -c pass
    ________________________ summary ________________________
      py27: commands succeeded
      py34: commands succeeded
      congratulations :)
  3. Run detox again.

Expected behavior:

$ detox
py27 runtests: PYTHONHASHSEED='3485389327'
py27 runtests: commands[0] | python -c pass
py34 runtests: PYTHONHASHSEED='3485389327'
py34 runtests: commands[0] | python -c pass
________________________ summary ________________________
  py27: commands succeeded
  py34: commands succeeded
  congratulations :)

Actual behavior:

$ detox
py27 create: /home/mg/src/bugs/detox-bug/.tox/py27
py34 create: /home/mg/src/bugs/detox-bug/.tox/py34
py27 installdeps: mock
py34 installdeps: mock
py34 runtests: PYTHONHASHSEED='2836152123'
py27 runtests: commands[0] | python -c pass
py27 runtests: PYTHONHASHSEED='2836152123'
py34 runtests: commands[0] | python -c pass
________________________ summary ________________________
  py27: commands succeeded
  py34: commands succeeded
  congratulations :)

Interesting observations:

  • run tox, then run detox again:

    $ tox
    py27 create: /home/mg/src/bugs/detox-bug/.tox/py27
    py27 installdeps: mock
    py27 installed: funcsigs==0.4,mock==1.3.0,pbr==1.8.1,six==1.10.0,wheel==0.24.0
    py27 runtests: PYTHONHASHSEED='2247925867'
    py34 create: /home/mg/src/bugs/detox-bug/.tox/py34
    py34 installdeps: mock
    py34 installed: mock==1.3.0,pbr==1.8.1,six==1.10.0,wheel==0.24.0
    py34 runtests: PYTHONHASHSEED='2247925867'
    ________________________ summary ________________________
      py27: commands succeeded
      py34: commands succeeded
      congratulations :)
    
    $ detox
    py27 runtests: PYTHONHASHSEED='3552145827'
    py34 runtests: PYTHONHASHSEED='3552145827'
    ________________________ summary ________________________
      py27: commands succeeded
      py34: commands succeeded
      congratulations :)
    
    $ detox
    py27 runtests: PYTHONHASHSEED='1363150801'
    py34 runtests: PYTHONHASHSEED='1363150801'
    ________________________ summary ________________________
      py27: commands succeeded
      py34: commands succeeded
      congratulations :)

    see? it's fixed!

  • edit tox.ini and change the deps of one of the environments:

    [testenv:py27]
    deps =
        mock
        coverage

    Now run detox twice :

    $ detox
    py27 recreate: /home/mg/src/bugs/detox-bug/.tox/py27
    py34 runtests: PYTHONHASHSEED='2209373244'
    py27 installdeps: mock, coverage
    py27 runtests: PYTHONHASHSEED='2209373244'
    ________________________ summary ________________________
      py27: commands succeeded
      py34: commands succeeded
      congratulations :)
    
    $ detox
    py27 create: /home/mg/src/bugs/detox-bug/.tox/py27
    py34 runtests: PYTHONHASHSEED='1329105987'
    py27 installdeps: mock, coverage
    py27 runtests: PYTHONHASHSEED='1329105987'
    ________________________ summary ________________________
      py27: commands succeeded
      py34: commands succeeded
      congratulations :)

    Note how it recreates the env on 1st run, and then plain "creates" it again? Now run tox twice and detox again:

    $ tox
    py27 create: /home/mg/src/bugs/detox-bug/.tox/py27
    py27 installdeps: mock, coverage
    py27 installed: coverage==4.0.1,funcsigs==0.4,mock==1.3.0,pbr==1.8.1,six==1.10.0,wheel==0.24.0
    py27 runtests: PYTHONHASHSEED='1755727780'
    py34 installed: mock==1.3.0,pbr==1.8.1,six==1.10.0,wheel==0.24.0
    py34 runtests: PYTHONHASHSEED='1755727780'
    ________________________ summary ________________________
      py27: commands succeeded
      py34: commands succeeded
      congratulations :)
    
    $ tox
    py27 installed: coverage==4.0.1,funcsigs==0.4,mock==1.3.0,pbr==1.8.1,six==1.10.0,wheel==0.24.0
    py27 runtests: PYTHONHASHSEED='1931080271'
    py34 installed: mock==1.3.0,pbr==1.8.1,six==1.10.0,wheel==0.24.0
    py34 runtests: PYTHONHASHSEED='1931080271'
    ________________________ summary ________________________
      py27: commands succeeded
      py34: commands succeeded
      congratulations :)
    
    $ detox
    py27 runtests: PYTHONHASHSEED='3586531515'
    py34 runtests: PYTHONHASHSEED='3586531515'
    ________________________ summary ________________________
      py27: commands succeeded
      py34: commands succeeded
      congratulations :)
[tox]
envlist = py27,py34
skipsdist = true
[testenv]
deps =
mock
commands =
python -c 'pass'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment