From 196a5bf00bd669abfeb3216555d783b2d4cc9036 Mon Sep 17 00:00:00 2001 From: Dan Ryan Date: Mon, 18 May 2020 10:29:08 -0400 Subject: [PATCH] Compare direct urls to avoid reinstallling Signed-off-by: Dan Ryan --- pipenv/environment.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pipenv/environment.py b/pipenv/environment.py index 735a63bb..9bf1116f 100644 --- a/pipenv/environment.py +++ b/pipenv/environment.py @@ -26,6 +26,7 @@ from .utils import normalize_path, make_posix BASE_WORKING_SET = pkg_resources.WorkingSet(sys.path) +# TODO: Unittests for this class class Environment(object): @@ -723,6 +724,15 @@ class Environment(object): if match is not None: if req.editable and self.find_egg(match): return req.line_instance.path == match.location + elif match.has_metadata("direct_url.json"): + direct_url_metadata = json.loads(match.get_metadata("direct_url.json")) + commit_id = direct_url_metadata.get("vcs_info", {}).get("commit_id", "") + vcs_type = direct_url_metadata.get("vcs_info", {}).get("vcs", "") + _, pipfile_part = req.as_pipfile().popitem() + return ( + vcs_type == req.vcs and commit_id == req.commit_hash + and direct_url_metadata["url"] == pipfile_part[req.vcs] + ) elif req.line_instance.specifiers is not None: return req.line_instance.specifiers.contains( match.version, prereleases=True