diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-07-19 18:47:48 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-07-19 18:47:48 +0900 |
| commit | fe0352e2db35ed559506c2b477708180768000e8 (patch) | |
| tree | efd3a985b33024914541eaab0bc44de41798a6e7 /crates/shirabe/src/package | |
| parent | d0cd98cd212bc13cbcfd0fd97fc245329b57f50f (diff) | |
| download | php-shirabe-fe0352e2db35ed559506c2b477708180768000e8.tar.gz php-shirabe-fe0352e2db35ed559506c2b477708180768000e8.tar.zst php-shirabe-fe0352e2db35ed559506c2b477708180768000e8.zip | |
fix(show-command): un-ignore 10 tests by fixing show-warnings typing and repo bugs
Replace the PhpMixed-based `$showWarnings` hack in VersionSelector::
findBestCandidate with a typed ShowWarnings enum (Always / Predicate),
letting ShowCommand::findLatestPackage pass its real closure instead of
hardcoding `true`. Fix the --no-dev branch in ShowCommand::execute,
which built `repos` from an empty package list instead of sharing the
same InstalledRepository as `installed_repo`. Pass repository handles
instead of pre-borrowed `&dyn RepositoryInterface` refs into get_package/
generate_package_tree/add_tree to stop a RefCell double-borrow panic on
--all/--locked. Add the missing CompletePackage/RootPackage
set_release_date setter so the outdated sorting-by-age test can set
fixture dates. Resolve OutputFormatterStyleStack::pop's empty-style
todo!() via clone_box(), and fix FileDownloader's cache-GC log call to
pass the VERY_VERBOSE verbosity PHP uses.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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()); |
