diff options
Diffstat (limited to 'crates/shirabe/src/dependency_resolver')
12 files changed, 57 insertions, 102 deletions
diff --git a/crates/shirabe/src/dependency_resolver/decisions.rs b/crates/shirabe/src/dependency_resolver/decisions.rs index 81f00884..ac596054 100644 --- a/crates/shirabe/src/dependency_resolver/decisions.rs +++ b/crates/shirabe/src/dependency_resolver/decisions.rs @@ -102,14 +102,11 @@ impl Decisions { panic!( "{}", - LogicException { - message: format!( - "Did not find a decision rule using {}", - literal_or_package_id - ), - code: 0, - } - .message + LogicException::new(format!( + "Did not find a decision rule using {}", + literal_or_package_id + )) + .get_message() ); } @@ -171,7 +168,7 @@ impl Decisions { literal_string, level, package, previous_decision )) .0 - .message + .get_message() ); } diff --git a/crates/shirabe/src/dependency_resolver/generic_rule.rs b/crates/shirabe/src/dependency_resolver/generic_rule.rs index 8b64dc46..3f098f01 100644 --- a/crates/shirabe/src/dependency_resolver/generic_rule.rs +++ b/crates/shirabe/src/dependency_resolver/generic_rule.rs @@ -44,11 +44,7 @@ impl GenericRule { let binary = hash_raw(algo, &joined); match binary.get(..4) { Some(chunk) => Ok(i32::from_ne_bytes(chunk.try_into().unwrap()) as i64), - None => Err(RuntimeException { - message: format!("Failed unpacking: {}", joined), - code: 0, - } - .into()), + None => Err(RuntimeException::new(format!("Failed unpacking: {}", joined)).into()), } } diff --git a/crates/shirabe/src/dependency_resolver/multi_conflict_rule.rs b/crates/shirabe/src/dependency_resolver/multi_conflict_rule.rs index 0936dd0c..d43d9a79 100644 --- a/crates/shirabe/src/dependency_resolver/multi_conflict_rule.rs +++ b/crates/shirabe/src/dependency_resolver/multi_conflict_rule.rs @@ -16,10 +16,9 @@ impl MultiConflictRule { reason_data: ReasonData, ) -> anyhow::Result<Self> { if literals.len() < 3 { - return Err(RuntimeException { - message: "multi conflict rule requires at least 3 literals".to_string(), - code: 0, - } + return Err(RuntimeException::new( + "multi conflict rule requires at least 3 literals".to_string(), + ) .into()); } @@ -59,11 +58,7 @@ impl MultiConflictRule { let binary = hash_raw(algo, &format!("c:{}", joined)); match binary.get(..4) { Some(chunk) => Ok(i32::from_ne_bytes(chunk.try_into().unwrap()) as i64), - None => Err(RuntimeException { - message: format!("Failed unpacking: {}", joined), - code: 0, - } - .into()), + None => Err(RuntimeException::new(format!("Failed unpacking: {}", joined)).into()), } } diff --git a/crates/shirabe/src/dependency_resolver/pool_builder.rs b/crates/shirabe/src/dependency_resolver/pool_builder.rs index 35699a90..f5143897 100644 --- a/crates/shirabe/src/dependency_resolver/pool_builder.rs +++ b/crates/shirabe/src/dependency_resolver/pool_builder.rs @@ -147,11 +147,9 @@ impl PoolBuilder { self.warn_about_non_matching_update_allow_list(request)?; if request.get_locked_repository().is_none() { - return Err(LogicException { - message: "No lock repo present and yet a partial update was requested." - .to_string(), - code: 0, - } + return Err(LogicException::new( + "No lock repo present and yet a partial update was requested.".to_string(), + ) .into()); } @@ -798,10 +796,9 @@ impl PoolBuilder { fn warn_about_non_matching_update_allow_list(&self, request: &Request) -> anyhow::Result<()> { if request.get_locked_repository().is_none() { - return Err(LogicException { - message: "No lock repo present and yet a partial update was requested.".to_string(), - code: 0, - } + return Err(LogicException::new( + "No lock repo present and yet a partial update was requested.".to_string(), + ) .into()); } diff --git a/crates/shirabe/src/dependency_resolver/problem.rs b/crates/shirabe/src/dependency_resolver/problem.rs index 3c69babe..3b9feba5 100644 --- a/crates/shirabe/src/dependency_resolver/problem.rs +++ b/crates/shirabe/src/dependency_resolver/problem.rs @@ -82,10 +82,9 @@ impl Problem { let rule_ref = rule.borrow(); if rule_ref.get_reason() != rule::RULE_ROOT_REQUIRE { - return Err(LogicException { - message: "Single reason problems must contain a root require rule.".to_string(), - code: 0, - } + return Err(LogicException::new( + "Single reason problems must contain a root require rule.".to_string(), + ) .into()); } diff --git a/crates/shirabe/src/dependency_resolver/request.rs b/crates/shirabe/src/dependency_resolver/request.rs index d78900c0..410831dd 100644 --- a/crates/shirabe/src/dependency_resolver/request.rs +++ b/crates/shirabe/src/dependency_resolver/request.rs @@ -47,15 +47,12 @@ impl Request { let package_name = strtolower(package_name); let constraint = constraint.unwrap_or_else(|| MatchAllConstraint::new(None).into()); if self.requires.contains_key(&package_name) { - return Err(LogicException { - message: format!( - "Overwriting requires seems like a bug ({} {} => {}, check why it is happening, might be a root alias", - package_name, - self.requires[&package_name].get_pretty_string(), - constraint.get_pretty_string() - ), - code: 0, - } + return Err(LogicException::new(format!( + "Overwriting requires seems like a bug ({} {} => {}, check why it is happening, might be a root alias", + package_name, + self.requires[&package_name].get_pretty_string(), + constraint.get_pretty_string() + )) .into()); } self.requires.insert(package_name, constraint); diff --git a/crates/shirabe/src/dependency_resolver/rule.rs b/crates/shirabe/src/dependency_resolver/rule.rs index 0ed442ce..5e009260 100644 --- a/crates/shirabe/src/dependency_resolver/rule.rs +++ b/crates/shirabe/src/dependency_resolver/rule.rs @@ -166,10 +166,7 @@ impl Rule { pub fn disable(&mut self) -> anyhow::Result<()> { if let Rule::MultiConflict(_) = self { - return Err(RuntimeException { - message: "Disabling multi conflict rules is not possible. Please contact composer at https://github.com/composer/composer to let us debug what lead to this situation.".to_string(), - code: 0, - } + return Err(RuntimeException::new("Disabling multi conflict rules is not possible. Please contact composer at https://github.com/composer/composer to let us debug what lead to this situation.".to_string()) .into()); } *self.bitfield_mut() = @@ -291,11 +288,7 @@ impl Rule { Ok(source_package) } - _ => Err(LogicException { - message: "Not implemented".to_string(), - code: 0, - } - .into()), + _ => Err(LogicException::new("Not implemented".to_string()).into()), } } diff --git a/crates/shirabe/src/dependency_resolver/rule_set.rs b/crates/shirabe/src/dependency_resolver/rule_set.rs index f7300d93..50f7cb45 100644 --- a/crates/shirabe/src/dependency_resolver/rule_set.rs +++ b/crates/shirabe/src/dependency_resolver/rule_set.rs @@ -59,11 +59,7 @@ impl RuleSet { ) -> anyhow::Result<()> { let types = Self::types(); if !types.contains_key(&r#type) { - return Err(OutOfBoundsException { - message: format!("Unknown rule type: {}", r#type), - code: 0, - } - .into()); + return Err(OutOfBoundsException::new(format!("Unknown rule type: {}", r#type)).into()); } let hash = rule.borrow().get_hash()?.to_string(); diff --git a/crates/shirabe/src/dependency_resolver/rule_set_generator.rs b/crates/shirabe/src/dependency_resolver/rule_set_generator.rs index 2f4837d4..6f2213dc 100644 --- a/crates/shirabe/src/dependency_resolver/rule_set_generator.rs +++ b/crates/shirabe/src/dependency_resolver/rule_set_generator.rs @@ -309,13 +309,11 @@ impl RuleSetGenerator { } // otherwise, looks like a bug - return Err(anyhow::anyhow!(shirabe_php_shim::LogicException { - message: format!( - "Fixed package {} was not added to solver pool.", - package.get_pretty_string() - ), - code: 0, - })); + return Err(shirabe_php_shim::LogicException::new(format!( + "Fixed package {} was not added to solver pool.", + package.get_pretty_string() + )) + .into()); } self.add_rules_for_package(package.clone(), platform_requirement_filter); diff --git a/crates/shirabe/src/dependency_resolver/solver.rs b/crates/shirabe/src/dependency_resolver/solver.rs index dd5bd383..a9453a3e 100644 --- a/crates/shirabe/src/dependency_resolver/solver.rs +++ b/crates/shirabe/src/dependency_resolver/solver.rs @@ -381,10 +381,11 @@ impl Solver { let (learn_literal, new_level, new_rule, why) = self.analyze(level, rule)?; if new_level <= 0 || new_level >= level { - return Err(anyhow::anyhow!(SolverBugException::new(format!( + return Err(SolverBugException::new(format!( "Trying to revert to invalid level {} from level {}.", new_level, level - )))); + )) + .into()); } level = new_level; @@ -505,12 +506,12 @@ impl Solver { let inner_literal = loop { if decision_id <= 0 { - return Err(anyhow::anyhow!(SolverBugException::new(format!( + return Err(SolverBugException::new(format!( "Reached invalid decision id {} while looking through {} for a literal present in the analyzed rule {}.", decision_id, rule.borrow(), analyzed_rule.borrow() - )))); + )).into()); } decision_id -= 1; @@ -587,10 +588,11 @@ impl Solver { let learned_literal = match learned_literal { Some(l) => l, None => { - return Err(anyhow::anyhow!(SolverBugException::new(format!( + return Err(SolverBugException::new(format!( "Did not find a learnable literal in analyzed rule {}.", analyzed_rule.borrow() - )))); + )) + .into()); } }; diff --git a/crates/shirabe/src/dependency_resolver/solver_bug_exception.rs b/crates/shirabe/src/dependency_resolver/solver_bug_exception.rs index d509ef6a..9c47d99b 100644 --- a/crates/shirabe/src/dependency_resolver/solver_bug_exception.rs +++ b/crates/shirabe/src/dependency_resolver/solver_bug_exception.rs @@ -12,17 +12,12 @@ impl SolverBugException { Please report the command you ran, the exact error you received, and your composer.json on https://github.com/composer/composer/issues - thank you!\n", message ); - SolverBugException(RuntimeException { - message: full_message, - code: 0, - }) + SolverBugException(RuntimeException::new(full_message)) } } -impl std::fmt::Display for SolverBugException { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - self.0.fmt(f) - } -} - -impl std::error::Error for SolverBugException {} +shirabe_php_shim::impl_php_exception!( + SolverBugException, + 0, + r"Composer\DependencyResolver\SolverBugException" +); diff --git a/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs b/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs index 39f2b2c1..4c948608 100644 --- a/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs +++ b/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs @@ -18,14 +18,6 @@ pub struct SolverProblemsException { impl SolverProblemsException { pub const ERROR_DEPENDENCY_RESOLUTION_FAILED: i64 = 2; - pub fn get_code(&self) -> i64 { - self.inner.code - } - - pub fn get_message(&self) -> &str { - &self.inner.message - } - pub fn new( problems: Vec<Problem>, learned_pool: Vec<Vec<std::rc::Rc<std::cell::RefCell<Rule>>>>, @@ -35,10 +27,7 @@ impl SolverProblemsException { problems.len() ); Self { - inner: RuntimeException { - message, - code: Self::ERROR_DEPENDENCY_RESOLUTION_FAILED, - }, + inner: RuntimeException::with_code(message, Self::ERROR_DEPENDENCY_RESOLUTION_FAILED), problems, learned_pool, } @@ -170,10 +159,11 @@ impl SolverProblemsException { } } -impl std::fmt::Display for SolverProblemsException { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.inner.message) - } -} - -impl std::error::Error for SolverProblemsException {} +// `learned_pool` holds `Rc<RefCell<Rule>>`, so this exception rides an inner `Result` rather than +// an `anyhow::Error`. +shirabe_php_shim::impl_php_exception!( + SolverProblemsException, + inner, + r"Composer\DependencyResolver\SolverProblemsException", + !Send +); |
