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/complete_package.rs4
-rw-r--r--crates/shirabe/src/package/handle.rs14
-rw-r--r--crates/shirabe/src/package/root_package.rs4
-rw-r--r--crates/shirabe/src/package/version/version_selector.rs13
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());