2ae9196
ZhenYi
feat(lib/git): add HTTP handler tree with routes and errors across analysis, archives, blobs, branches, commits, conflicts, content, diffs, hooks, lfs, logs, maintenance, packs, patches, pipelines, refs, remotes, repos, signatures, submodules, tags, trees
2ae9196
use axum::Json;
use axum::extract::{Path, State};
use export::rest::AppResponseData;
use session::Session;
use crate::errors::{ApiError, GitApiError};
use crate::handler::require_writer;
use crate::service::GitService;
use crate::service::hooks::ScriptOutputDto;
#[derive(Debug, Clone, serde::Deserialize)]
pub struct HookScriptPath {
pub space_name: String,
pub repo_name: String,
pub script: String,
}
#[derive(Debug, Clone, serde::Deserialize)]
pub struct HookExecBody {
#[serde(default)]
pub args: Vec<String>,
}
pub async fn execute_script(
State(service): State<GitService>,
session: Session,
Path(path): Path<HookScriptPath>,
Json(body): Json<HookExecBody>,
) -> Result<AppResponseData<ScriptOutputDto>, ApiError> {
require_writer(&service, &session, path.space_name.clone(), path.repo_name.clone()).await?;
let out = service
.hook_execute_script(path.space_name, path.repo_name, path.script, body.args)
.await
.map_err(GitApiError::from)?;
Ok(AppResponseData::ok(out))
}