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,19 @@ 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+ solved_packages = solver .solve (
237+ use_latest = self ._whitelist
238+ ).get_solved_packages ()
239+
240+ if not self .executor .enabled :
241+ # If we are only in lock mode, no need to go any further
242+ self ._write_lock_file (solved_packages )
243+ return 0
240244
241245 lockfile_repo = LockfileRepository ()
242- self ._populate_lockfile_repo (lockfile_repo , ops )
246+ for package in solved_packages :
247+ if not lockfile_repo .has_package (package ):
248+ lockfile_repo .add_package (package )
243249
244250 else :
245251 self ._io .write_line ("<info>Installing dependencies from lock file</>" )
@@ -261,11 +267,6 @@ def _do_install(self) -> int:
261267 locked_repository = self ._locker .locked_repository ()
262268 lockfile_repo = locked_repository
263269
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-
269270 if self ._io .is_verbose ():
270271 self ._io .write_line ("" )
271272 self ._io .write_line (
@@ -312,13 +313,17 @@ def _do_install(self) -> int:
312313
313314 if status == 0 and self ._update :
314315 # Only write lock file when installation is success
315- self ._write_lock_file (lockfile_repo )
316+ self ._write_lock_file (solved_packages )
316317
317318 return status
318319
319- def _write_lock_file (self , repo : LockfileRepository , force : bool = False ) -> None :
320+ def _write_lock_file (
321+ self ,
322+ packages : dict [Package , TransitivePackageInfo ],
323+ force : bool = False ,
324+ ) -> None :
320325 if not self .is_dry_run () and (force or self ._update ):
321- updated_lock = self ._locker .set_lock_data (self ._package , repo . packages )
326+ updated_lock = self ._locker .set_lock_data (self ._package , packages )
322327
323328 if updated_lock :
324329 self ._io .write_line ("" )
@@ -327,16 +332,5 @@ def _write_lock_file(self, repo: LockfileRepository, force: bool = False) -> Non
327332 def _execute (self , operations : list [Operation ]) -> int :
328333 return self ._executor .execute (operations )
329334
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-
341335 def _get_installed (self ) -> InstalledRepository :
342336 return InstalledRepository .load (self ._env )
0 commit comments