未验证 提交 b8d77b35 编写于 作者: F Frost Ming 提交者: GitHub

fix: Try the read the lock file even if the version is incompatible (#1278)

上级 b89e2bed
Try to read the lock file even if the lock version is incompatible.
......@@ -165,7 +165,7 @@ def check_lockfile(project: Project, raise_not_exist: bool = True) -> str | None
style="yellow",
err=True,
)
return "all"
return "reuse" # try to reuse the lockfile if possible
elif not project.is_lockfile_hash_match():
project.core.ui.echo(
"Lock file hash doesn't match pyproject.toml, packages may be outdated",
......
......@@ -208,8 +208,8 @@ class Environment:
downloaded = finder.download_and_unpack(
best_match.link, dirname, dirname
)
except unearth.UnpackError:
raise download_error
except unearth.UnpackError as e:
raise download_error from e
shutil.move(str(downloaded), path)
@cached_property
......
......@@ -208,7 +208,7 @@ class BaseRepository:
try:
result = self._candidate_info_cache.get(candidate)
except KeyError:
raise CandidateInfoNotFound(candidate)
raise CandidateInfoNotFound(candidate) from None
return result
@cache_result
......@@ -399,7 +399,7 @@ class LockedRepository(BaseRepository):
for key, hashes in lockfile.get("metadata", {}).get("files", {}).items():
self.file_hashes[tuple(key.split(None, 1))] = { # type: ignore
Link(item["url"]): item["hash"] for item in hashes
Link(item["url"]): item["hash"] for item in hashes if "url" in item
}
def _identify_candidate(self, candidate: Candidate) -> tuple:
......
......@@ -49,7 +49,7 @@ class Version:
raise InvalidPyVersion(
f"{version_str}: postreleases are not supported "
"for python version specifiers."
)
) from None
version = tuple(bits)
self._version: Tuple[VersionBit, ...] = version
......
......@@ -452,17 +452,21 @@ class Project:
normalize_name(k): v
for k, v in self.tool_settings.get("overrides", {}).items()
}
if strategy != "all" and not self.is_lockfile_compatible():
self.core.ui.echo(
"Updating the whole lock file as it is not compatible with PDM",
style="yellow",
err=True,
)
strategy = "all"
if not for_install and strategy == "all":
return BaseProvider(repository, allow_prereleases, overrides)
locked_repository: LockedRepository | None = None
if strategy != "all" or for_install:
try:
locked_repository = self.locked_repository
except Exception:
if for_install:
raise
self.core.ui.echo(
"Unable to reuse the lock file as it is not compatible with PDM",
style="yellow",
err=True,
)
locked_repository = self.locked_repository
if locked_repository is None:
return BaseProvider(repository, allow_prereleases, overrides)
if for_install:
return BaseProvider(locked_repository, allow_prereleases, overrides)
provider_class = (
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册