gitdataai/lib/service/git/diff.rs
2026-05-30 01:38:40 +08:00

129 lines
4.2 KiB
Rust

use git::rpc::{proto as p, proto::diff_service_client::DiffServiceClient};
use session::Session;
use crate::{AppService, error::AppError, git::rpc_err};
impl AppService {
pub async fn git_diff_stats(
&self,
ctx: &Session,
wk_name: &str,
repo_name: &str,
old_oid: String,
new_oid: String,
options: Option<p::DiffOptions>,
) -> Result<p::DiffStatsResponse, AppError> {
let repo = self.git_require_member(ctx, wk_name, repo_name).await?;
let mut client = DiffServiceClient::new(self.git.clone());
let resp = client
.diff_stats(tonic::Request::new(p::DiffStatsRequest {
repo_id: repo.id.to_string(),
old_oid: Some(p::ObjectId { value: old_oid }),
new_oid: Some(p::ObjectId { value: new_oid }),
options,
}))
.await
.map_err(rpc_err)?
.into_inner();
Ok(resp)
}
pub async fn git_diff_patch(
&self,
ctx: &Session,
wk_name: &str,
repo_name: &str,
old_oid: String,
new_oid: String,
options: Option<p::DiffOptions>,
) -> Result<p::DiffPatchResponse, AppError> {
let repo = self.git_require_member(ctx, wk_name, repo_name).await?;
let mut client = DiffServiceClient::new(self.git.clone());
let resp = client
.diff_patch(tonic::Request::new(p::DiffPatchRequest {
repo_id: repo.id.to_string(),
old_oid: Some(p::ObjectId { value: old_oid }),
new_oid: Some(p::ObjectId { value: new_oid }),
options,
}))
.await
.map_err(rpc_err)?
.into_inner();
Ok(resp)
}
pub async fn git_diff_patch_side_by_side(
&self,
ctx: &Session,
wk_name: &str,
repo_name: &str,
old_oid: String,
new_oid: String,
options: Option<p::DiffOptions>,
) -> Result<p::DiffPatchSideBySideResponse, AppError> {
let repo = self.git_require_member(ctx, wk_name, repo_name).await?;
let mut client = DiffServiceClient::new(self.git.clone());
let resp = client
.diff_patch_side_by_side(tonic::Request::new(
p::DiffPatchSideBySideRequest {
repo_id: repo.id.to_string(),
old_oid: Some(p::ObjectId { value: old_oid }),
new_oid: Some(p::ObjectId { value: new_oid }),
options,
},
))
.await
.map_err(rpc_err)?
.into_inner();
Ok(resp)
}
pub async fn git_diff_tree_to_tree(
&self,
ctx: &Session,
wk_name: &str,
repo_name: &str,
old_tree: String,
new_tree: String,
options: Option<p::DiffOptions>,
) -> Result<p::DiffTreeToTreeResponse, AppError> {
let repo = self.git_require_member(ctx, wk_name, repo_name).await?;
let mut client = DiffServiceClient::new(self.git.clone());
let resp = client
.diff_tree_to_tree(tonic::Request::new(p::DiffTreeToTreeRequest {
repo_id: repo.id.to_string(),
old_tree: Some(p::ObjectId { value: old_tree }),
new_tree: Some(p::ObjectId { value: new_tree }),
options,
}))
.await
.map_err(rpc_err)?
.into_inner();
Ok(resp)
}
pub async fn git_diff_index_to_tree(
&self,
ctx: &Session,
wk_name: &str,
repo_name: &str,
tree_oid: String,
options: Option<p::DiffOptions>,
) -> Result<p::DiffIndexToTreeResponse, AppError> {
let repo = self.git_require_member(ctx, wk_name, repo_name).await?;
let mut client = DiffServiceClient::new(self.git.clone());
let resp = client
.diff_index_to_tree(tonic::Request::new(
p::DiffIndexToTreeRequest {
repo_id: repo.id.to_string(),
tree_oid: Some(p::ObjectId { value: tree_oid }),
options,
},
))
.await
.map_err(rpc_err)?
.into_inner();
Ok(resp)
}
}