virtualenv 21.2.4__tar.gz → 21.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {virtualenv-21.2.4 → virtualenv-21.3.0}/PKG-INFO +1 -1
- {virtualenv-21.2.4 → virtualenv-21.3.0}/pyproject.toml +1 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/__init__.py +2 -0
- virtualenv-21.3.0/src/virtualenv/activation/xonsh/__init__.py +34 -0
- virtualenv-21.3.0/src/virtualenv/activation/xonsh/activate.xsh +101 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/config/cli/parser.py +3 -2
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/run/plugin/base.py +8 -2
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/embed/__init__.py +7 -6
- virtualenv-21.3.0/src/virtualenv/seed/wheels/embed/pip-26.1-py3-none-any.whl +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/version.py +2 -2
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/activation/conftest.py +22 -9
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/activation/test_activation_support.py +3 -2
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/activation/test_powershell.py +2 -1
- virtualenv-21.3.0/tests/unit/activation/test_xonsh.py +91 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/seed/embed/test_bootstrap_link_via_app_data.py +6 -1
- {virtualenv-21.2.4 → virtualenv-21.3.0}/.gitignore +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/LICENSE +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/README.md +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/__main__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/activator.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/bash/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/bash/activate.sh +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/batch/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/batch/activate.bat +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/batch/deactivate.bat +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/batch/pydoc.bat +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/cshell/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/cshell/activate.csh +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/fish/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/fish/activate.fish +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/nushell/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/nushell/activate.nu +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/powershell/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/powershell/activate.ps1 +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/python/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/python/activate_this.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/activation/via_template.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/app_data/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/app_data/base.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/app_data/na.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/app_data/read_only.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/app_data/via_disk_folder.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/app_data/via_tempdir.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/config/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/config/cli/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/config/convert.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/config/env_var.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/config/ini.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/creator.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/debug.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/describe.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/pyenv_cfg.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/_virtualenv.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/api.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/builtin_way.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/cpython/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/cpython/common.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/cpython/cpython3.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/cpython/mac_os.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/graalpy/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/pypy/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/pypy/common.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/pypy/pypy3.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/ref.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/rustpython/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/via_global_self_do.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/store.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/venv.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/discovery/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/discovery/builtin.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/discovery/cached_py_info.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/discovery/discover.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/discovery/py_info.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/discovery/py_spec.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/info.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/py.typed +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/report.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/run/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/run/plugin/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/run/plugin/activators.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/run/plugin/creators.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/run/plugin/discovery.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/run/plugin/seeders.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/run/session.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/base_embed.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/pip_invoke.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/via_app_data/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/via_app_data/pip_install/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/via_app_data/pip_install/base.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/via_app_data/pip_install/copy.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/via_app_data/pip_install/symlink.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/via_app_data/via_app_data.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/seeder.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/acquire.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/bundle.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/embed/pip-25.0.1-py3-none-any.whl +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/embed/pip-26.0.1-py3-none-any.whl +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/embed/setuptools-75.3.4-py3-none-any.whl +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/embed/setuptools-82.0.1-py3-none-any.whl +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/embed/wheel-0.45.1-py3-none-any.whl +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/periodic_update.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/util.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/util/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/util/error.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/util/lock.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/util/path/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/util/path/_permission.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/util/path/_sync.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/util/path/_win.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/util/subprocess/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/util/zipapp.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tasks/__main__zipapp.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tasks/make_zipapp.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tasks/release.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tasks/update_embedded.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tasks/upgrade_wheels.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/conftest.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/integration/test_cachedir_tag.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/integration/test_race_condition_simulation.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/integration/test_run_int.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/integration/test_zipapp.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/types.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/activation/test_activator.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/activation/test_bash.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/activation/test_batch.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/activation/test_csh.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/activation/test_fish.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/activation/test_nushell.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/activation/test_python_activator.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/config/cli/test_help_formatter.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/config/cli/test_parser.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/config/test___main__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/config/test_env_var.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/config/test_ini.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/conftest.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/console_app/demo/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/console_app/demo/__main__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/console_app/setup.cfg +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/console_app/setup.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/test_creator.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/test_interpreters.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/_test_race_condition_helper.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/conftest.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/cpython/conftest.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/cpython/cpython3_win_embed.json +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/cpython/cpython3_win_free_threaded.json +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/cpython/test_cpython3_posix.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/cpython/test_cpython3_win.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/pypy/deb_pypy37.json +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/pypy/deb_pypy38.json +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/pypy/portable_pypy38.json +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/pypy/test_pypy3.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/rustpython/rustpython_posix.json +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/rustpython/rustpython_windows.json +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/rustpython/test_rustpython.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/testing/__init__.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/testing/helpers.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/testing/path.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/testing/py_info.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/greet/greet2.c +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/greet/greet3.c +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/greet/setup.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/test_api.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/test_build_c_ext.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/test_race_condition.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/discovery/test_discovery.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/seed/embed/test_base_embed.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/seed/embed/test_pip_invoke.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/seed/wheels/test_acquire.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/seed/wheels/test_acquire_find_wheel.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/seed/wheels/test_bundle.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/seed/wheels/test_periodic_update.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/seed/wheels/test_wheels_util.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/test_file_limit.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/test_run.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/test_util.py +0 -0
- {virtualenv-21.2.4 → virtualenv-21.3.0}/tox.toml +0 -0
|
@@ -65,6 +65,7 @@ entry-points."virtualenv.activate".fish = "virtualenv.activation.fish:FishActiva
|
|
|
65
65
|
entry-points."virtualenv.activate".nushell = "virtualenv.activation.nushell:NushellActivator"
|
|
66
66
|
entry-points."virtualenv.activate".powershell = "virtualenv.activation.powershell:PowerShellActivator"
|
|
67
67
|
entry-points."virtualenv.activate".python = "virtualenv.activation.python:PythonActivator"
|
|
68
|
+
entry-points."virtualenv.activate".xonsh = "virtualenv.activation.xonsh:XonshActivator"
|
|
68
69
|
entry-points."virtualenv.create".cpython3-mac-brew = "virtualenv.create.via_global_ref.builtin.cpython.mac_os:CPython3macOsBrew"
|
|
69
70
|
entry-points."virtualenv.create".cpython3-mac-framework = "virtualenv.create.via_global_ref.builtin.cpython.mac_os:CPython3macOsFramework"
|
|
70
71
|
entry-points."virtualenv.create".cpython3-posix = "virtualenv.create.via_global_ref.builtin.cpython.cpython3:CPython3Posix"
|
|
@@ -7,6 +7,7 @@ from .fish import FishActivator
|
|
|
7
7
|
from .nushell import NushellActivator
|
|
8
8
|
from .powershell import PowerShellActivator
|
|
9
9
|
from .python import PythonActivator
|
|
10
|
+
from .xonsh import XonshActivator
|
|
10
11
|
|
|
11
12
|
__all__ = [
|
|
12
13
|
"BashActivator",
|
|
@@ -16,4 +17,5 @@ __all__ = [
|
|
|
16
17
|
"NushellActivator",
|
|
17
18
|
"PowerShellActivator",
|
|
18
19
|
"PythonActivator",
|
|
20
|
+
"XonshActivator",
|
|
19
21
|
]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from virtualenv.activation.via_template import ViaTemplateActivator
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from collections.abc import Iterator
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
from virtualenv.create.creator import Creator
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class XonshActivator(ViaTemplateActivator):
|
|
15
|
+
def templates(self) -> Iterator[str]:
|
|
16
|
+
yield "activate.xsh"
|
|
17
|
+
|
|
18
|
+
@staticmethod
|
|
19
|
+
def quote(string: str) -> str:
|
|
20
|
+
"""Quote as a Python literal — xonsh parses the activation script as Python."""
|
|
21
|
+
return repr(string)
|
|
22
|
+
|
|
23
|
+
def replacements(self, creator: Creator, dest_folder: Path) -> dict[str, str]:
|
|
24
|
+
data = super().replacements(creator, dest_folder)
|
|
25
|
+
data.update({
|
|
26
|
+
"__TCL_LIBRARY__": getattr(creator.interpreter, "tcl_lib", None) or "",
|
|
27
|
+
"__TK_LIBRARY__": getattr(creator.interpreter, "tk_lib", None) or "",
|
|
28
|
+
})
|
|
29
|
+
return data
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
__all__ = [
|
|
33
|
+
"XonshActivator",
|
|
34
|
+
]
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# This file must be used with "source bin/activate.xsh" *from xonsh*.
|
|
2
|
+
# You cannot run it directly.
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class _VirtualEnvActivator:
|
|
6
|
+
"""xonsh activation for virtualenv.
|
|
7
|
+
|
|
8
|
+
Rendered into ``<venv>/bin/activate.xsh`` by the template in
|
|
9
|
+
``src/virtualenv/activation/xonsh/`` at generate-time.
|
|
10
|
+
|
|
11
|
+
- Project: https://github.com/pypa/virtualenv
|
|
12
|
+
- Template source: https://github.com/pypa/virtualenv/tree/main/src/virtualenv/activation/xonsh
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# Stashed in _OLD_VIRTUAL_{name} when the variable was not set before
|
|
16
|
+
# activation. deactivate treats this as "unset" rather than "restore to
|
|
17
|
+
# this string". Chosen to be vanishingly unlikely as a real value.
|
|
18
|
+
_UNSET_SENTINEL = "__virtualenv_was_not_set__"
|
|
19
|
+
|
|
20
|
+
def __init__(self):
|
|
21
|
+
self.env = __xonsh__.env
|
|
22
|
+
try:
|
|
23
|
+
# Values substituted by virtualenv's XonshActivator at generate-time.
|
|
24
|
+
# If this file was sourced before template rendering, the bare
|
|
25
|
+
# identifiers below resolve to NameError.
|
|
26
|
+
self.embedded_virtual_env = __VIRTUAL_ENV__
|
|
27
|
+
self.embedded_virtual_prompt = __VIRTUAL_PROMPT__
|
|
28
|
+
self.embedded_bin_name = __BIN_NAME__
|
|
29
|
+
self.embedded_tcl_library = __TCL_LIBRARY__
|
|
30
|
+
self.embedded_tk_library = __TK_LIBRARY__
|
|
31
|
+
except NameError:
|
|
32
|
+
print("virtualenv activate.xsh: template was not rendered")
|
|
33
|
+
raise
|
|
34
|
+
# Variables this activator may save+override; deactivate walks this list.
|
|
35
|
+
self.managed_vars = ("PATH", "PYTHONHOME", "TCL_LIBRARY", "TK_LIBRARY")
|
|
36
|
+
|
|
37
|
+
def _backup_name(self, name):
|
|
38
|
+
return f"_OLD_VIRTUAL_{name}"
|
|
39
|
+
|
|
40
|
+
def _save(self, name):
|
|
41
|
+
"""Stash the current value (or sentinel if unset) so deactivate can undo."""
|
|
42
|
+
backup = self._backup_name(name)
|
|
43
|
+
self.env[backup] = self.env[name] if name in self.env else self._UNSET_SENTINEL
|
|
44
|
+
|
|
45
|
+
def _override(self, name, value):
|
|
46
|
+
self._save(name)
|
|
47
|
+
self.env[name] = value
|
|
48
|
+
|
|
49
|
+
def _drop(self, name):
|
|
50
|
+
self._save(name)
|
|
51
|
+
self.env.pop(name, None)
|
|
52
|
+
|
|
53
|
+
def register_pydoc(self):
|
|
54
|
+
aliases["pydoc"] = ["python", "-m", "pydoc"]
|
|
55
|
+
|
|
56
|
+
def unregister_pydoc(self):
|
|
57
|
+
aliases.pop("pydoc", None)
|
|
58
|
+
|
|
59
|
+
def activate(self):
|
|
60
|
+
from os.path import join, basename
|
|
61
|
+
|
|
62
|
+
aliases["deactivate"] = self.deactivate
|
|
63
|
+
self.deactivate(["nondestructive"]) # wipe any stale state from a prior activation
|
|
64
|
+
|
|
65
|
+
$VIRTUAL_ENV = self.embedded_virtual_env
|
|
66
|
+
$VIRTUAL_ENV_PROMPT = self.embedded_virtual_prompt or basename($VIRTUAL_ENV)
|
|
67
|
+
|
|
68
|
+
self._override("PATH", [join($VIRTUAL_ENV, self.embedded_bin_name), *$PATH])
|
|
69
|
+
self._drop("PYTHONHOME")
|
|
70
|
+
for name, value in (("TCL_LIBRARY", self.embedded_tcl_library), ("TK_LIBRARY", self.embedded_tk_library)):
|
|
71
|
+
if value:
|
|
72
|
+
self._override(name, value)
|
|
73
|
+
|
|
74
|
+
self.register_pydoc()
|
|
75
|
+
|
|
76
|
+
def deactivate(self, args=None):
|
|
77
|
+
for name in self.managed_vars:
|
|
78
|
+
backup = self._backup_name(name)
|
|
79
|
+
if backup not in self.env:
|
|
80
|
+
continue
|
|
81
|
+
previous = self.env[backup]
|
|
82
|
+
del self.env[backup]
|
|
83
|
+
if previous == self._UNSET_SENTINEL:
|
|
84
|
+
self.env.pop(name, None)
|
|
85
|
+
else:
|
|
86
|
+
self.env[name] = previous
|
|
87
|
+
for name in ("VIRTUAL_ENV", "VIRTUAL_ENV_PROMPT"):
|
|
88
|
+
self.env.pop(name, None)
|
|
89
|
+
self.unregister_pydoc()
|
|
90
|
+
if args is None or "nondestructive" not in args:
|
|
91
|
+
del aliases["deactivate"]
|
|
92
|
+
try:
|
|
93
|
+
del __xonsh__.xontrib.virtualenv
|
|
94
|
+
except AttributeError:
|
|
95
|
+
pass
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
if not hasattr(__xonsh__, "xontrib"):
|
|
99
|
+
__xonsh__.xontrib = __xonsh__.imp.types.SimpleNamespace()
|
|
100
|
+
__xonsh__.xontrib.virtualenv = _VirtualEnvActivator()
|
|
101
|
+
__xonsh__.xontrib.virtualenv.activate()
|
|
@@ -113,7 +113,8 @@ class VirtualEnvConfigParser(ArgumentParser):
|
|
|
113
113
|
if outcome is not None:
|
|
114
114
|
break
|
|
115
115
|
if outcome is not None:
|
|
116
|
-
action.default,
|
|
116
|
+
action.default, default_source = outcome
|
|
117
|
+
vars(action)["default_source"] = default_source
|
|
117
118
|
else:
|
|
118
119
|
outcome = action.default, "default"
|
|
119
120
|
self.options.set_src(action.dest, *outcome)
|
|
@@ -122,7 +123,7 @@ class VirtualEnvConfigParser(ArgumentParser):
|
|
|
122
123
|
self._fix_defaults()
|
|
123
124
|
self.add_argument("-h", "--help", action="help", default=SUPPRESS, help="show this help message and exit")
|
|
124
125
|
|
|
125
|
-
def parse_known_args(
|
|
126
|
+
def parse_known_args( # ty: ignore[invalid-method-override]
|
|
126
127
|
self, args: Sequence[str] | None = None, namespace: VirtualEnvOptions | None = None
|
|
127
128
|
) -> tuple[VirtualEnvOptions, list[str]]:
|
|
128
129
|
if namespace is None:
|
|
@@ -22,8 +22,14 @@ class PluginLoader:
|
|
|
22
22
|
@classmethod
|
|
23
23
|
def entry_points_for(cls, key: str) -> OrderedDict[str, type]:
|
|
24
24
|
if sys.version_info >= (3, 10) or importlib_metadata_version >= (3, 6):
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
selected = list(cls.entry_points().select(group=key)) # ty: ignore[unresolved-attribute]
|
|
26
|
+
else:
|
|
27
|
+
selected = list(cls.entry_points().get(key, [])) # ty: ignore[unresolved-attribute]
|
|
28
|
+
# Third-party packages may register entry points with the same name as virtualenv's
|
|
29
|
+
# built-ins (e.g. xonsh's own `virtualenv.activate.xonsh`). Sort so built-ins are
|
|
30
|
+
# inserted last into the OrderedDict, making them win on name collision.
|
|
31
|
+
selected.sort(key=lambda e: e.value.startswith("virtualenv."))
|
|
32
|
+
return OrderedDict((e.name, e.load()) for e in selected)
|
|
27
33
|
|
|
28
34
|
@staticmethod
|
|
29
35
|
def entry_points() -> object:
|
|
@@ -19,27 +19,27 @@ BUNDLE_SUPPORT = {
|
|
|
19
19
|
"setuptools": "setuptools-82.0.1-py3-none-any.whl",
|
|
20
20
|
},
|
|
21
21
|
"3.10": {
|
|
22
|
-
"pip": "pip-26.
|
|
22
|
+
"pip": "pip-26.1-py3-none-any.whl",
|
|
23
23
|
"setuptools": "setuptools-82.0.1-py3-none-any.whl",
|
|
24
24
|
},
|
|
25
25
|
"3.11": {
|
|
26
|
-
"pip": "pip-26.
|
|
26
|
+
"pip": "pip-26.1-py3-none-any.whl",
|
|
27
27
|
"setuptools": "setuptools-82.0.1-py3-none-any.whl",
|
|
28
28
|
},
|
|
29
29
|
"3.12": {
|
|
30
|
-
"pip": "pip-26.
|
|
30
|
+
"pip": "pip-26.1-py3-none-any.whl",
|
|
31
31
|
"setuptools": "setuptools-82.0.1-py3-none-any.whl",
|
|
32
32
|
},
|
|
33
33
|
"3.13": {
|
|
34
|
-
"pip": "pip-26.
|
|
34
|
+
"pip": "pip-26.1-py3-none-any.whl",
|
|
35
35
|
"setuptools": "setuptools-82.0.1-py3-none-any.whl",
|
|
36
36
|
},
|
|
37
37
|
"3.14": {
|
|
38
|
-
"pip": "pip-26.
|
|
38
|
+
"pip": "pip-26.1-py3-none-any.whl",
|
|
39
39
|
"setuptools": "setuptools-82.0.1-py3-none-any.whl",
|
|
40
40
|
},
|
|
41
41
|
"3.15": {
|
|
42
|
-
"pip": "pip-26.
|
|
42
|
+
"pip": "pip-26.1-py3-none-any.whl",
|
|
43
43
|
"setuptools": "setuptools-82.0.1-py3-none-any.whl",
|
|
44
44
|
},
|
|
45
45
|
}
|
|
@@ -50,6 +50,7 @@ MAX = "3.8"
|
|
|
50
50
|
BUNDLE_SHA256 = {
|
|
51
51
|
"pip-25.0.1-py3-none-any.whl": "c46efd13b6aa8279f33f2864459c8ce587ea6a1a59ee20de055868d8f7688f7f",
|
|
52
52
|
"pip-26.0.1-py3-none-any.whl": "bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b",
|
|
53
|
+
"pip-26.1-py3-none-any.whl": "4e8486d821d814b77319acb7b9e8bf5a4ee7590a643e7cb21029f209be8573c1",
|
|
53
54
|
"setuptools-75.3.4-py3-none-any.whl": "2dd50a7f42dddfa1d02a36f275dbe716f38ed250224f609d35fb60a09593d93e",
|
|
54
55
|
"setuptools-82.0.1-py3-none-any.whl": "a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb",
|
|
55
56
|
"wheel-0.45.1-py3-none-any.whl": "708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248",
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '21.
|
|
22
|
-
__version_tuple__ = version_tuple = (21,
|
|
21
|
+
__version__ = version = '21.3.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (21, 3, 0)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -34,12 +34,13 @@ class ActivationTester:
|
|
|
34
34
|
try:
|
|
35
35
|
process = Popen(
|
|
36
36
|
self._version_cmd,
|
|
37
|
+
stdin=subprocess.DEVNULL,
|
|
37
38
|
universal_newlines=True,
|
|
38
39
|
stdout=subprocess.PIPE,
|
|
39
40
|
stderr=subprocess.PIPE,
|
|
40
41
|
encoding="utf-8",
|
|
41
42
|
)
|
|
42
|
-
out, err = process.communicate()
|
|
43
|
+
out, err = process.communicate(timeout=30)
|
|
43
44
|
except Exception as exception:
|
|
44
45
|
self._version = exception
|
|
45
46
|
if raise_on_fail:
|
|
@@ -75,12 +76,15 @@ class ActivationTester:
|
|
|
75
76
|
invoke, env = [*self._invoke_script, str(test_script)], self.env(tmp_path)
|
|
76
77
|
|
|
77
78
|
try:
|
|
78
|
-
process = Popen(invoke, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env)
|
|
79
|
-
raw_, _ = process.communicate(timeout=
|
|
80
|
-
except subprocess.TimeoutExpired:
|
|
79
|
+
process = Popen(invoke, stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env)
|
|
80
|
+
raw_, _ = process.communicate(timeout=60)
|
|
81
|
+
except subprocess.TimeoutExpired as exc:
|
|
81
82
|
process.kill()
|
|
82
|
-
process.communicate()
|
|
83
|
-
|
|
83
|
+
remaining, _ = process.communicate(timeout=5)
|
|
84
|
+
partial = (exc.stdout or b"") + (remaining or b"")
|
|
85
|
+
pytest.fail(
|
|
86
|
+
f"Activation script timed out:\nPartial output:\n{partial.decode(errors='replace')}\nCommand: {invoke}"
|
|
87
|
+
)
|
|
84
88
|
except subprocess.CalledProcessError as exception:
|
|
85
89
|
output = exception.output + exception.stderr
|
|
86
90
|
assert not exception.returncode, output # noqa: PT017
|
|
@@ -103,7 +107,7 @@ class ActivationTester:
|
|
|
103
107
|
env["PYTHONIOENCODING"] = "utf-8"
|
|
104
108
|
env["PATH"] = os.pathsep.join([dirname(sys.executable), *env.get("PATH", "").split(os.pathsep)])
|
|
105
109
|
# clear up some environment variables so they don't affect the tests
|
|
106
|
-
for key in [k for k in env if k.startswith(("_OLD", "VIRTUALENV_"))]:
|
|
110
|
+
for key in [k for k in env if k.startswith(("_OLD", "VIRTUALENV_", "COVERAGE_"))]:
|
|
107
111
|
del env[key]
|
|
108
112
|
return env
|
|
109
113
|
|
|
@@ -116,7 +120,7 @@ class ActivationTester:
|
|
|
116
120
|
return test_script
|
|
117
121
|
|
|
118
122
|
def _get_test_lines(self, activate_script):
|
|
119
|
-
|
|
123
|
+
steps = [
|
|
120
124
|
self.print_python_exe(),
|
|
121
125
|
self.print_os_env_var("VIRTUAL_ENV"),
|
|
122
126
|
self.print_os_env_var("VIRTUAL_ENV_PROMPT"),
|
|
@@ -133,9 +137,17 @@ class ActivationTester:
|
|
|
133
137
|
self.print_os_env_var("VIRTUAL_ENV_PROMPT"),
|
|
134
138
|
"", # just finish with an empty new line
|
|
135
139
|
]
|
|
140
|
+
result = []
|
|
141
|
+
for index, step in enumerate(steps):
|
|
142
|
+
result.extend((self.print_marker(index), step))
|
|
143
|
+
return result
|
|
144
|
+
|
|
145
|
+
def print_marker(self, step) -> str:
|
|
146
|
+
return f'echo "__STEP_{step}__"'
|
|
136
147
|
|
|
137
148
|
def assert_output(self, out, raw, tmp_path) -> None:
|
|
138
149
|
"""Compare _get_test_lines() with the expected values."""
|
|
150
|
+
out = [line for line in out if not line.strip('"').startswith("__STEP_")]
|
|
139
151
|
assert out[0], raw
|
|
140
152
|
assert out[1] == "None", raw
|
|
141
153
|
assert out[2] == "None", raw
|
|
@@ -213,11 +225,12 @@ class RaiseOnNonSourceCall(ActivationTester):
|
|
|
213
225
|
env, activate_script = super().__call__(monkeypatch, tmp_path)
|
|
214
226
|
process = Popen(
|
|
215
227
|
self.non_source_activate(activate_script),
|
|
228
|
+
stdin=subprocess.DEVNULL,
|
|
216
229
|
stdout=subprocess.PIPE,
|
|
217
230
|
stderr=subprocess.PIPE,
|
|
218
231
|
env=env,
|
|
219
232
|
)
|
|
220
|
-
_out, err_ = process.communicate()
|
|
233
|
+
_out, err_ = process.communicate(timeout=60)
|
|
221
234
|
err = err_.decode("utf-8")
|
|
222
235
|
assert process.returncode
|
|
223
236
|
assert self.non_source_fail_message in err
|
|
@@ -12,12 +12,13 @@ from virtualenv.activation import (
|
|
|
12
12
|
FishActivator,
|
|
13
13
|
PowerShellActivator,
|
|
14
14
|
PythonActivator,
|
|
15
|
+
XonshActivator,
|
|
15
16
|
)
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
@pytest.mark.parametrize(
|
|
19
20
|
"activator_class",
|
|
20
|
-
[BatchActivator, PowerShellActivator, PythonActivator, BashActivator, FishActivator],
|
|
21
|
+
[BatchActivator, PowerShellActivator, PythonActivator, BashActivator, FishActivator, XonshActivator],
|
|
21
22
|
)
|
|
22
23
|
def test_activator_support_windows(mocker, activator_class) -> None:
|
|
23
24
|
activator = activator_class(Namespace(prompt=None))
|
|
@@ -38,7 +39,7 @@ def test_activator_no_support_windows(mocker, activator_class) -> None:
|
|
|
38
39
|
|
|
39
40
|
@pytest.mark.parametrize(
|
|
40
41
|
"activator_class",
|
|
41
|
-
[BashActivator, CShellActivator, FishActivator, PowerShellActivator, PythonActivator],
|
|
42
|
+
[BashActivator, CShellActivator, FishActivator, PowerShellActivator, PythonActivator, XonshActivator],
|
|
42
43
|
)
|
|
43
44
|
def test_activator_support_posix(mocker, activator_class) -> None:
|
|
44
45
|
activator = activator_class(Namespace(prompt=None))
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import shutil
|
|
3
4
|
import sys
|
|
4
5
|
from argparse import Namespace
|
|
5
6
|
|
|
@@ -101,7 +102,7 @@ def test_powershell(activation_tester_class, activation_tester, monkeypatch) ->
|
|
|
101
102
|
|
|
102
103
|
class PowerShell(activation_tester_class):
|
|
103
104
|
def __init__(self, session) -> None:
|
|
104
|
-
cmd = "powershell.exe" if sys.platform == "win32" else "pwsh"
|
|
105
|
+
cmd = "pwsh" if shutil.which("pwsh") else "powershell.exe" if sys.platform == "win32" else "pwsh"
|
|
105
106
|
super().__init__(PowerShellActivator, session, cmd, "activate.ps1", "ps1")
|
|
106
107
|
self._version_cmd = [cmd, "-c", "$PSVersionTable"]
|
|
107
108
|
self._invoke_script = [cmd, "-NonInteractive", "-NoProfile", "-ExecutionPolicy", "ByPass", "-File"]
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from argparse import Namespace
|
|
4
|
+
from shutil import which
|
|
5
|
+
from unittest.mock import create_autospec
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
from python_discovery import PythonInfo
|
|
9
|
+
|
|
10
|
+
from virtualenv.activation import XonshActivator
|
|
11
|
+
from virtualenv.create.creator import Creator
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@pytest.mark.parametrize(
|
|
15
|
+
("tcl_lib", "tk_lib", "present"),
|
|
16
|
+
[
|
|
17
|
+
("/path/to/tcl", "/path/to/tk", True),
|
|
18
|
+
(None, None, False),
|
|
19
|
+
],
|
|
20
|
+
)
|
|
21
|
+
def test_xonsh_tkinter_generation(tmp_path, tcl_lib, tk_lib, present) -> None:
|
|
22
|
+
# GIVEN
|
|
23
|
+
interpreter = create_autospec(PythonInfo, instance=True)
|
|
24
|
+
interpreter.tcl_lib = tcl_lib
|
|
25
|
+
interpreter.tk_lib = tk_lib
|
|
26
|
+
|
|
27
|
+
bin_dir = tmp_path / "bin"
|
|
28
|
+
bin_dir.mkdir()
|
|
29
|
+
|
|
30
|
+
creator = create_autospec(Creator, instance=True)
|
|
31
|
+
creator.dest = tmp_path
|
|
32
|
+
creator.bin_dir = bin_dir
|
|
33
|
+
creator.interpreter = interpreter
|
|
34
|
+
creator.pyenv_cfg = {}
|
|
35
|
+
creator.env_name = "my-env"
|
|
36
|
+
|
|
37
|
+
activator = XonshActivator(Namespace(prompt=None))
|
|
38
|
+
|
|
39
|
+
# WHEN
|
|
40
|
+
activator.generate(creator)
|
|
41
|
+
content = (bin_dir / "activate.xsh").read_text(encoding="utf-8")
|
|
42
|
+
|
|
43
|
+
# THEN
|
|
44
|
+
# `managed_vars` always lists TCL_LIBRARY/TK_LIBRARY so deactivate can clean up
|
|
45
|
+
# whatever activation introduced — regardless of whether the interpreter reported
|
|
46
|
+
# tcl_lib/tk_lib.
|
|
47
|
+
assert '"TCL_LIBRARY"' in content
|
|
48
|
+
assert '"TK_LIBRARY"' in content
|
|
49
|
+
|
|
50
|
+
if present:
|
|
51
|
+
# Paths are embedded in __init__ as Python string literals and used
|
|
52
|
+
# from self.embedded_* attributes during activate().
|
|
53
|
+
assert "self.embedded_tcl_library = '/path/to/tcl'" in content
|
|
54
|
+
assert "self.embedded_tk_library = '/path/to/tk'" in content
|
|
55
|
+
else:
|
|
56
|
+
# Empty strings are falsy, so the override loop is skipped at runtime.
|
|
57
|
+
assert "self.embedded_tcl_library = ''" in content
|
|
58
|
+
assert "self.embedded_tk_library = ''" in content
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_xonsh_quote() -> None:
|
|
62
|
+
# XonshActivator.quote uses repr() so the template substitution produces valid
|
|
63
|
+
# Python literals — this is what the rest of the tests rely on.
|
|
64
|
+
assert XonshActivator.quote("hello") == "'hello'"
|
|
65
|
+
assert XonshActivator.quote("it's") == '"it\'s"'
|
|
66
|
+
assert XonshActivator.quote("") == "''"
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@pytest.mark.skipif(which("xonsh") is None, reason="xonsh is not installed")
|
|
70
|
+
def test_xonsh(activation_tester_class, activation_tester) -> None:
|
|
71
|
+
class Xonsh(activation_tester_class):
|
|
72
|
+
def __init__(self, session) -> None:
|
|
73
|
+
super().__init__(XonshActivator, session, "xonsh", "activate.xsh", "xsh")
|
|
74
|
+
self._invoke_script.append("--no-rc")
|
|
75
|
+
|
|
76
|
+
def env(self, tmp_path):
|
|
77
|
+
env = super().env(tmp_path)
|
|
78
|
+
# Keep the subprocess hermetic: skip auto-loaded xontribs that a dev may
|
|
79
|
+
# have installed locally, and surface tracebacks so test failures are
|
|
80
|
+
# actionable.
|
|
81
|
+
env["XONTRIBS_AUTOLOAD_DISABLED"] = "1"
|
|
82
|
+
env["XONSH_SHOW_TRACEBACK"] = "1"
|
|
83
|
+
return env
|
|
84
|
+
|
|
85
|
+
def print_prompt(self):
|
|
86
|
+
return 'echo @("(" + $VIRTUAL_ENV_PROMPT + ") ")'
|
|
87
|
+
|
|
88
|
+
def activate_call(self, script):
|
|
89
|
+
return f"source {self.quote(str(script))}"
|
|
90
|
+
|
|
91
|
+
activation_tester(Xonsh)
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/seed/embed/test_bootstrap_link_via_app_data.py
RENAMED
|
@@ -122,7 +122,12 @@ def test_seed_link_via_app_data(tmp_path, coverage_env, current_fastest, copies,
|
|
|
122
122
|
purelib = result.creator.purelib
|
|
123
123
|
patch_files = {purelib / f"{'_virtualenv'}.{i}" for i in ("py", "pyc", "pth")}
|
|
124
124
|
patch_files.add(purelib / "__pycache__")
|
|
125
|
-
|
|
125
|
+
|
|
126
|
+
# pip 26.1+ leaves empty parent directories on uninstall (pypa/pip#13725)
|
|
127
|
+
def _has_files(path: Path) -> bool:
|
|
128
|
+
return path.is_file() or (path.is_dir() and any(_has_files(child) for child in path.iterdir()))
|
|
129
|
+
|
|
130
|
+
post_run = {p for p in set(site_package.iterdir()) - patch_files if _has_files(p)}
|
|
126
131
|
assert not post_run, "\n".join(str(i) for i in post_run)
|
|
127
132
|
|
|
128
133
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/__init__.py
RENAMED
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/builtin_way.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/pypy/common.py
RENAMED
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/create/via_global_ref/builtin/pypy/pypy3.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/via_app_data/pip_install/base.py
RENAMED
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/via_app_data/pip_install/copy.py
RENAMED
|
File without changes
|
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/embed/via_app_data/via_app_data.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/embed/pip-25.0.1-py3-none-any.whl
RENAMED
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/src/virtualenv/seed/wheels/embed/pip-26.0.1-py3-none-any.whl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/conftest.py
RENAMED
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/cpython/conftest.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/pypy/test_pypy3.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/testing/__init__.py
RENAMED
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/testing/helpers.py
RENAMED
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/testing/path.py
RENAMED
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/builtin/testing/py_info.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/test_build_c_ext.py
RENAMED
|
File without changes
|
{virtualenv-21.2.4 → virtualenv-21.3.0}/tests/unit/create/via_global_ref/test_race_condition.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|