From a70b25847eb40ec076bcc418d705b7fcdcb9f8ac Mon Sep 17 00:00:00 2001 From: atlas Date: Tue, 27 Oct 2026 14:38:06 +0100 Subject: [PATCH] refuse a dependency add of an issue on itself --- hive-forge/src/verbs/dependency.rs | 5 +++++ hive-forge/tests/dependency_cycle.rs | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/hive-forge/src/verbs/dependency.rs b/hive-forge/src/verbs/dependency.rs index 7142d217..391b817c 100644 --- a/hive-forge/src/verbs/dependency.rs +++ b/hive-forge/src/verbs/dependency.rs @@ -202,6 +202,11 @@ fn apply_and_verify( /// `Internal Server Error`) and accepts longer cycles without complaint, /// so the check walks `dependency list` client-side. fn refuse_cycle(client: &Client, owner: &str, name: &str, number: u64, dep: u64) -> Result<()> { + if dep == number { + bail!( + "hive-forge dependency add: #{number} cannot depend on itself, which would create a cycle" + ); + } let path = find_dependency_path(dep, number, |n| { let deps = dependency_summaries(client, owner, name, n)?; Ok(deps diff --git a/hive-forge/tests/dependency_cycle.rs b/hive-forge/tests/dependency_cycle.rs index 5ace7537..5d4b3db2 100644 --- a/hive-forge/tests/dependency_cycle.rs +++ b/hive-forge/tests/dependency_cycle.rs @@ -149,3 +149,17 @@ fn non_cyclic_add_reaches_the_forge() { fn tag(n: u64) -> String { format!("{}{n}", '#') } + +#[test] +fn self_dependency_is_refused_before_any_post() { + let (ok, stderr, posts) = add("self", "10", "10"); + assert!(!ok); + assert!( + stderr.contains(&format!( + "{} cannot depend on itself, which would create a cycle", + tag(10) + )), + "{stderr}" + ); + assert_eq!(posts, 0); +}