aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-07-18 01:07:23 +0900
committernsfisis <nsfisis@gmail.com>2026-07-18 01:07:23 +0900
commitdee7a8ad1ba80eafee746a6af2bfec578ca60d4e (patch)
tree56d6feedff136712c1203bfd00f12b01644052f5 /crates/shirabe/src
parentd1960a8b7488dffe161080714447120fa6f85db1 (diff)
downloadphp-shirabe-dee7a8ad1ba80eafee746a6af2bfec578ca60d4e.tar.gz
php-shirabe-dee7a8ad1ba80eafee746a6af2bfec578ca60d4e.tar.zst
php-shirabe-dee7a8ad1ba80eafee746a6af2bfec578ca60d4e.zip
fix(require-command): avoid unsupported regex lookahead in dev-branch check
The `regex` crate does not support negative lookahead, so the ported `^dev-(?!main$|master$|trunk$|latest$)` pattern panicked at runtime on any `require` invocation that reached version-selection. Replace it with equivalent hand-written string logic per docs/dev/regex-porting.md.
Diffstat (limited to 'crates/shirabe/src')
-rw-r--r--crates/shirabe/src/command/require_command.rs21
1 files changed, 13 insertions, 8 deletions
diff --git a/crates/shirabe/src/command/require_command.rs b/crates/shirabe/src/command/require_command.rs
index 219ad3d8..16bc73f0 100644
--- a/crates/shirabe/src/command/require_command.rs
+++ b/crates/shirabe/src/command/require_command.rs
@@ -30,7 +30,6 @@ use crate::util::Filesystem;
use crate::util::PackageSorter;
use crate::util::Silencer;
use indexmap::IndexMap;
-use shirabe_external_packages::composer::pcre::Preg;
use shirabe_external_packages::seld::signal::SignalHandler;
use shirabe_external_packages::symfony::console::command::command::Command;
use shirabe_external_packages::symfony::console::input::InputInterface;
@@ -1110,13 +1109,19 @@ impl RequireCommand {
io_interface::NORMAL,
);
- if Preg::is_match(
- r"{^dev-(?!main$|master$|trunk$|latest$)}",
- requirements
- .get(package_name)
- .map(|s| s.as_str())
- .unwrap_or(""),
- ) {
+ // Regex pattern compatibility:
+ // PCRE `{^dev-(?!main$|master$|trunk$|latest$)}` uses a negative lookahead,
+ // which the `regex` crate does not support. Decomposed into hand-written logic.
+ let requirement_str = requirements
+ .get(package_name)
+ .map(|s| s.as_str())
+ .unwrap_or("");
+ if requirement_str.starts_with("dev-")
+ && !matches!(
+ &requirement_str[4..],
+ "main" | "master" | "trunk" | "latest"
+ )
+ {
self.get_io().warning(
&format!(
"Version {} looks like it may be a feature branch which is unlikely to keep working in the long run and may be in an unstable state",