From 5e31fa33c3b5cf726a57a063b8e7a070869250fe Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 19 May 2026 21:46:01 +0900 Subject: fix(compile): fix more random compile errors Co-Authored-By: Claude Opus 4.7 (1M context) --- .../shirabe/src/package/version/version_bumper.rs | 17 ++-- .../shirabe/src/package/version/version_guesser.rs | 106 +++++++++++++-------- .../shirabe/src/package/version/version_parser.rs | 6 +- .../src/package/version/version_selector.rs | 44 +++++---- 4 files changed, 99 insertions(+), 74 deletions(-) (limited to 'crates/shirabe/src/package/version') diff --git a/crates/shirabe/src/package/version/version_bumper.rs b/crates/shirabe/src/package/version/version_bumper.rs index 8963fd6..f7c2377 100644 --- a/crates/shirabe/src/package/version/version_bumper.rs +++ b/crates/shirabe/src/package/version/version_bumper.rs @@ -7,7 +7,7 @@ use crate::package::version::version_parser::VersionParser; use crate::util::platform::Platform; use anyhow::Result; use indexmap::IndexMap; -use shirabe_external_packages::composer::pcre::preg::Preg; +use shirabe_external_packages::composer::pcre::preg::{CaptureKey, Preg}; use shirabe_semver::constraint::constraint_interface::ConstraintInterface; use shirabe_semver::intervals::Intervals; @@ -49,9 +49,9 @@ impl VersionBumper { return Ok(pretty_constraint); } - let major = Preg::replace(r"{^([1-9][0-9]*|0\.\d+).*}", "$1", version.clone())?; + let major = Preg::replace(r"{^([1-9][0-9]*|0\.\d+).*}", "$1", &version)?; let version_without_suffix = - Preg::replace(r"{(?:\.(?:0|9999999))+(-dev)?$}", "", version.clone())?; + Preg::replace(r"{(?:\.(?:0|9999999))+(-dev)?$}", "", &version)?; let new_pretty_constraint = format!("^{}", version_without_suffix); if !Preg::is_match(r"{^\^\d+(\.\d+)*$}", &new_pretty_constraint)? { @@ -73,13 +73,16 @@ impl VersionBumper { major = major ); - let mut matches: IndexMap> = IndexMap::new(); - if Preg::is_match_all_with_offsets(&pattern, &pretty_constraint, &mut matches)? { + let mut matches: IndexMap> = IndexMap::new(); + if Preg::is_match_all_with_offsets3(&pattern, &pretty_constraint, Some(&mut matches))? { let mut modified = pretty_constraint.clone(); - let constraint_matches = matches.get("constraint").cloned().unwrap_or_default(); + let constraint_matches = matches + .get(&CaptureKey::ByName("constraint".to_string())) + .cloned() + .unwrap_or_default(); for match_ in constraint_matches.iter().rev() { let match_str = &match_.0; - let match_offset = match_.1; + let match_offset = match_.1 as i64; let suffix = if match_str.matches('.').count() == 2 && version_without_suffix.matches('.').count() == 1 { diff --git a/crates/shirabe/src/package/version/version_guesser.rs b/crates/shirabe/src/package/version/version_guesser.rs index c4e25e0..b366b20 100644 --- a/crates/shirabe/src/package/version/version_guesser.rs +++ b/crates/shirabe/src/package/version/version_guesser.rs @@ -2,7 +2,7 @@ use anyhow::Result; use indexmap::IndexMap; -use shirabe_external_packages::composer::pcre::preg::Preg; +use shirabe_external_packages::composer::pcre::preg::{CaptureKey, Preg}; use shirabe_external_packages::symfony::component::process::process::Process; use shirabe_php_shim::{ PHP_INT_MAX, PhpMixed, RuntimeException, array_keys, array_map, array_merge, empty, @@ -28,10 +28,10 @@ use crate::util::svn::Svn as SvnUtil; #[derive(Debug)] pub struct VersionGuesser { /// @var Config - config: Config, + config: std::rc::Rc>, /// @var ProcessExecutor - process: ProcessExecutor, + process: std::rc::Rc>, /// @var SemverVersionParser version_parser: SemverVersionParser, @@ -52,8 +52,8 @@ pub struct VersionData { impl VersionGuesser { pub fn new( - config: Config, - process: ProcessExecutor, + config: std::rc::Rc>, + process: std::rc::Rc>, version_parser: SemverVersionParser, io: Option>, ) -> Self { @@ -130,6 +130,7 @@ impl VersionGuesser { if "-dev" == substr(version_data.version.as_deref().unwrap_or(""), -4, None) && Preg::is_match(r"{\.9{7}}", version_data.version.as_deref().unwrap_or("")) + .unwrap_or(false) { version_data.pretty_version = Some(Preg::replace( r"{(\.9{7})+}", @@ -154,6 +155,7 @@ impl VersionGuesser { r"{\.9{7}}", version_data.feature_version.as_deref().unwrap_or(""), ) + .unwrap_or(false) { version_data.feature_pretty_version = Some(Preg::replace( r"{(\.9{7})+}", @@ -183,7 +185,7 @@ impl VersionGuesser { // try to fetch current version from git branch let mut output = String::new(); - if 0 == self.process.execute( + if 0 == self.process.borrow_mut().execute_args( &[ "git".to_string(), "branch".to_string(), @@ -199,14 +201,24 @@ impl VersionGuesser { let mut is_feature_branch = false; // find current branch and collect all branch names - for branch in self.process.split_lines(&output) { + for branch in self.process.borrow().split_lines(&output) { if !branch.is_empty() { - if let Some(m) = Preg::is_match_strict_groups( + let mut m: IndexMap = IndexMap::new(); + if Preg::is_match_strict_groups3( r"{^(?:\* ) *(\(no branch\)|\(detached from \S+\)|\(HEAD detached at \S+\)|\S+) *([a-f0-9]+) .*$}", &branch, - ) { - let g1 = m.get(1).cloned().unwrap_or_default(); - let g2 = m.get(2).cloned().unwrap_or_default(); + Some(&mut m), + ) + .unwrap_or(false) + { + let g1 = m + .get(&CaptureKey::ByIndex(1)) + .cloned() + .unwrap_or_default(); + let g2 = m + .get(&CaptureKey::ByIndex(2)) + .cloned() + .unwrap_or_default(); if g1 == "(no branch)" || strpos(&g1, "(detached ") == Some(0) || strpos(&g1, "(HEAD detached at") == Some(0) @@ -225,14 +237,20 @@ impl VersionGuesser { } } - if !branch.is_empty() - && Preg::is_match_strict_groups(r"{^ *.+/HEAD }", &branch).is_none() - { - if let Some(m) = Preg::is_match_strict_groups( + if !branch.is_empty() && { + let mut tmp: IndexMap = IndexMap::new(); + !Preg::is_match_strict_groups3(r"{^ *.+/HEAD }", &branch, Some(&mut tmp)) + .unwrap_or(false) + } { + let mut m: IndexMap = IndexMap::new(); + if Preg::is_match_strict_groups3( r"{^(?:\* )? *((?:remotes/(?:origin|upstream)/)?[^\s/]+) *([a-f0-9]+) .*$}", &branch, - ) { - branches.push(m.get(1).cloned().unwrap_or_default()); + Some(&mut m), + ) + .unwrap_or(false) + { + branches.push(m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default()); } } } @@ -258,7 +276,7 @@ impl VersionGuesser { } } GitUtil::check_for_repo_ownership_error( - &self.process.get_error_output(), + &self.process.borrow().get_error_output(), path, self.io.as_deref(), ); @@ -293,10 +311,11 @@ impl VersionGuesser { .unwrap_or_default(), ); let mut command_output = String::new(); - if 0 == self - .process - .execute(&command, &mut command_output, Some(path.to_string())) - { + if 0 == self.process.borrow_mut().execute_args( + &command, + &mut command_output, + Some(path.to_string()), + ) { let parsed = trim( &GitUtil::parse_rev_list_output(&command_output, &self.process), None, @@ -322,7 +341,7 @@ impl VersionGuesser { fn version_from_git_tags(&mut self, path: &str) -> Result> { // try to fetch current version from git tags let mut output = String::new(); - if 0 == self.process.execute( + if 0 == self.process.borrow_mut().execute_args( &[ "git".to_string(), "describe".to_string(), @@ -352,7 +371,7 @@ impl VersionGuesser { ) -> Result> { // try to fetch current version from hg branch let mut output = String::new(); - if 0 == self.process.execute( + if 0 == self.process.borrow_mut().execute_args( &["hg".to_string(), "branch".to_string()], &mut output, Some(path.to_string()), @@ -392,8 +411,7 @@ impl VersionGuesser { self.config.clone(), // TODO(phase-b): HttpDownloader::new signature todo!("HttpDownloader::new(io, config)"), - // TODO(phase-b): clone ProcessExecutor - todo!("self.process.clone()"), + std::rc::Rc::clone(&self.process), ); let branches: Vec = array_map(|k: &String| k.clone(), &array_keys(driver.get_branches())); @@ -495,7 +513,7 @@ impl VersionGuesser { let mut promises: Vec> = vec![]; - self.process.set_max_jobs(30); + self.process.borrow_mut().set_max_jobs(30); // TODO(phase-b): try/finally with resetMaxJobs let result: Result<()> = (|| -> Result<()> { let mut last_index: i64 = -1; @@ -519,7 +537,7 @@ impl VersionGuesser { }, &scm_cmdline, ); - let async_promise = self.process.execute_async(&cmd_line, path); + let async_promise = self.process.borrow_mut().execute_async(&cmd_line, path); promises.push(async_promise.then(Box::new( move |process: Process| -> Result<()> { if !process.is_successful() { @@ -538,10 +556,10 @@ impl VersionGuesser { ))); } - self.process.wait(); + self.process.borrow_mut().wait(); Ok(()) })(); - self.process.reset_max_jobs(); + self.process.borrow_mut().reset_max_jobs(); result?; } @@ -571,13 +589,11 @@ impl VersionGuesser { non_feature_branches = implode("|", &names); } - !Preg::is_match( - &format!( - r"{{^({}|master|main|latest|next|current|support|tip|trunk|default|develop|\d+\..+)$}}", - non_feature_branches, - ), - branch_name.unwrap_or(""), - ) + !Preg::is_match(&format!( + r"{{^({}|master|main|latest|next|current|support|tip|trunk|default|develop|\d+\..+)$}}", + non_feature_branches, + ), branch_name.unwrap_or("")).unwrap_or(false) + .unwrap_or(false) } /// @return array{version: string|null, commit: '', pretty_version: string|null} @@ -587,7 +603,7 @@ impl VersionGuesser { // try to fetch current version from fossil let mut output = String::new(); - if 0 == self.process.execute( + if 0 == self.process.borrow_mut().execute_args( &[ "fossil".to_string(), "branch".to_string(), @@ -603,7 +619,7 @@ impl VersionGuesser { // try to fetch current version from fossil tags let mut output = String::new(); - if 0 == self.process.execute( + if 0 == self.process.borrow_mut().execute_args( &["fossil".to_string(), "tag".to_string(), "list".to_string()], &mut output, Some(path.to_string()), @@ -639,7 +655,7 @@ impl VersionGuesser { // try to fetch current version from svn let mut output = String::new(); - if 0 == self.process.execute( + if 0 == self.process.borrow_mut().execute_args( &["svn".to_string(), "info".to_string(), "--xml".to_string()], &mut output, Some(path.to_string()), @@ -720,8 +736,14 @@ impl VersionGuesser { .into()); } }; - if let Some(m) = Preg::is_match_strict_groups(r"{^(\d+(?:\.\d+)*)-dev$}i", &version) { - return Ok(format!("{}.x-dev", m.get(1).cloned().unwrap_or_default())); + let mut m: IndexMap = IndexMap::new(); + if Preg::is_match_strict_groups3(r"{^(\d+(?:\.\d+)*)-dev$}i", &version, Some(&mut m)) + .unwrap_or(false) + { + return Ok(format!( + "{}.x-dev", + m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default() + )); } Ok(version) diff --git a/crates/shirabe/src/package/version/version_parser.rs b/crates/shirabe/src/package/version/version_parser.rs index 6dbf425..84749a3 100644 --- a/crates/shirabe/src/package/version/version_parser.rs +++ b/crates/shirabe/src/package/version/version_parser.rs @@ -42,11 +42,7 @@ impl VersionParser { let count = pairs.len(); let mut i = 0_usize; while i < count { - let mut pair = Preg::replace( - r"{^([^=: ]+)[=: ](.*)$}", - "$1 $2", - pairs[i].trim().to_string(), - )?; + let mut pair = Preg::replace(r"{^([^=: ]+)[=: ](.*)$}", "$1 $2", &pairs[i].trim())?; if !pair.contains(' ') && i + 1 < count && !pairs[i + 1].contains('/') diff --git a/crates/shirabe/src/package/version/version_selector.rs b/crates/shirabe/src/package/version/version_selector.rs index 5cbc052..1df58ab 100644 --- a/crates/shirabe/src/package/version/version_selector.rs +++ b/crates/shirabe/src/package/version/version_selector.rs @@ -17,7 +17,7 @@ use crate::filter::platform_requirement_filter::platform_requirement_filter_fact use crate::filter::platform_requirement_filter::platform_requirement_filter_interface::PlatformRequirementFilterInterface; use crate::io::io_interface::IOInterface; use crate::package::alias_package::AliasPackage; -use crate::package::base_package::BasePackage; +use crate::package::base_package::{self, BasePackage}; use crate::package::dumper::array_dumper::ArrayDumper; use crate::package::loader::array_loader::ArrayLoader; use crate::package::package_interface::PackageInterface; @@ -41,7 +41,7 @@ impl VersionSelector { IndexMap::new(); if let Some(platform_repo) = platform_repo { for package in platform_repo.get_packages() { - let constraint = Constraint::new("==", package.get_version())?; + let constraint = Constraint::new("==", package.get_version()); platform_constraints .entry(package.get_name().to_string()) .or_default() @@ -65,7 +65,7 @@ impl VersionSelector { io: Option<&dyn IOInterface>, show_warnings: shirabe_php_shim::PhpMixed, ) -> anyhow::Result>> { - if !BasePackage::STABILITIES.contains_key(preferred_stability) { + if !base_package::STABILITIES.contains_key(preferred_stability) { return Err(shirabe_php_shim::UnexpectedValueException { message: format!( "Expected a valid stability name as 3rd argument, got {}", @@ -92,7 +92,7 @@ impl VersionSelector { repo_set_flags, )?; - let min_priority = *BasePackage::STABILITIES.get(preferred_stability).unwrap(); + let min_priority = *base_package::STABILITIES.get(preferred_stability).unwrap(); candidates.sort_by(|a, b| { let a_priority = a.get_stability_priority(); let b_priority = b.get_stability_priority(); @@ -116,7 +116,9 @@ impl VersionSelector { } }); - let is_ignore_all = (platform_requirement_filter.as_ref() as &dyn Any) + let is_ignore_all = platform_requirement_filter + .as_ref() + .as_any() .downcast_ref::() .is_some(); @@ -141,9 +143,11 @@ impl VersionSelector { if link.get_constraint().matches(provided_constraint.as_ref()) { continue 'reqs; } - let list_filter_opt = (platform_requirement_filter.as_ref() - as &dyn Any) - .downcast_ref::(); + let list_filter_opt = platform_requirement_filter + .as_ref() + .as_any() + .downcast_ref::( + ); if let Some(list_filter) = list_filter_opt { if list_filter.is_upper_bound_ignored(name) { let filtered_constraint = list_filter.filter_constraint( @@ -178,8 +182,8 @@ impl VersionSelector { } else { "" }; - io.write_error( - shirabe_php_shim::PhpMixed::String(format!( + io.write_error3( + &format!( "Cannot use {}{} {} as it {} {} {} which {}.", pkg.get_pretty_name(), latest, @@ -188,7 +192,7 @@ impl VersionSelector { link.get_target(), link.get_pretty_constraint(), reason - )), + ), true, if is_first_warning { io_interface::NORMAL @@ -223,16 +227,16 @@ impl VersionSelector { Some(p) => p, }; - let package = - if let Some(alias) = (package.as_ref() as &dyn Any).downcast_ref::() { - if alias.get_version() == VersionParser::DEFAULT_BRANCH_ALIAS { - alias.get_alias_of() - } else { - package - } + let package = if let Some(alias) = package.as_ref().as_any().downcast_ref::() + { + if alias.get_version() == VersionParser::DEFAULT_BRANCH_ALIAS { + alias.get_alias_of() } else { package - }; + } + } else { + package + }; Ok(Some(package)) } @@ -268,7 +272,7 @@ impl VersionSelector { if let Some(extra) = extra { if extra != VersionParser::DEFAULT_BRANCH_ALIAS { let new_extra = - Preg::replace(r"{^(\d+\.\d+\.\d+)(\.9999999)-dev$}", "$1.0", extra.clone())?; + Preg::replace(r"{^(\d+\.\d+\.\d+)(\.9999999)-dev$}", "$1.0", &extra)?; if new_extra != extra { let new_extra = new_extra.replace(".9999999", ".0"); return self.transform_version(&new_extra, &new_extra, "dev"); -- cgit v1.3.1