aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package/version
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-07-19 18:47:48 +0900
committernsfisis <nsfisis@gmail.com>2026-07-19 18:47:48 +0900
commitfe0352e2db35ed559506c2b477708180768000e8 (patch)
treeefd3a985b33024914541eaab0bc44de41798a6e7 /crates/shirabe/src/package/version
parentd0cd98cd212bc13cbcfd0fd97fc245329b57f50f (diff)
downloadphp-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/version')
-rw-r--r--crates/shirabe/src/package/version/version_selector.rs13
1 files changed, 10 insertions, 3 deletions
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());