Skip to main content

Mountain/IPC/WindServiceHandlers/Git/
HandleCancel.rs

1#![allow(non_snake_case)]
2
3//! `localGit:cancel(operationId)` - SIGTERM (Unix) or
4//! `taskkill /T /F` (Windows) the pid stashed for
5//! `OperationId`. Silent no-op when the id is unknown so
6//! late-arriving cancels for already-finished operations
7//! don't spam errors.
8
9use serde_json::Value;
10
11use crate::{IPC::WindServiceHandlers::Git::Shared::TakePid, dev_log};
12
13pub async fn HandleCancel(Arguments:Vec<Value>) -> Result<Value, String> {
14	let OperationId = Arguments.first().and_then(Value::as_str).unwrap_or("").to_string();
15
16	if let Some(Pid) = TakePid(&OperationId) {
17		dev_log!("git", "[Git] cancel op={} pid={}", OperationId, Pid);
18
19		#[cfg(unix)]
20		{
21			let _ = std::process::Command::new("kill").args(["-TERM", &Pid.to_string()]).output();
22		}
23
24		#[cfg(windows)]
25		{
26			let _ = std::process::Command::new("taskkill")
27				.args(["/PID", &Pid.to_string(), "/T", "/F"])
28				.output();
29		}
30	} else {
31		dev_log!("git", "[Git] cancel op={} pid=<unknown>", OperationId);
32	}
33
34	Ok(Value::Null)
35}