From 3b28fc65f5de7c6ad69bee48b2d1f52dd9b30972 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 29 Jun 2026 02:16:43 +0900 Subject: fix(advisory): pass IO as shared handle to Auditor::audit Auditor::audit took io as &mut dyn IOInterface, forcing the audit and installer post-audit call sites to hold a borrow_mut() on the shared IO RefCell for the whole call. During advisory fetching the repositories write to their own clones of the same handle, so the borrow_mut() collided with their borrow() and panicked with 'RefCell already mutably borrowed' on 'audit --locked'. Take the Rc> handle instead so writes borrow briefly and never overlap. Un-ignore the locked-audit regression test that this unblocks. Co-Authored-By: Claude Opus 4.8 (1M context) --- crates/shirabe/tests/command/audit_command_test.rs | 1 - 1 file changed, 1 deletion(-) (limited to 'crates/shirabe/tests/command/audit_command_test.rs') diff --git a/crates/shirabe/tests/command/audit_command_test.rs b/crates/shirabe/tests/command/audit_command_test.rs index bccc7c2..a1658ba 100644 --- a/crates/shirabe/tests/command/audit_command_test.rs +++ b/crates/shirabe/tests/command/audit_command_test.rs @@ -60,7 +60,6 @@ fn test_error_auditing_lock_file_when_it_is_missing() { #[test] #[serial] -#[ignore = "'RefCell already mutably borrowed' panic at crates/shirabe/src/io/io_interface.rs:215 (write_error3) in the locked-audit advisory-fetch path; not in target file"] fn test_audit_package_with_no_security_vulnerabilities() { let tear_down = init_temp_composer(None, None, None, true); let packages: Vec = vec![get_package("dummy/pkg", "1.0.0")]; -- cgit v1.3.1