From 74daa5d3a0cb0702e5f017b694437cfb78b20ba3 Mon Sep 17 00:00:00 2001 From: Preetam Dwivedi Date: Wed, 30 Sep 2026 11:08:46 -0700 Subject: [PATCH] Reject zero per-repo concurrency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary ### Why? A zero-sized per-repository semaphore can never grant a permit, so a valid-looking configuration caused every Git request for a repository to wait indefinitely. ### What? Require `server.max_concurrent_per_repo` to be positive and add a regression test for the invalid zero value. ## Test Plan ✅ `cargo test -p walgit-config zero_per_repo_concurrency_is_rejected` ✅ `cargo fmt --all -- --check` ✅ `git diff --check` ## Issue Closes #79 --- crates/walgit-config/src/lib.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/crates/walgit-config/src/lib.rs b/crates/walgit-config/src/lib.rs index b5aca125..0ae1a152 100644 --- a/crates/walgit-config/src/lib.rs +++ b/crates/walgit-config/src/lib.rs @@ -1081,6 +1081,10 @@ impl Config { self.server.max_concurrent_requests > 0, "server.max_concurrent_requests must be positive" ); + anyhow::ensure!( + self.server.max_concurrent_per_repo > 0, + "server.max_concurrent_per_repo must be positive" + ); anyhow::ensure!( !self.server.request_timeout.is_zero(), "server.request_timeout must be positive" @@ -1360,6 +1364,14 @@ mod tests { assert_eq!(back.store.bucket, c.store.bucket); } + #[test] + fn zero_per_repo_concurrency_is_rejected() { + let mut c = Config::default(); + c.server.max_concurrent_per_repo = 0; + let err = c.validate().unwrap_err().to_string(); + assert!(err.contains("server.max_concurrent_per_repo must be positive")); + } + #[test] fn example_configurations_parse_and_validate() { Config::parse(include_str!("../../../walgit.example.toml")).unwrap();