diff options
Diffstat (limited to 'crates/shirabe/src/package')
| -rw-r--r-- | crates/shirabe/src/package/alias_package.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/package/archiver/archive_manager.rs | 19 | ||||
| -rw-r--r-- | crates/shirabe/src/package/complete_package.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/package/dumper/array_dumper.rs | 20 | ||||
| -rw-r--r-- | crates/shirabe/src/package/handle.rs | 3 | ||||
| -rw-r--r-- | crates/shirabe/src/package/link.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/package/locker.rs | 22 | ||||
| -rw-r--r-- | crates/shirabe/src/package/package.rs | 3 | ||||
| -rw-r--r-- | crates/shirabe/src/package/package_interface.rs | 2 | ||||
| -rw-r--r-- | crates/shirabe/src/package/root_package.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/package/version/version_bumper.rs | 6 | ||||
| -rw-r--r-- | crates/shirabe/src/package/version/version_selector.rs | 13 |
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 = |
