mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-09-18 06:34:54 +08:00
This commit is contained in:
@@ -3036,8 +3036,17 @@ struct CommandReport<T> {
|
||||
}
|
||||
|
||||
fn run_sync_command(options: &CliOptions, command_name: &'static str) -> anyhow::Result<()> {
|
||||
if let Some(rpc_method) = sync_command_rpc_method(options, command_name)
|
||||
.filter(|_| daemon_rpc_available(&options.state_dir))
|
||||
run_sync_command_with_rpc(options, command_name, daemon_rpc_available, daemon_rpc_call)
|
||||
}
|
||||
|
||||
fn run_sync_command_with_rpc(
|
||||
options: &CliOptions,
|
||||
command_name: &'static str,
|
||||
rpc_available: impl Fn(&Path) -> bool,
|
||||
rpc_call: impl Fn(&Path, &str, Option<serde_json::Value>) -> anyhow::Result<serde_json::Value>,
|
||||
) -> anyhow::Result<()> {
|
||||
if let Some(rpc_method) =
|
||||
sync_command_rpc_method(options, command_name).filter(|_| rpc_available(&options.state_dir))
|
||||
{
|
||||
let _control_lock = DaemonControlLock::acquire(&options.state_dir)?;
|
||||
let params = if rpc_method == RPC_METHOD_REFRESH {
|
||||
@@ -3045,7 +3054,7 @@ fn run_sync_command(options: &CliOptions, command_name: &'static str) -> anyhow:
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let report = daemon_rpc_call(&options.state_dir, rpc_method, params)?;
|
||||
let report = rpc_call(&options.state_dir, rpc_method, params)?;
|
||||
print_json_value(options.output_format, &report)?;
|
||||
return Ok(());
|
||||
}
|
||||
@@ -7264,6 +7273,44 @@ mod tests {
|
||||
assert_eq!(sync_command_rpc_method(&options, "repair"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn repair_command_uses_rpc_when_default_daemon_shape() {
|
||||
let temp = tempfile::TempDir::new().unwrap();
|
||||
let state_dir = temp.path().join("state");
|
||||
fs::create_dir_all(&state_dir).unwrap();
|
||||
let seen = Arc::new(Mutex::new(Vec::<(String, Option<serde_json::Value>)>::new()));
|
||||
let seen_calls = Arc::clone(&seen);
|
||||
|
||||
let options = parse(&[
|
||||
"bat",
|
||||
"repair",
|
||||
"--json",
|
||||
"--state-dir",
|
||||
state_dir.to_str().unwrap(),
|
||||
])
|
||||
.unwrap();
|
||||
run_sync_command_with_rpc(
|
||||
&options,
|
||||
"repair",
|
||||
|_| true,
|
||||
move |_state_dir, method, params| {
|
||||
seen_calls
|
||||
.lock()
|
||||
.unwrap()
|
||||
.push((method.to_string(), params.clone()));
|
||||
Ok(serde_json::json!({
|
||||
"task_id": "task-fake-repair",
|
||||
"kind": "resource.repair",
|
||||
}))
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
let seen = seen.lock().unwrap();
|
||||
assert_eq!(seen.len(), 1);
|
||||
assert_eq!(seen[0].0, RPC_METHOD_RESOURCE_REPAIR);
|
||||
assert_eq!(seen[0].1, None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn explicit_no_quiet_up_to_date_overrides_watch_default() {
|
||||
let options = parse(&[
|
||||
|
||||
Reference in New Issue
Block a user