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

feat: Delay the trigger of post_lock in add and update command (#1320)

上级 dfaea348
Delay the trigger of `post_lock` for `add` and `update` operations, to ensure the `pyproject.toml` is updated before the hook is run.
......@@ -275,9 +275,10 @@ def do_add(
req.specifier = get_specifier("")
group_deps.update(requirements)
reqs = [r for deps in all_dependencies.values() for r in deps.values()]
resolved = do_lock(
project, strategy, tracked_names, reqs, dry_run=dry_run, hooks=hooks
)
with hooks.skipping("post_lock"):
resolved = do_lock(
project, strategy, tracked_names, reqs, dry_run=dry_run, hooks=hooks
)
# Update dependency specifiers and lockfile hash.
deps_to_update = group_deps if unconstrained else requirements
......@@ -285,6 +286,7 @@ def do_add(
if not dry_run:
project.add_dependencies(deps_to_update, group, dev)
project.write_lockfile(project.lockfile, False)
hooks.try_emit("post_lock", resolution=resolved, dry_run=dry_run)
_populate_requirement_names(group_deps)
if sync:
do_sync(
......@@ -384,6 +386,13 @@ def do_update(
)
for deps in updated_deps.values():
_populate_requirement_names(deps)
if unconstrained and not dry_run:
# Need to update version constraints
save_version_specifiers(updated_deps, resolved, save)
for group, deps in updated_deps.items():
project.add_dependencies(deps, group, dev or False)
lockfile = project.lockfile
project.write_lockfile(lockfile, False)
if sync or dry_run:
do_sync(
project,
......@@ -400,13 +409,6 @@ def do_update(
no_self=no_self,
hooks=hooks,
)
if unconstrained and not dry_run:
# Need to update version constraints
save_version_specifiers(updated_deps, resolved, save)
for group, deps in updated_deps.items():
project.add_dependencies(deps, group, dev or False)
lockfile = project.lockfile
project.write_lockfile(lockfile, False)
def do_remove(
......
from __future__ import annotations
from typing import Any
import contextlib
from typing import Any, Generator
from blinker import Signal
......@@ -21,6 +22,16 @@ class HookManager:
self.project = project
self.skip = skip or []
@contextlib.contextmanager
def skipping(self, *names: str) -> Generator[None, None, None]:
"""
Temporarily skip some hooks.
"""
old_skip = self.skip[:]
self.skip.extend(names)
yield
self.skip = old_skip
@cached_property
def skip_all(self) -> bool:
return ":all" in self.skip
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册