aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/repository
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-27 00:49:33 +0900
committernsfisis <nsfisis@gmail.com>2026-05-27 00:54:09 +0900
commitcc5d73c05a0abca2eebcc8a6afa0b1543ee49850 (patch)
tree091a0d01232d927f13f3ab22700701804980f231 /crates/shirabe/src/repository
parentc5850d62beabef0a6bcc4cf6a179589c0ba8f405 (diff)
downloadphp-shirabe-cc5d73c05a0abca2eebcc8a6afa0b1543ee49850.tar.gz
php-shirabe-cc5d73c05a0abca2eebcc8a6afa0b1543ee49850.tar.zst
php-shirabe-cc5d73c05a0abca2eebcc8a6afa0b1543ee49850.zip
refactor(package): pass package handles by value throughout
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/repository')
-rw-r--r--crates/shirabe/src/repository/array_repository.rs5
-rw-r--r--crates/shirabe/src/repository/composer_repository.rs10
-rw-r--r--crates/shirabe/src/repository/composite_repository.rs7
-rw-r--r--crates/shirabe/src/repository/filesystem_repository.rs36
-rw-r--r--crates/shirabe/src/repository/filter_repository.rs3
-rw-r--r--crates/shirabe/src/repository/installed_array_repository.rs5
-rw-r--r--crates/shirabe/src/repository/installed_filesystem_repository.rs5
-rw-r--r--crates/shirabe/src/repository/installed_repository.rs3
-rw-r--r--crates/shirabe/src/repository/lock_array_repository.rs3
-rw-r--r--crates/shirabe/src/repository/platform_repository.rs4
-rw-r--r--crates/shirabe/src/repository/repository_interface.rs3
-rw-r--r--crates/shirabe/src/repository/repository_utils.rs3
-rw-r--r--crates/shirabe/src/repository/root_package_repository.rs3
-rw-r--r--crates/shirabe/src/repository/writable_array_repository.rs5
-rw-r--r--crates/shirabe/src/repository/writable_repository_interface.rs3
15 files changed, 42 insertions, 56 deletions
diff --git a/crates/shirabe/src/repository/array_repository.rs b/crates/shirabe/src/repository/array_repository.rs
index 16f5f30..6467c14 100644
--- a/crates/shirabe/src/repository/array_repository.rs
+++ b/crates/shirabe/src/repository/array_repository.rs
@@ -12,7 +12,6 @@ use shirabe_semver::constraint::SimpleConstraint;
use crate::package::BasePackageHandle;
use crate::package::PackageHandle;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::package::version::StabilityFilter;
use crate::package::version::VersionParser;
@@ -96,7 +95,7 @@ impl ArrayRepository {
}
/// Removes package from repository.
- pub fn remove_package(&self, package: &dyn PackageInterface) {
+ pub fn remove_package(&self, package: PackageInterfaceHandle) {
let package_id = package.get_unique_name();
let mut packages_borrow = self.packages.borrow_mut();
@@ -367,7 +366,7 @@ impl RepositoryInterface for ArrayRepository {
matches.into_values().collect()
}
- fn has_package(&self, package: &dyn PackageInterface) -> bool {
+ fn has_package(&self, package: PackageInterfaceHandle) -> bool {
if self.package_map.borrow().is_none() {
let mut map: IndexMap<String, BasePackageHandle> = IndexMap::new();
for repo_package in self.get_packages() {
diff --git a/crates/shirabe/src/repository/composer_repository.rs b/crates/shirabe/src/repository/composer_repository.rs
index d055e59..ddf8e31 100644
--- a/crates/shirabe/src/repository/composer_repository.rs
+++ b/crates/shirabe/src/repository/composer_repository.rs
@@ -1387,7 +1387,7 @@ impl ComposerRepository {
Ok(vec![])
}
- fn configure_package_transport_options(&self, package: &mut dyn PackageInterface) {
+ fn configure_package_transport_options(&self, package: PackageInterfaceHandle) {
for url in package.get_dist_urls() {
if url.starts_with(&self.base_url) {
package.set_transport_options(self.options.clone());
@@ -1780,9 +1780,7 @@ impl ComposerRepository {
/// Adds a new package to the repository
pub fn add_package(&mut self, package: BasePackageHandle) {
- self.configure_package_transport_options(
- package.as_rc().borrow_mut().as_package_interface_mut(),
- );
+ self.configure_package_transport_options(package.clone());
self.inner.add_package(package.into());
}
@@ -2762,9 +2760,7 @@ impl ComposerRepository {
.collect();
package.set_dist_mirrors(Some(converted));
}
- self.configure_package_transport_options(
- package.as_rc().borrow_mut().as_package_interface_mut(),
- );
+ self.configure_package_transport_options(package.clone());
results.push(package.into());
}
Ok(results)
diff --git a/crates/shirabe/src/repository/composite_repository.rs b/crates/shirabe/src/repository/composite_repository.rs
index 024f89a..12f1837 100644
--- a/crates/shirabe/src/repository/composite_repository.rs
+++ b/crates/shirabe/src/repository/composite_repository.rs
@@ -6,7 +6,6 @@ use indexmap::IndexMap;
use shirabe_semver::constraint::AnyConstraint;
use crate::package::BasePackageHandle;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::repository::{
FindPackageConstraint, LoadPackagesResult, ProviderInfo, RepositoryInterface, SearchResult,
@@ -32,7 +31,7 @@ impl CompositeRepository {
&self.repositories
}
- pub fn remove_package(&mut self, _package: &dyn PackageInterface) {
+ pub fn remove_package(&mut self, _package: PackageInterfaceHandle) {
// TODO(phase-b): only call remove_package on WritableRepositoryInterface implementors;
// requires a downcast helper such as `as_writable() -> Option<&mut dyn WritableRepositoryInterface>` on RepositoryInterface.
for _repository in &mut self.repositories {
@@ -67,9 +66,9 @@ impl RepositoryInterface for CompositeRepository {
format!("composite repo ({})", names.join(", "))
}
- fn has_package(&self, package: &dyn PackageInterface) -> bool {
+ fn has_package(&self, package: PackageInterfaceHandle) -> bool {
for repository in &self.repositories {
- if repository.has_package(package) {
+ if repository.has_package(package.clone()) {
return true;
}
}
diff --git a/crates/shirabe/src/repository/filesystem_repository.rs b/crates/shirabe/src/repository/filesystem_repository.rs
index c8ffb7c..8232ecf 100644
--- a/crates/shirabe/src/repository/filesystem_repository.rs
+++ b/crates/shirabe/src/repository/filesystem_repository.rs
@@ -16,9 +16,7 @@ use shirabe_php_shim::{
use crate::installed_versions::InstalledVersions;
use crate::installer::InstallationManager;
use crate::json::JsonFile;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
-use crate::package::RootPackageInterface;
use crate::package::RootPackageInterfaceHandle;
use crate::package::dumper::ArrayDumper;
use crate::package::loader::ArrayLoader;
@@ -219,9 +217,8 @@ impl FilesystemRepository {
let mut install_paths: IndexMap<String, Option<String>> = IndexMap::new();
for package in self.inner.get_canonical_packages() {
- let mut pkg_array = dumper.dump(package.as_rc().borrow().as_package_interface());
- let path = installation_manager
- .get_install_path(package.as_rc().borrow().as_package_interface());
+ let mut pkg_array = dumper.dump(package.clone());
+ let path = installation_manager.get_install_path(package.clone());
let mut install_path: Option<String> = None;
if let Some(path_str) = &path {
if !path_str.is_empty() {
@@ -508,11 +505,7 @@ impl FilesystemRepository {
"root".to_string(),
PhpMixed::Array(
self.dump_root_package(
- current_root
- .as_rc()
- .borrow()
- .as_root_package_interface()
- .expect("current_root is a RootPackageInterface"),
+ current_root.clone(),
install_paths,
dev_mode,
repo_dir,
@@ -532,7 +525,7 @@ impl FilesystemRepository {
}
let dumped = self.dump_installed_package(
- package.as_rc().borrow().as_package_interface(),
+ package.clone(),
install_paths,
repo_dir,
&dev_packages,
@@ -633,7 +626,7 @@ impl FilesystemRepository {
/// @return array{pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev_requirement: bool}
fn dump_installed_package(
&self,
- package: &dyn PackageInterface,
+ package: PackageInterfaceHandle,
install_paths: &IndexMap<String, Option<String>>,
repo_dir: &str,
dev_packages: &PhpMixed,
@@ -648,8 +641,8 @@ impl FilesystemRepository {
}
if reference.is_none() {
// PHP: ($package->getSourceReference() ?: $package->getDistReference()) ?: null;
- let source = package.get_source_reference().unwrap_or("");
- let dist = package.get_dist_reference().unwrap_or("");
+ let source = package.get_source_reference().unwrap_or_default();
+ let dist = package.get_dist_reference().unwrap_or_default();
let combined = if !source.is_empty() {
source.to_string()
} else {
@@ -662,7 +655,7 @@ impl FilesystemRepository {
};
}
- let install_path = if package.as_root_package_interface().is_some() {
+ let install_path = if package.as_root().is_some() {
let to = self.filesystem.borrow_mut().normalize_path(
&realpath(&Platform::get_cwd(false).unwrap_or_default()).unwrap_or_default(),
);
@@ -672,7 +665,7 @@ impl FilesystemRepository {
.find_shortest_path(repo_dir, &to, true, false),
)
} else {
- install_paths.get(package.get_name()).cloned().flatten()
+ install_paths.get(&package.get_name()).cloned().flatten()
};
let mut data: IndexMap<String, PhpMixed> = IndexMap::new();
@@ -708,7 +701,7 @@ impl FilesystemRepository {
PhpMixed::Bool(
dev_packages
.as_array()
- .map(|m| m.contains_key(package.get_name()))
+ .map(|m| m.contains_key(&package.get_name()))
.unwrap_or(false),
),
);
@@ -721,13 +714,18 @@ impl FilesystemRepository {
/// @return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
fn dump_root_package(
&self,
- package: &dyn RootPackageInterface,
+ package: RootPackageInterfaceHandle,
install_paths: &IndexMap<String, Option<String>>,
dev_mode: bool,
repo_dir: &str,
dev_packages: &PhpMixed,
) -> IndexMap<String, PhpMixed> {
- let data = self.dump_installed_package(package, install_paths, repo_dir, dev_packages);
+ let data = self.dump_installed_package(
+ package.clone().into(),
+ install_paths,
+ repo_dir,
+ dev_packages,
+ );
let mut result: IndexMap<String, PhpMixed> = IndexMap::new();
result.insert(
diff --git a/crates/shirabe/src/repository/filter_repository.rs b/crates/shirabe/src/repository/filter_repository.rs
index c67e4ff..2a339f5 100644
--- a/crates/shirabe/src/repository/filter_repository.rs
+++ b/crates/shirabe/src/repository/filter_repository.rs
@@ -1,7 +1,6 @@
//! ref: composer/src/Composer/Repository/FilterRepository.php
use crate::package::BasePackageHandle;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::package::base_package::{self};
use crate::repository::{AdvisoryProviderInterface, SecurityAdvisoryResult};
@@ -159,7 +158,7 @@ impl shirabe_php_shim::Countable for FilterRepository {
}
impl RepositoryInterface for FilterRepository {
- fn has_package(&self, package: &dyn PackageInterface) -> bool {
+ fn has_package(&self, package: PackageInterfaceHandle) -> bool {
self.repo.has_package(package)
}
diff --git a/crates/shirabe/src/repository/installed_array_repository.rs b/crates/shirabe/src/repository/installed_array_repository.rs
index f0244b6..ca2d8c7 100644
--- a/crates/shirabe/src/repository/installed_array_repository.rs
+++ b/crates/shirabe/src/repository/installed_array_repository.rs
@@ -5,7 +5,6 @@ use shirabe_php_shim::Countable;
use shirabe_semver::constraint::AnyConstraint;
use crate::package::BasePackageHandle;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::repository::AdvisoryProviderInterface;
use crate::repository::InstalledRepositoryInterface;
@@ -64,7 +63,7 @@ impl WritableRepositoryInterface for InstalledArrayRepository {
fn remove_package(
&mut self,
- package: &dyn crate::package::PackageInterface,
+ package: crate::package::PackageInterfaceHandle,
) -> anyhow::Result<()> {
todo!()
}
@@ -93,7 +92,7 @@ impl Countable for InstalledArrayRepository {
}
impl RepositoryInterface for InstalledArrayRepository {
- fn has_package(&self, _package: &dyn PackageInterface) -> bool {
+ fn has_package(&self, _package: PackageInterfaceHandle) -> bool {
todo!()
}
fn find_package(
diff --git a/crates/shirabe/src/repository/installed_filesystem_repository.rs b/crates/shirabe/src/repository/installed_filesystem_repository.rs
index 8a6359a..352d86f 100644
--- a/crates/shirabe/src/repository/installed_filesystem_repository.rs
+++ b/crates/shirabe/src/repository/installed_filesystem_repository.rs
@@ -7,7 +7,6 @@ use shirabe_semver::constraint::AnyConstraint;
use crate::json::JsonFile;
use crate::package::BasePackageHandle;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::package::RootPackageInterfaceHandle;
use crate::repository::AdvisoryProviderInterface;
@@ -74,7 +73,7 @@ impl WritableRepositoryInterface for InstalledFilesystemRepository {
fn remove_package(
&mut self,
- package: &dyn crate::package::PackageInterface,
+ package: crate::package::PackageInterfaceHandle,
) -> anyhow::Result<()> {
todo!()
}
@@ -103,7 +102,7 @@ impl Countable for InstalledFilesystemRepository {
}
impl RepositoryInterface for InstalledFilesystemRepository {
- fn has_package(&self, _package: &dyn PackageInterface) -> bool {
+ fn has_package(&self, _package: PackageInterfaceHandle) -> bool {
todo!()
}
fn find_package(
diff --git a/crates/shirabe/src/repository/installed_repository.rs b/crates/shirabe/src/repository/installed_repository.rs
index 33356e3..486d4bd 100644
--- a/crates/shirabe/src/repository/installed_repository.rs
+++ b/crates/shirabe/src/repository/installed_repository.rs
@@ -8,7 +8,6 @@ use shirabe_semver::constraint::SimpleConstraint;
use crate::package::BasePackageHandle;
use crate::package::Link;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::package::version::VersionParser;
use crate::repository::CompositeRepository;
@@ -424,7 +423,7 @@ impl RepositoryInterface for InstalledRepository {
format!("installed repo ({})", names.join(", "))
}
- fn has_package(&self, package: &dyn PackageInterface) -> bool {
+ fn has_package(&self, package: PackageInterfaceHandle) -> bool {
self.inner.has_package(package)
}
diff --git a/crates/shirabe/src/repository/lock_array_repository.rs b/crates/shirabe/src/repository/lock_array_repository.rs
index 3d00ecf..cbc8564 100644
--- a/crates/shirabe/src/repository/lock_array_repository.rs
+++ b/crates/shirabe/src/repository/lock_array_repository.rs
@@ -1,7 +1,6 @@
//! ref: composer/src/Composer/Repository/LockArrayRepository.php
use crate::package::BasePackageHandle;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::repository::ArrayRepository;
use crate::repository::CanonicalPackagesTrait;
@@ -36,7 +35,7 @@ impl Countable for LockArrayRepository {
}
impl RepositoryInterface for LockArrayRepository {
- fn has_package(&self, package: &dyn PackageInterface) -> bool {
+ fn has_package(&self, package: PackageInterfaceHandle) -> bool {
self.inner.has_package(package)
}
diff --git a/crates/shirabe/src/repository/platform_repository.rs b/crates/shirabe/src/repository/platform_repository.rs
index 31760bb..1b95ff7 100644
--- a/crates/shirabe/src/repository/platform_repository.rs
+++ b/crates/shirabe/src/repository/platform_repository.rs
@@ -1903,7 +1903,7 @@ impl PlatformRepository {
// ---- helpers ----
- fn is_complete_package(_package: &dyn PackageInterface) -> bool {
+ fn is_complete_package(_package: PackageInterfaceHandle) -> bool {
// TODO(phase-b): use Any-style downcasting once the trait carries it.
true
}
@@ -1950,7 +1950,7 @@ impl shirabe_php_shim::Countable for PlatformRepository {
}
impl crate::repository::RepositoryInterface for PlatformRepository {
- fn has_package(&self, package: &dyn PackageInterface) -> bool {
+ fn has_package(&self, package: PackageInterfaceHandle) -> bool {
self.inner.has_package(package)
}
diff --git a/crates/shirabe/src/repository/repository_interface.rs b/crates/shirabe/src/repository/repository_interface.rs
index 9cadc48..316f509 100644
--- a/crates/shirabe/src/repository/repository_interface.rs
+++ b/crates/shirabe/src/repository/repository_interface.rs
@@ -1,7 +1,6 @@
//! ref: composer/src/Composer/Repository/RepositoryInterface.php
use crate::package::BasePackageHandle;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::repository::AdvisoryProviderInterface;
use indexmap::IndexMap;
@@ -54,7 +53,7 @@ pub const SEARCH_NAME: i64 = 1;
pub const SEARCH_VENDOR: i64 = 2;
pub trait RepositoryInterface: Countable + std::fmt::Debug {
- fn has_package(&self, package: &dyn PackageInterface) -> bool;
+ fn has_package(&self, package: PackageInterfaceHandle) -> bool;
fn find_package(
&self,
diff --git a/crates/shirabe/src/repository/repository_utils.rs b/crates/shirabe/src/repository/repository_utils.rs
index 51b8673..667cea2 100644
--- a/crates/shirabe/src/repository/repository_utils.rs
+++ b/crates/shirabe/src/repository/repository_utils.rs
@@ -1,7 +1,6 @@
//! ref: composer/src/Composer/Repository/RepositoryUtils.php
use crate::package::Link;
-use crate::package::PackageInterface;
use crate::repository::CompositeRepository;
use crate::repository::FilterRepository;
use crate::repository::RepositoryInterface;
@@ -13,7 +12,7 @@ pub struct RepositoryUtils;
impl RepositoryUtils {
pub fn filter_required_packages(
packages: &[crate::package::BasePackageHandle],
- requirer: &dyn PackageInterface,
+ requirer: crate::package::PackageInterfaceHandle,
include_require_dev: bool,
mut bucket: Vec<crate::package::BasePackageHandle>,
) -> Vec<crate::package::BasePackageHandle> {
diff --git a/crates/shirabe/src/repository/root_package_repository.rs b/crates/shirabe/src/repository/root_package_repository.rs
index 71cd270..cb01a7c 100644
--- a/crates/shirabe/src/repository/root_package_repository.rs
+++ b/crates/shirabe/src/repository/root_package_repository.rs
@@ -1,7 +1,6 @@
//! ref: composer/src/Composer/Repository/RootPackageRepository.php
use crate::package::BasePackageHandle;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::package::RootPackageInterfaceHandle;
use crate::repository::ArrayRepository;
@@ -32,7 +31,7 @@ impl shirabe_php_shim::Countable for RootPackageRepository {
}
impl RepositoryInterface for RootPackageRepository {
- fn has_package(&self, package: &dyn PackageInterface) -> bool {
+ fn has_package(&self, package: PackageInterfaceHandle) -> bool {
self.inner.has_package(package)
}
diff --git a/crates/shirabe/src/repository/writable_array_repository.rs b/crates/shirabe/src/repository/writable_array_repository.rs
index ebe70c3..282f3c0 100644
--- a/crates/shirabe/src/repository/writable_array_repository.rs
+++ b/crates/shirabe/src/repository/writable_array_repository.rs
@@ -52,7 +52,10 @@ impl WritableArrayRepository {
self.inner.add_package(package)
}
- pub fn remove_package(&mut self, package: &dyn crate::package::PackageInterface) -> Result<()> {
+ pub fn remove_package(
+ &mut self,
+ package: crate::package::PackageInterfaceHandle,
+ ) -> Result<()> {
let _ = package;
// TODO(phase-b): delegate to ArrayRepository once it implements remove_package
Ok(())
diff --git a/crates/shirabe/src/repository/writable_repository_interface.rs b/crates/shirabe/src/repository/writable_repository_interface.rs
index b5b1e35..abbcbe7 100644
--- a/crates/shirabe/src/repository/writable_repository_interface.rs
+++ b/crates/shirabe/src/repository/writable_repository_interface.rs
@@ -1,7 +1,6 @@
//! ref: composer/src/Composer/Repository/WritableRepositoryInterface.php
use crate::installer::InstallationManager;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::repository::RepositoryInterface;
use anyhow::Result;
@@ -11,7 +10,7 @@ pub trait WritableRepositoryInterface: RepositoryInterface {
fn add_package(&mut self, package: PackageInterfaceHandle) -> Result<()>;
- fn remove_package(&mut self, package: &dyn PackageInterface) -> Result<()>;
+ fn remove_package(&mut self, package: PackageInterfaceHandle) -> Result<()>;
fn get_canonical_packages(&self) -> Vec<PackageInterfaceHandle>;