aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/dependency_resolver/operation
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-04 21:09:02 +0900
committernsfisis <nsfisis@gmail.com>2026-06-04 21:09:02 +0900
commit06e8e14520a4a38fed500581d2b75a42418b22c4 (patch)
tree573af18bf6e0933488aea9c1bac47bf4e857546d /crates/shirabe/src/dependency_resolver/operation
parenta9f19862350c6fd3592d93515d869ffe07ecb399 (diff)
downloadphp-shirabe-06e8e14520a4a38fed500581d2b75a42418b22c4.tar.gz
php-shirabe-06e8e14520a4a38fed500581d2b75a42418b22c4.tar.zst
php-shirabe-06e8e14520a4a38fed500581d2b75a42418b22c4.zip
feat(package): implement PackageInterface accessor layer for Package/CompletePackage/RootPackage
Fill the trait-impl todo!() across the package accessor layer so loaded packages are actually usable (the ArrayLoader::load path depends on it): - Package: implement BasePackage/PackageInterface from struct fields and existing inherent methods; Display via get_unique_name. - CompletePackage: delegate PackageInterface to inner Package. - RootPackage: delegate CompletePackageInterface/PackageInterface to inner CompletePackage; RootPackageInterface link setters delegate to Package. Correct three unfaithful trait signatures found during implementation: - get_target_dir returns Option<String> (PHP computes a normalized value; a borrow cannot represent it, and AliasPackage could not implement &str across its aliasOf handle). - RootPackageInterface link setters take IndexMap<String, Link>, matching Package and the real ArrayLoader caller (PHP RootPackage inherits Package::setRequires; the Link[] docblock was imprecise). - get_full_pretty_version takes a DisplayMode enum instead of a raw i64; the match is now exhaustive, so it returns String without an error path. Move mirror conversion to the boundaries: PackageInterface mirror methods use Vec<Mirror> (the typed form, matching the inherent methods), with array<->Mirror conversion done by the producer (ComposerRepository) and consumer (ArrayDumper). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/dependency_resolver/operation')
-rw-r--r--crates/shirabe/src/dependency_resolver/operation/install_operation.rs4
-rw-r--r--crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs5
-rw-r--r--crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs5
-rw-r--r--crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs4
-rw-r--r--crates/shirabe/src/dependency_resolver/operation/update_operation.rs21
5 files changed, 16 insertions, 23 deletions
diff --git a/crates/shirabe/src/dependency_resolver/operation/install_operation.rs b/crates/shirabe/src/dependency_resolver/operation/install_operation.rs
index 23be038..1331591 100644
--- a/crates/shirabe/src/dependency_resolver/operation/install_operation.rs
+++ b/crates/shirabe/src/dependency_resolver/operation/install_operation.rs
@@ -2,7 +2,6 @@
use crate::dependency_resolver::operation::OperationInterface;
use crate::dependency_resolver::operation::SolverOperation;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
#[derive(Debug)]
@@ -24,8 +23,7 @@ impl InstallOperation {
"{}<info>{}</info> (<comment>{}</comment>)",
if lock { "Locking " } else { "Installing " },
package.get_pretty_name(),
- package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV),
+ package.get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev),
)
}
}
diff --git a/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs b/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs
index a10186a..4ef436b 100644
--- a/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs
+++ b/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs
@@ -3,7 +3,6 @@
use crate::dependency_resolver::operation::OperationInterface;
use crate::dependency_resolver::operation::SolverOperation;
use crate::package::AliasPackageHandle;
-use crate::package::PackageInterface;
#[derive(Debug)]
pub struct MarkAliasInstalledOperation {
@@ -38,11 +37,11 @@ impl OperationInterface for MarkAliasInstalledOperation {
"Marking <info>{}</info> (<comment>{}</comment>) as installed, alias of <info>{}</info> (<comment>{}</comment>)",
self.package.get_pretty_name(),
self.package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV),
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev),
self.package.get_alias_of().get_pretty_name(),
self.package
.get_alias_of()
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV,),
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev,),
)
}
diff --git a/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs b/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs
index b9ad26e..41b0979 100644
--- a/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs
+++ b/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs
@@ -3,7 +3,6 @@
use crate::dependency_resolver::operation::OperationInterface;
use crate::dependency_resolver::operation::SolverOperation;
use crate::package::AliasPackageHandle;
-use crate::package::PackageInterface;
#[derive(Debug)]
pub struct MarkAliasUninstalledOperation {
@@ -38,11 +37,11 @@ impl OperationInterface for MarkAliasUninstalledOperation {
"Marking <info>{}</info> (<comment>{}</comment>) as uninstalled, alias of <info>{}</info> (<comment>{}</comment>)",
self.package.get_pretty_name(),
self.package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV),
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev),
self.package.get_alias_of().get_pretty_name(),
self.package
.get_alias_of()
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV,),
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev,),
)
}
diff --git a/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs b/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs
index 3ff547c..465297d 100644
--- a/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs
+++ b/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs
@@ -2,7 +2,6 @@
use crate::dependency_resolver::operation::OperationInterface;
use crate::dependency_resolver::operation::SolverOperation;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
#[derive(Debug)]
@@ -23,8 +22,7 @@ impl UninstallOperation {
format!(
"Removing <info>{}</info> (<comment>{}</comment>)",
package.get_pretty_name(),
- package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV),
+ package.get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev),
)
}
}
diff --git a/crates/shirabe/src/dependency_resolver/operation/update_operation.rs b/crates/shirabe/src/dependency_resolver/operation/update_operation.rs
index bc31256..104f4ef 100644
--- a/crates/shirabe/src/dependency_resolver/operation/update_operation.rs
+++ b/crates/shirabe/src/dependency_resolver/operation/update_operation.rs
@@ -2,7 +2,6 @@
use crate::dependency_resolver::operation::OperationInterface;
use crate::dependency_resolver::operation::SolverOperation;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::package::version::VersionParser;
@@ -33,25 +32,25 @@ impl UpdateOperation {
target_package: PackageInterfaceHandle,
lock: bool,
) -> String {
- let mut from_version = initial_package
- .get_full_pretty_version(false, <dyn PackageInterface>::DISPLAY_SOURCE_REF);
- let mut to_version = target_package
- .get_full_pretty_version(false, <dyn PackageInterface>::DISPLAY_SOURCE_REF);
+ let mut from_version =
+ initial_package.get_full_pretty_version(false, crate::package::DisplayMode::SourceRef);
+ let mut to_version =
+ target_package.get_full_pretty_version(false, crate::package::DisplayMode::SourceRef);
if from_version == to_version
&& initial_package.get_source_reference() != target_package.get_source_reference()
{
from_version = initial_package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF);
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRef);
to_version = target_package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF);
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRef);
} else if from_version == to_version
&& initial_package.get_dist_reference() != target_package.get_dist_reference()
{
- from_version = initial_package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_DIST_REF);
- to_version = target_package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_DIST_REF);
+ from_version =
+ initial_package.get_full_pretty_version(true, crate::package::DisplayMode::DistRef);
+ to_version =
+ target_package.get_full_pretty_version(true, crate::package::DisplayMode::DistRef);
}
let action_name = if VersionParser::is_upgrade(