77from packaging .utils import canonicalize_name
88
99from poetry .installation .executor import Executor
10- from poetry .installation .operations import Uninstall
11- from poetry .installation .operations import Update
1210from poetry .repositories import Repository
1311from poetry .repositories import RepositoryPool
1412from poetry .repositories .installed_repository import InstalledRepository
2018
2119 from cleo .io .io import IO
2220 from packaging .utils import NormalizedName
21+ from poetry .core .packages .package import Package
2322 from poetry .core .packages .path_dependency import PathDependency
2423 from poetry .core .packages .project_package import ProjectPackage
2524
2625 from poetry .config .config import Config
2726 from poetry .installation .operations .operation import Operation
2827 from poetry .packages import Locker
28+ from poetry .packages .transitive_package_info import TransitivePackageInfo
2929 from poetry .utils .env import Env
3030
3131
@@ -196,12 +196,9 @@ def _do_refresh(self) -> int:
196196 with solver .provider .use_source_root (
197197 source_root = self ._env .path .joinpath ("src" )
198198 ):
199- ops = solver .solve (use_latest = use_latest ).calculate_operations ()
199+ solved_packages = solver .solve (use_latest = use_latest ).get_solved_packages ()
200200
201- lockfile_repo = LockfileRepository ()
202- self ._populate_lockfile_repo (lockfile_repo , ops )
203-
204- self ._write_lock_file (lockfile_repo , force = True )
201+ self ._write_lock_file (solved_packages , force = True )
205202
206203 return 0
207204
@@ -236,10 +233,18 @@ def _do_install(self) -> int:
236233 with solver .provider .use_source_root (
237234 source_root = self ._env .path .joinpath ("src" )
238235 ):
239- ops = solver .solve (use_latest = self ._whitelist ).calculate_operations ()
236+ solution = solver .solve (use_latest = self ._whitelist )
237+ solved_packages = solution .get_solved_packages ()
238+
239+ if not self .executor .enabled :
240+ # If we are only in lock mode, no need to go any further
241+ self ._write_lock_file (solved_packages )
242+ return 0
240243
241244 lockfile_repo = LockfileRepository ()
242- self ._populate_lockfile_repo (lockfile_repo , ops )
245+ for package in solved_packages :
246+ if not lockfile_repo .has_package (package ):
247+ lockfile_repo .add_package (package )
243248
244249 else :
245250 self ._io .write_line ("<info>Installing dependencies from lock file</>" )
@@ -261,11 +266,6 @@ def _do_install(self) -> int:
261266 locked_repository = self ._locker .locked_repository ()
262267 lockfile_repo = locked_repository
263268
264- if not self .executor .enabled :
265- # If we are only in lock mode, no need to go any further
266- self ._write_lock_file (lockfile_repo )
267- return 0
268-
269269 if self ._io .is_verbose ():
270270 self ._io .write_line ("" )
271271 self ._io .write_line (
@@ -312,13 +312,17 @@ def _do_install(self) -> int:
312312
313313 if status == 0 and self ._update :
314314 # Only write lock file when installation is success
315- self ._write_lock_file (lockfile_repo )
315+ self ._write_lock_file (solved_packages )
316316
317317 return status
318318
319- def _write_lock_file (self , repo : LockfileRepository , force : bool = False ) -> None :
319+ def _write_lock_file (
320+ self ,
321+ packages : dict [Package , TransitivePackageInfo ],
322+ force : bool = False ,
323+ ) -> None :
320324 if not self .is_dry_run () and (force or self ._update ):
321- updated_lock = self ._locker .set_lock_data (self ._package , repo . packages )
325+ updated_lock = self ._locker .set_lock_data (self ._package , packages )
322326
323327 if updated_lock :
324328 self ._io .write_line ("" )
@@ -327,16 +331,5 @@ def _write_lock_file(self, repo: LockfileRepository, force: bool = False) -> Non
327331 def _execute (self , operations : list [Operation ]) -> int :
328332 return self ._executor .execute (operations )
329333
330- def _populate_lockfile_repo (
331- self , repo : LockfileRepository , ops : Iterable [Operation ]
332- ) -> None :
333- for op in ops :
334- if isinstance (op , Uninstall ):
335- continue
336-
337- package = op .target_package if isinstance (op , Update ) else op .package
338- if not repo .has_package (package ):
339- repo .add_package (package )
340-
341334 def _get_installed (self ) -> InstalledRepository :
342335 return InstalledRepository .load (self ._env )
0 commit comments