aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/command/base_dependency_command.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-25 00:58:20 +0900
committernsfisis <nsfisis@gmail.com>2026-05-25 00:58:36 +0900
commit1921f173ea219cb4b25847294d2d3fa465550fbb (patch)
tree0d30486a2cb9a0c106e5d5827be3f655c60cd871 /crates/shirabe/src/command/base_dependency_command.rs
parentdbdecaf5a1c54a876b7ee0153d58dd39b1080f97 (diff)
downloadphp-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.tar.gz
php-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.tar.zst
php-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.zip
refactor(package): introduce Rc<RefCell<_>> handles for packages
PHP packages have reference semantics, so introduce shared-ownership handles over an AnyPackage enum (PackageInterfaceHandle and friends) and replace Box<dyn PackageInterface> throughout. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/command/base_dependency_command.rs')
-rw-r--r--crates/shirabe/src/command/base_dependency_command.rs22
1 files changed, 13 insertions, 9 deletions
diff --git a/crates/shirabe/src/command/base_dependency_command.rs b/crates/shirabe/src/command/base_dependency_command.rs
index f1ff863..8ea10b5 100644
--- a/crates/shirabe/src/command/base_dependency_command.rs
+++ b/crates/shirabe/src/command/base_dependency_command.rs
@@ -53,7 +53,7 @@ pub trait BaseDependencyCommand: BaseCommand {
let mut repos: Vec<Box<dyn RepositoryInterface>> = vec![];
repos.push(Box::new(RootPackageRepository::new(
- composer.get_package().clone_box(),
+ composer.get_package().clone(),
)));
if input.get_option("locked").as_bool().unwrap_or(false) {
@@ -158,7 +158,7 @@ pub trait BaseDependencyCommand: BaseCommand {
FindPackageConstraint::String(text_constraint.clone()),
) {
installed_repo.add_repository(Box::new(
- InstalledArrayRepository::new_with_packages(vec![r#match.clone_box()])?,
+ InstalledArrayRepository::new_with_packages(vec![r#match.into()])?,
))?;
} else if PlatformRepository::is_platform_package(&needle) {
let parser = VersionParser::new();
@@ -170,9 +170,9 @@ pub trait BaseDependencyCommand: BaseCommand {
.to_string();
let temp_platform_pkg = Package::new(needle.clone(), version.clone(), version);
installed_repo.add_repository(Box::new(
- InstalledArrayRepository::new_with_packages(vec![Box::new(
- temp_platform_pkg,
- )])?,
+ InstalledArrayRepository::new_with_packages(vec![
+ crate::package::PackageHandle::from_package(temp_platform_pkg).into(),
+ ])?,
))?;
}
} else {
@@ -270,9 +270,9 @@ pub trait BaseDependencyCommand: BaseCommand {
self.init_styles(output);
let root = &packages[0];
let description = root
- .as_complete_package_interface()
+ .as_complete()
.and_then(|c| c.get_description())
- .unwrap_or("");
+ .unwrap_or_default();
self.get_io().write(&format!(
"<info>{}</info> {} {}",
root.get_pretty_name(),
@@ -335,7 +335,9 @@ pub trait BaseDependencyCommand: BaseCommand {
} else {
package.get_pretty_version().to_string()
};
- let package_url = PackageInfo::get_view_source_or_homepage_url(&*package);
+ let package_url = PackageInfo::get_view_source_or_homepage_url(
+ package.as_rc().borrow().as_package_interface(),
+ );
let name_with_link = match &package_url {
Some(url) => format!(
"<href={}>{}</>",
@@ -410,7 +412,9 @@ pub trait BaseDependencyCommand: BaseCommand {
} else {
package.get_pretty_version().to_string()
};
- let package_url = PackageInfo::get_view_source_or_homepage_url(&**package);
+ let package_url = PackageInfo::get_view_source_or_homepage_url(
+ package.as_rc().borrow().as_package_interface(),
+ );
let name_with_link = match &package_url {
Some(url) => format!(
"<href={}>{}</>",