aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/installer.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-31 21:34:47 +0900
committernsfisis <nsfisis@gmail.com>2026-06-01 01:45:00 +0900
commit20dbcf11b86cb03c451ba1d5cd9efe17b68fa66d (patch)
treed1fc3aaee3b2829d71f49581e1abc86ee62e525f /crates/shirabe/src/installer.rs
parent29df13733ae4acfd2b172bc9fd9ac9fd28efa013 (diff)
downloadphp-shirabe-20dbcf11b86cb03c451ba1d5cd9efe17b68fa66d.tar.gz
php-shirabe-20dbcf11b86cb03c451ba1d5cd9efe17b68fa66d.tar.zst
php-shirabe-20dbcf11b86cb03c451ba1d5cd9efe17b68fa66d.zip
fix(package): port every PHP clone operator to handle dup()HEADmain
Diffstat (limited to 'crates/shirabe/src/installer.rs')
-rw-r--r--crates/shirabe/src/installer.rs9
1 files changed, 3 insertions, 6 deletions
diff --git a/crates/shirabe/src/installer.rs b/crates/shirabe/src/installer.rs
index 434996d..ec374ac 100644
--- a/crates/shirabe/src/installer.rs
+++ b/crates/shirabe/src/installer.rs
@@ -352,7 +352,7 @@ impl Installer {
locked_repository_handle,
crate::repository::RepositoryInterfaceHandle::new(self.create_platform_repo(false)),
crate::repository::RepositoryInterfaceHandle::new(RootPackageRepository::new(
- self.package.clone(),
+ RootPackageInterfaceHandle::dup(&self.package),
)),
]);
if is_fresh_install {
@@ -1335,10 +1335,7 @@ impl Installer {
root_requires.insert(req, constraint);
}
- // TODO(phase-c): PHP does `$this->fixedRootPackage = clone($this->package)` (a deep,
- // fresh-identity copy) and then strips its requires below. A handle clone only shares the
- // same Rc, so a real deep clone of the package is needed to avoid mutating self.package.
- // self.fixed_root_package = deep_clone(&self.package);
+ self.fixed_root_package = RootPackageInterfaceHandle::dup(&self.package);
self.fixed_root_package.set_requires(vec![]);
self.fixed_root_package.set_dev_requires(vec![]);
@@ -1578,7 +1575,7 @@ impl Installer {
fn mock_local_repositories(&self, rm: &mut RepositoryManager) {
let mut packages: IndexMap<String, PackageInterfaceHandle> = IndexMap::new();
for package in rm.get_local_repository().get_packages() {
- packages.insert(package.to_string(), package.clone().into());
+ packages.insert(package.to_string(), PackageInterfaceHandle::dup(&package));
}
let keys: Vec<String> = packages.keys().cloned().collect();
for key in keys {