diff options
Diffstat (limited to 'crates/shirabe/src/package')
| -rw-r--r-- | crates/shirabe/src/package/complete_package.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/package/handle.rs | 14 | ||||
| -rw-r--r-- | crates/shirabe/src/package/root_package.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/package/version/version_selector.rs | 13 |
4 files changed, 32 insertions, 3 deletions
diff --git a/crates/shirabe/src/package/complete_package.rs b/crates/shirabe/src/package/complete_package.rs index 0c7ecf49..ec9986c9 100644 --- a/crates/shirabe/src/package/complete_package.rs +++ b/crates/shirabe/src/package/complete_package.rs @@ -47,6 +47,10 @@ impl CompletePackage { pub fn replace_version(&mut self, version: String, pretty_version: String) { self.inner.replace_version(version, pretty_version); } + + pub fn set_release_date(&mut self, release_date: Option<chrono::DateTime<chrono::Utc>>) { + self.inner.set_release_date(release_date); + } } impl CompletePackageInterface for CompletePackage { diff --git a/crates/shirabe/src/package/handle.rs b/crates/shirabe/src/package/handle.rs index 2b23a8c2..4d78734f 100644 --- a/crates/shirabe/src/package/handle.rs +++ b/crates/shirabe/src/package/handle.rs @@ -1570,6 +1570,13 @@ impl CompletePackageHandle { pub fn new(name: String, version: String, pretty_version: String) -> Self { Self::from_complete_package(CompletePackage::new(name, version, pretty_version)) } + + pub fn set_release_date(&self, release_date: Option<chrono::DateTime<chrono::Utc>>) { + match &mut *self.0.borrow_mut() { + AnyPackage::CompletePackage(p) => p.set_release_date(release_date), + _ => unreachable!("CompletePackageHandle invariant"), + } + } } impl RootPackageHandle { @@ -1589,6 +1596,13 @@ impl RootPackageHandle { _ => unreachable!("RootPackageHandle invariant"), } } + + pub fn set_release_date(&self, release_date: Option<chrono::DateTime<chrono::Utc>>) { + match &mut *self.0.borrow_mut() { + AnyPackage::RootPackage(p) => p.set_release_date(release_date), + _ => unreachable!("RootPackageHandle invariant"), + } + } } impl AliasPackageHandle { diff --git a/crates/shirabe/src/package/root_package.rs b/crates/shirabe/src/package/root_package.rs index 899006d1..2c2b87ea 100644 --- a/crates/shirabe/src/package/root_package.rs +++ b/crates/shirabe/src/package/root_package.rs @@ -42,6 +42,10 @@ impl RootPackage { pub fn replace_version(&mut self, version: String, pretty_version: String) { self.inner.replace_version(version, pretty_version); } + + pub fn set_release_date(&mut self, release_date: Option<DateTime<Utc>>) { + self.inner.set_release_date(release_date); + } } impl RootPackageInterface for RootPackage { diff --git a/crates/shirabe/src/package/version/version_selector.rs b/crates/shirabe/src/package/version/version_selector.rs index ff5e7586..e8539212 100644 --- a/crates/shirabe/src/package/version/version_selector.rs +++ b/crates/shirabe/src/package/version/version_selector.rs @@ -24,6 +24,13 @@ use shirabe_php_shim::{ use shirabe_semver::constraint::AnyConstraint; use shirabe_semver::constraint::SimpleConstraint; +/// PHP `$showWarnings` (`true` or a `callable(PackageInterface): bool`) as passed to +/// `VersionSelector::findBestCandidate`. +pub enum ShowWarnings { + Always, + Predicate(Box<dyn Fn(&PackageInterfaceHandle) -> bool>), +} + #[derive(Debug)] pub struct VersionSelector { repository_set: std::rc::Rc<std::cell::RefCell<dyn RepositorySetInterface>>, @@ -66,7 +73,7 @@ impl VersionSelector { platform_requirement_filter: Option<std::rc::Rc<dyn PlatformRequirementFilterInterface>>, repo_set_flags: i64, io: Option<std::rc::Rc<std::cell::RefCell<dyn IOInterface>>>, - show_warnings: shirabe_php_shim::PhpMixed, + show_warnings: ShowWarnings, ) -> anyhow::Result<Option<crate::package::PackageInterfaceHandle>> { if !base_package::STABILITIES.contains_key(preferred_stability) { return Err(shirabe_php_shim::UnexpectedValueException { @@ -179,8 +186,8 @@ impl VersionSelector { already_seen_names.insert(pkg.get_name().to_string(), true); if let Some(ref io) = io { let should_warn = match &show_warnings { - shirabe_php_shim::PhpMixed::Bool(b) => *b, - _ => true, + ShowWarnings::Always => true, + ShowWarnings::Predicate(f) => f(pkg), }; if should_warn { let warn_key = format!("{}/{}", pkg.get_name(), link.get_target()); |
