aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/package')
-rw-r--r--crates/shirabe/src/package/alias_package.rs4
-rw-r--r--crates/shirabe/src/package/archiver/archive_manager.rs19
-rw-r--r--crates/shirabe/src/package/complete_package.rs4
-rw-r--r--crates/shirabe/src/package/dumper/array_dumper.rs20
-rw-r--r--crates/shirabe/src/package/handle.rs3
-rw-r--r--crates/shirabe/src/package/link.rs4
-rw-r--r--crates/shirabe/src/package/locker.rs22
-rw-r--r--crates/shirabe/src/package/package.rs3
-rw-r--r--crates/shirabe/src/package/package_interface.rs2
-rw-r--r--crates/shirabe/src/package/root_package.rs4
-rw-r--r--crates/shirabe/src/package/version/version_bumper.rs6
-rw-r--r--crates/shirabe/src/package/version/version_selector.rs13
12 files changed, 38 insertions, 66 deletions
diff --git a/crates/shirabe/src/package/alias_package.rs b/crates/shirabe/src/package/alias_package.rs
index 5558337..997685b 100644
--- a/crates/shirabe/src/package/alias_package.rs
+++ b/crates/shirabe/src/package/alias_package.rs
@@ -236,10 +236,6 @@ impl std::fmt::Display for AliasPackage {
}
impl PackageInterface for AliasPackage {
- fn as_any(&self) -> &dyn std::any::Any {
- self
- }
-
fn get_name(&self) -> &str {
// PHP delegates to aliasOf; the local name mirrors aliasOf->getName(),
// so it is returned here to avoid borrowing across the shared handle.
diff --git a/crates/shirabe/src/package/archiver/archive_manager.rs b/crates/shirabe/src/package/archiver/archive_manager.rs
index e198a03..a4169ef 100644
--- a/crates/shirabe/src/package/archiver/archive_manager.rs
+++ b/crates/shirabe/src/package/archiver/archive_manager.rs
@@ -10,6 +10,7 @@ use shirabe_php_shim::{
use crate::downloader::DownloadManager;
use crate::json::JsonFile;
use crate::package::CompletePackageInterface;
+use crate::package::CompletePackageInterfaceHandle;
use crate::package::RootPackageInterface;
use crate::package::archiver::ArchiverInterface;
use crate::package::archiver::PharArchiver;
@@ -57,11 +58,11 @@ impl ArchiveManager {
pub fn get_package_filename_parts(
&self,
- package: &dyn CompletePackageInterface,
+ package: CompletePackageInterfaceHandle,
) -> anyhow::Result<IndexMap<String, String>> {
let base_name = match package.get_archive_name() {
Some(name) => name.to_string(),
- None => Preg::replace("#[^a-z0-9-_]#i", "-", package.get_name())?,
+ None => Preg::replace("#[^a-z0-9-_]#i", "-", &package.get_name())?,
};
let mut parts: IndexMap<String, String> = IndexMap::new();
@@ -89,7 +90,7 @@ impl ArchiveManager {
}
if let Some(source_reference) = package.get_source_reference() {
- let hash = shirabe_php_shim::hash("sha1", source_reference);
+ let hash = shirabe_php_shim::hash("sha1", &source_reference);
parts.insert("source_reference".to_string(), hash[..6].to_string());
}
@@ -108,7 +109,7 @@ impl ArchiveManager {
pub fn get_package_filename(
&self,
- package: &dyn CompletePackageInterface,
+ package: CompletePackageInterfaceHandle,
) -> anyhow::Result<String> {
let parts = self.get_package_filename_parts(package)?;
Ok(self.get_package_filename_from_parts(&parts))
@@ -116,7 +117,7 @@ impl ArchiveManager {
pub fn archive(
&mut self,
- package: &mut dyn CompletePackageInterface,
+ package: CompletePackageInterfaceHandle,
format: String,
target_dir: String,
file_name: Option<String>,
@@ -152,7 +153,7 @@ impl ArchiveManager {
let mut filesystem = Filesystem::new(None);
- let is_root = package.as_root_package_interface().is_some();
+ let is_root = package.as_rc().borrow().is_root();
let source_path: String;
if is_root {
@@ -169,7 +170,7 @@ impl ArchiveManager {
Some(Box::pin(async {
self.download_manager
.borrow()
- .download(package, &source_path, None)
+ .download(package.clone().into(), &source_path, None)
.await
.map(|_| ())
})),
@@ -179,7 +180,7 @@ impl ArchiveManager {
Some(Box::pin(async {
self.download_manager
.borrow()
- .install(package, &source_path)
+ .install(package.clone().into(), &source_path)
.await
.map(|_| ())
})),
@@ -219,7 +220,7 @@ impl ArchiveManager {
let supported_formats = self.get_supported_formats();
let package_name_parts = match file_name {
- None => self.get_package_filename_parts(package)?,
+ None => self.get_package_filename_parts(package.clone())?,
Some(f) => {
let mut parts = IndexMap::new();
parts.insert("base".to_string(), f);
diff --git a/crates/shirabe/src/package/complete_package.rs b/crates/shirabe/src/package/complete_package.rs
index dee84da..b0adf52 100644
--- a/crates/shirabe/src/package/complete_package.rs
+++ b/crates/shirabe/src/package/complete_package.rs
@@ -153,10 +153,6 @@ impl CompletePackageInterface for CompletePackage {
}
impl PackageInterface for CompletePackage {
- fn as_any(&self) -> &dyn std::any::Any {
- self
- }
-
fn get_name(&self) -> &str {
todo!()
}
diff --git a/crates/shirabe/src/package/dumper/array_dumper.rs b/crates/shirabe/src/package/dumper/array_dumper.rs
index 4bd9b56..3d3b27a 100644
--- a/crates/shirabe/src/package/dumper/array_dumper.rs
+++ b/crates/shirabe/src/package/dumper/array_dumper.rs
@@ -3,11 +3,7 @@
use indexmap::IndexMap;
use shirabe_php_shim::PhpMixed;
-use crate::package::CompletePackage;
-use crate::package::CompletePackageInterface;
-use crate::package::PackageInterface;
-use crate::package::RootPackage;
-use crate::package::RootPackageInterface;
+use crate::package::PackageInterfaceHandle;
use crate::package::SUPPORTED_LINK_TYPES;
#[derive(Debug)]
@@ -18,7 +14,7 @@ impl ArrayDumper {
Self
}
- pub fn dump(&self, package: &dyn PackageInterface) -> IndexMap<String, PhpMixed> {
+ pub fn dump(&self, package: PackageInterfaceHandle) -> IndexMap<String, PhpMixed> {
let mut data: IndexMap<String, PhpMixed> = IndexMap::new();
data.insert(
"name".to_string(),
@@ -49,7 +45,7 @@ impl ArrayDumper {
source.insert(
"url".to_string(),
Box::new(PhpMixed::String(
- package.get_source_url().unwrap_or("").to_string(),
+ package.get_source_url().unwrap_or_default(),
)),
);
if let Some(reference) = package.get_source_reference() {
@@ -90,9 +86,7 @@ impl ArrayDumper {
);
dist.insert(
"url".to_string(),
- Box::new(PhpMixed::String(
- package.get_dist_url().unwrap_or("").to_string(),
- )),
+ Box::new(PhpMixed::String(package.get_dist_url().unwrap_or_default())),
);
if let Some(reference) = package.get_dist_reference() {
dist.insert(
@@ -134,7 +128,7 @@ impl ArrayDumper {
for (type_name, opts) in SUPPORTED_LINK_TYPES.iter() {
// TODO(phase-b): PackageInterface needs get_links_by_method to mimic PHP magic call
let links: Vec<crate::package::Link> = Vec::new();
- let _ = (&opts.method, package);
+ let _ = (&opts.method, &package);
if links.is_empty() {
continue;
}
@@ -262,7 +256,7 @@ impl ArrayDumper {
);
}
- if let Some(complete_pkg) = package.as_any().downcast_ref::<CompletePackage>() {
+ if let Some(complete_pkg) = package.as_complete() {
if let Some(archive_name) = complete_pkg.get_archive_name() {
let entry = data
.entry("archive".to_string())
@@ -423,7 +417,7 @@ impl ArrayDumper {
}
}
- if let Some(root_pkg) = package.as_any().downcast_ref::<RootPackage>() {
+ if let Some(root_pkg) = package.as_root() {
let minimum_stability = root_pkg.get_minimum_stability();
if !minimum_stability.is_empty() {
data.insert(
diff --git a/crates/shirabe/src/package/handle.rs b/crates/shirabe/src/package/handle.rs
index e1f0570..931e196 100644
--- a/crates/shirabe/src/package/handle.rs
+++ b/crates/shirabe/src/package/handle.rs
@@ -142,9 +142,6 @@ impl AnyPackage {
macro_rules! delegate_package_interface_to_inner {
($Type:ty, $field:ident) => {
impl crate::package::PackageInterface for $Type {
- fn as_any(&self) -> &dyn std::any::Any {
- self
- }
fn get_name(&self) -> &str {
self.$field.get_name()
}
diff --git a/crates/shirabe/src/package/link.rs b/crates/shirabe/src/package/link.rs
index d606c63..13bd66b 100644
--- a/crates/shirabe/src/package/link.rs
+++ b/crates/shirabe/src/package/link.rs
@@ -3,7 +3,7 @@
use shirabe_php_shim::UnexpectedValueException;
use shirabe_semver::constraint::AnyConstraint;
-use crate::package::PackageInterface;
+use crate::package::PackageInterfaceHandle;
pub struct Link {
pub(crate) source: String,
@@ -121,7 +121,7 @@ impl Link {
)
}
- pub fn get_pretty_string(&self, source_package: &dyn PackageInterface) -> String {
+ pub fn get_pretty_string(&self, source_package: PackageInterfaceHandle) -> String {
format!(
"{} {} {} {}",
source_package.get_pretty_string(),
diff --git a/crates/shirabe/src/package/locker.rs b/crates/shirabe/src/package/locker.rs
index 8ba2cc2..e5eed78 100644
--- a/crates/shirabe/src/package/locker.rs
+++ b/crates/shirabe/src/package/locker.rs
@@ -20,7 +20,7 @@ use crate::package::CompleteAliasPackage;
use crate::package::Link;
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;
use crate::package::loader::LoaderInterface;
@@ -766,9 +766,7 @@ impl Locker {
.into());
}
- let mut spec = self
- .dumper
- .dump(package.as_rc().borrow().as_package_interface());
+ let mut spec = self.dumper.dump(package.clone());
spec.shift_remove("version_normalized");
// always move time to the end of the package definition
@@ -778,8 +776,7 @@ impl Locker {
&& package.get_installation_source() == Some("source".to_string())
{
// use the exact commit time of the current reference if it's a dev package
- let pkg_time =
- self.get_package_time(package.as_rc().borrow().as_package_interface())?;
+ let pkg_time = self.get_package_time(package.clone())?;
pkg_time.map(PhpMixed::String).or(time)
} else {
time
@@ -823,7 +820,7 @@ impl Locker {
}
/// Returns the packages's datetime for its source reference.
- fn get_package_time(&mut self, package: &dyn PackageInterface) -> Result<Option<String>> {
+ fn get_package_time(&mut self, package: PackageInterfaceHandle) -> Result<Option<String>> {
if !function_exists("proc_open") {
return Ok(None);
}
@@ -831,7 +828,7 @@ impl Locker {
let path = self
.installation_manager
.borrow_mut()
- .get_install_path(package);
+ .get_install_path(package.clone());
if path.is_none() {
return Ok(None);
}
@@ -841,7 +838,7 @@ impl Locker {
if path.is_some()
&& in_array(
- PhpMixed::String(source_type.unwrap_or("").to_string()),
+ PhpMixed::String(source_type.clone().unwrap_or_default()),
&PhpMixed::List(vec![
Box::new(PhpMixed::String("git".to_string())),
Box::new(PhpMixed::String("hg".to_string())),
@@ -852,9 +849,8 @@ impl Locker {
let source_ref = package
.get_source_reference()
.or_else(|| package.get_dist_reference())
- .unwrap_or("")
- .to_string();
- match source_type.unwrap_or("") {
+ .unwrap_or_default();
+ match source_type.as_deref().unwrap_or("") {
"git" => {
GitUtil::clean_env(&self.process);
@@ -934,7 +930,7 @@ impl Locker {
/// @return array<string>
pub fn get_missing_requirement_info(
&mut self,
- package: &dyn RootPackageInterface,
+ package: RootPackageInterfaceHandle,
include_dev: bool,
) -> Result<Vec<String>> {
let mut missing_requirement_info: Vec<String> = vec![];
diff --git a/crates/shirabe/src/package/package.rs b/crates/shirabe/src/package/package.rs
index da8451e..92836a2 100644
--- a/crates/shirabe/src/package/package.rs
+++ b/crates/shirabe/src/package/package.rs
@@ -579,9 +579,6 @@ impl std::fmt::Display for Package {
}
impl PackageInterface for Package {
- fn as_any(&self) -> &dyn std::any::Any {
- self
- }
fn get_name(&self) -> &str {
todo!()
}
diff --git a/crates/shirabe/src/package/package_interface.rs b/crates/shirabe/src/package/package_interface.rs
index 97aac26..0ec6e26 100644
--- a/crates/shirabe/src/package/package_interface.rs
+++ b/crates/shirabe/src/package/package_interface.rs
@@ -15,8 +15,6 @@ use crate::repository::RepositoryInterface;
/// @phpstan-type DevAutoloadRules array{psr-0?: array<string, string|string[]>, psr-4?: array<string, string|string[]>, classmap?: list<string>, files?: list<string>}
/// @phpstan-type PhpExtConfig array{extension-name?: string, priority?: int, support-zts?: bool, support-nts?: bool, build-path?: string|null, download-url-method?: string|list<string>, os-families?: non-empty-list<non-empty-string>, os-families-exclude?: non-empty-list<non-empty-string>, configure-options?: list<array{name: string, description?: string}>}
pub trait PackageInterface: std::fmt::Display + std::fmt::Debug {
- fn as_any(&self) -> &dyn std::any::Any;
-
/// Returns the package's name without version info, thus not a unique identifier
///
/// @return string package name
diff --git a/crates/shirabe/src/package/root_package.rs b/crates/shirabe/src/package/root_package.rs
index b0fdf26..df676ff 100644
--- a/crates/shirabe/src/package/root_package.rs
+++ b/crates/shirabe/src/package/root_package.rs
@@ -234,10 +234,6 @@ impl std::fmt::Display for RootPackage {
}
impl PackageInterface for RootPackage {
- fn as_any(&self) -> &dyn std::any::Any {
- self
- }
-
fn get_name(&self) -> &str {
todo!()
}
diff --git a/crates/shirabe/src/package/version/version_bumper.rs b/crates/shirabe/src/package/version/version_bumper.rs
index 8cc4b5d..e54ad10 100644
--- a/crates/shirabe/src/package/version/version_bumper.rs
+++ b/crates/shirabe/src/package/version/version_bumper.rs
@@ -1,6 +1,6 @@
//! ref: composer/src/Composer/Package/Version/VersionBumper.php
-use crate::package::PackageInterface;
+use crate::package::PackageInterfaceHandle;
use crate::package::dumper::ArrayDumper;
use crate::package::loader::ArrayLoader;
use crate::package::version::VersionParser;
@@ -18,7 +18,7 @@ impl VersionBumper {
pub fn bump_requirement(
&self,
constraint: &AnyConstraint,
- package: &dyn PackageInterface,
+ package: PackageInterfaceHandle,
) -> Result<String> {
let parser = VersionParser::new();
let pretty_constraint = constraint.get_pretty_string();
@@ -33,7 +33,7 @@ impl VersionBumper {
let _ = &parser;
let loader = ArrayLoader::new(None, false);
let dumper = ArrayDumper::new();
- let dumped = dumper.dump(package);
+ let dumped = dumper.dump(package.clone());
let extra = loader.get_branch_alias(&dumped)?;
if extra.is_none() || extra.as_deref() == Some(VersionParser::DEFAULT_BRANCH_ALIAS) {
diff --git a/crates/shirabe/src/package/version/version_selector.rs b/crates/shirabe/src/package/version/version_selector.rs
index 28b9277..99b459e 100644
--- a/crates/shirabe/src/package/version/version_selector.rs
+++ b/crates/shirabe/src/package/version/version_selector.rs
@@ -16,7 +16,7 @@ use crate::filter::platform_requirement_filter::IgnoreListPlatformRequirementFil
use crate::filter::platform_requirement_filter::PlatformRequirementFilterFactory;
use crate::filter::platform_requirement_filter::PlatformRequirementFilterInterface;
use crate::io::IOInterface;
-use crate::package::PackageInterface;
+use crate::package::PackageInterfaceHandle;
use crate::package::base_package;
use crate::package::dumper::ArrayDumper;
use crate::package::loader::ArrayLoader;
@@ -252,14 +252,15 @@ impl VersionSelector {
pub fn find_recommended_require_version(
&mut self,
- package: &dyn PackageInterface,
+ package: PackageInterfaceHandle,
) -> anyhow::Result<String> {
if package.get_name().starts_with("ext-") {
let php_version = format!(
"{}.{}.{}",
PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION
);
- let ext_parts: Vec<&str> = package.get_version().splitn(4, '.').collect();
+ let package_version = package.get_version();
+ let ext_parts: Vec<&str> = package_version.splitn(4, '.').collect();
let ext_version = ext_parts[..3.min(ext_parts.len())].join(".");
if php_version == ext_version {
return Ok("*".to_string());
@@ -270,14 +271,14 @@ impl VersionSelector {
if !package.is_dev() {
return self.transform_version(
&version,
- package.get_pretty_version(),
- package.get_stability(),
+ &package.get_pretty_version(),
+ &package.get_stability(),
);
}
let loader = ArrayLoader::new(Some(self.get_parser().clone()), false);
let dumper = ArrayDumper::new();
- let extra = loader.get_branch_alias(&dumper.dump(package))?;
+ let extra = loader.get_branch_alias(&dumper.dump(package.clone()))?;
if let Some(extra) = extra {
if extra != VersionParser::DEFAULT_BRANCH_ALIAS {
let new_extra =