aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/dependency_resolver
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/dependency_resolver')
-rw-r--r--crates/shirabe/src/dependency_resolver/decisions.rs15
-rw-r--r--crates/shirabe/src/dependency_resolver/generic_rule.rs6
-rw-r--r--crates/shirabe/src/dependency_resolver/multi_conflict_rule.rs13
-rw-r--r--crates/shirabe/src/dependency_resolver/pool_builder.rs15
-rw-r--r--crates/shirabe/src/dependency_resolver/problem.rs7
-rw-r--r--crates/shirabe/src/dependency_resolver/request.rs15
-rw-r--r--crates/shirabe/src/dependency_resolver/rule.rs11
-rw-r--r--crates/shirabe/src/dependency_resolver/rule_set.rs6
-rw-r--r--crates/shirabe/src/dependency_resolver/rule_set_generator.rs12
-rw-r--r--crates/shirabe/src/dependency_resolver/solver.rs14
-rw-r--r--crates/shirabe/src/dependency_resolver/solver_bug_exception.rs17
-rw-r--r--crates/shirabe/src/dependency_resolver/solver_problems_exception.rs28
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
+);