From 3affc39e827adc5421bb3df45a331b9ca1879d01 Mon Sep 17 00:00:00 2001 From: "Ian H. Pittwood" Date: Fri, 6 Sep 2019 22:12:41 -0500 Subject: [PATCH] #3722 Check overlapping packages between default and dev during uninstall all-dev --- pipenv/core.py | 6 ++++-- tests/integration/test_uninstall.py | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pipenv/core.py b/pipenv/core.py index 3e299c8da1..edb0151567 100644 --- a/pipenv/core.py +++ b/pipenv/core.py @@ -2245,8 +2245,10 @@ def do_uninstall( ) do_purge(bare=False, allow_global=system) sys.exit(0) + overlapping_package_names = set() if all_dev: package_names = project_pkg_names["dev"] + overlapping_package_names = project_pkg_names["dev"] & project_pkg_names["default"] else: package_names = set([pkg_name for pkg_name in package_names]) selected_pkg_map = { @@ -2264,7 +2266,7 @@ def do_uninstall( ) ) # Uninstall the package. - if package_name in packages_to_remove: + if package_name in packages_to_remove and package_name not in overlapping_package_names: with project.environment.activated(): if pip_path is None: pip_path = which_pip(allow_global=system) @@ -2286,7 +2288,7 @@ def do_uninstall( crayons.white(fix_utf8("Pipfile.lock…"))) ) lockfile = project.get_or_create_lockfile() - if normalized in lockfile.default: + if normalized in lockfile.default and package_name not in overlapping_package_names: del lockfile.default[normalized] if normalized in lockfile.develop: del lockfile.develop[normalized] diff --git a/tests/integration/test_uninstall.py b/tests/integration/test_uninstall.py index ee5e53a5c7..a20c83668e 100644 --- a/tests/integration/test_uninstall.py +++ b/tests/integration/test_uninstall.py @@ -155,10 +155,10 @@ def test_uninstall_all_dev(PipenvInstance): @pytest.mark.install def test_uninstall_all_dev_leave_prod_packages(PipenvInstance): with PipenvInstance() as p: - c = p.pipenv("install flask") + c = p.pipenv("install --dev black") assert c.return_code == 0 - c = p.pipenv("install --dev black") + c = p.pipenv("install flask") assert c.return_code == 0 assert "flask" in p.pipfile["packages"]