Make keep-outdated work with multiple categories.

This commit is contained in:
Matt Davis
2022-09-19 11:20:20 -04:00
parent afb5ce7d3e
commit 169eb17d3c
2 changed files with 18 additions and 18 deletions
+15 -14
View File
@@ -22,12 +22,14 @@ from pipenv.patched.pip._internal.req.constructors import (
)
from pipenv.patched.pip._internal.req.req_file import parse_requirements
from pipenv.patched.pip._internal.utils.misc import split_auth_from_netloc
from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name
from pipenv.project import Project
from pipenv.utils.constants import MYPY_RUNNING
from pipenv.utils.dependencies import (
convert_deps_to_pip,
get_canonical_names,
get_constraints_from_deps,
get_lockfile_section_using_pipfile_category,
is_pinned,
is_required_version,
is_star,
@@ -1090,25 +1092,24 @@ def do_lock(
# Support for --keep-outdated...
if keep_outdated:
from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name
for category_name in project.get_package_categories():
category = project.get_pipfile_section(category_name)
lockfile_section = get_lockfile_section_using_pipfile_category(category_name)
for section_name, category in (
("default", project.packages),
("develop", project.dev_packages),
):
for package_specified in category.keys():
if not is_pinned(category[package_specified]):
canonical_name = canonicalize_name(package_specified)
if canonical_name in cached_lockfile[section_name]:
lockfile[section_name][canonical_name] = cached_lockfile[
section_name
if canonical_name in cached_lockfile[lockfile_section]:
lockfile[lockfile_section][canonical_name] = cached_lockfile[
lockfile_section
][canonical_name].copy()
for key in ["default", "develop"]:
packages = set(cached_lockfile[key].keys())
new_lockfile = set(lockfile[key].keys())
missing = packages - new_lockfile
for missing_pkg in missing:
lockfile[key][missing_pkg] = cached_lockfile[key][missing_pkg].copy()
packages = set(cached_lockfile[lockfile_section].keys())
new_lockfile = set(lockfile[lockfile_section].keys())
missing = packages - new_lockfile
for missing_pkg in missing:
lockfile[lockfile_section][missing_pkg] = cached_lockfile[
lockfile_section
][missing_pkg].copy()
# Overwrite any develop packages with default packages.
for category in lockfile_categories:
if category == "default":
+3 -4
View File
@@ -695,10 +695,9 @@ class Project:
)
if from_pipfile and self.pipfile_exists:
lockfile_dict = {
"default": self._lockfile["default"].copy(),
"develop": self._lockfile["develop"].copy(),
}
lockfile_dict = {}
for category in self.get_package_categories(for_lockfile=True):
lockfile_dict[category] = self._lockfile.get(category, {}).copy()
lockfile_dict.update({"_meta": self.get_lockfile_meta()})
lockfile = Req_Lockfile.from_data(
path=self.lockfile_location, data=lockfile_dict, meta_from_project=False