aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package/version
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-12 03:52:46 +0900
committernsfisis <nsfisis@gmail.com>2026-05-12 03:52:46 +0900
commita4c885e910f88b48df68e41005513685b16fc182 (patch)
treee9816da8288db8eb3eaf5f6625a1a616fb460868 /crates/shirabe/src/package/version
parent0c5593f66a11eb63e9d92b0fc6fc8aa460c4b1f4 (diff)
downloadphp-shirabe-a4c885e910f88b48df68e41005513685b16fc182.tar.gz
php-shirabe-a4c885e910f88b48df68e41005513685b16fc182.tar.zst
php-shirabe-a4c885e910f88b48df68e41005513685b16fc182.zip
feat(port): port StabilityFilter.php
Diffstat (limited to 'crates/shirabe/src/package/version')
-rw-r--r--crates/shirabe/src/package/version/stability_filter.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/crates/shirabe/src/package/version/stability_filter.rs b/crates/shirabe/src/package/version/stability_filter.rs
index 6465a00..65f024f 100644
--- a/crates/shirabe/src/package/version/stability_filter.rs
+++ b/crates/shirabe/src/package/version/stability_filter.rs
@@ -1 +1,31 @@
//! ref: composer/src/Composer/Package/Version/StabilityFilter.php
+
+use indexmap::IndexMap;
+use crate::package::base_package::BasePackage;
+
+pub struct StabilityFilter;
+
+impl StabilityFilter {
+ pub fn is_package_acceptable(
+ acceptable_stabilities: &IndexMap<String, i64>,
+ stability_flags: &IndexMap<String, i64>,
+ names: &[String],
+ stability: &str,
+ ) -> bool {
+ for name in names {
+ // allow if package matches the package-specific stability flag
+ if let Some(&flag) = stability_flags.get(name) {
+ if let Some(&stability_value) = BasePackage::STABILITIES.get(stability) {
+ if stability_value <= flag {
+ return true;
+ }
+ }
+ } else if acceptable_stabilities.contains_key(stability) {
+ // allow if package matches the global stability requirement and has no exception
+ return true;
+ }
+ }
+
+ false
+ }
+}