From 75eb389783dc324fadf30269a118a0db964acc66 Mon Sep 17 00:00:00 2001 From: AidCheng Date: Sun, 14 Sep 2025 14:53:55 +0100 Subject: [PATCH 1/2] [mono]UPDATE: separete mui tree and diff files Signed-off-by: AidCheng --- ceres/src/api_service/mono_api_service.rs | 43 +++++++++++++++++++---- mono/src/api/mr/mod.rs | 1 - mono/src/api/mr/mr_router.rs | 27 +++++++++++--- 3 files changed, 59 insertions(+), 12 deletions(-) diff --git a/ceres/src/api_service/mono_api_service.rs b/ceres/src/api_service/mono_api_service.rs index b7b1a3ed4..a194fa43c 100644 --- a/ceres/src/api_service/mono_api_service.rs +++ b/ceres/src/api_service/mono_api_service.rs @@ -433,7 +433,7 @@ impl MonoApiService { &self, mr_link: &str, page: Pagination, - ) -> Result<(Vec, Vec, u64), GitError> { + ) -> Result<(Vec, u64), GitError> { let per_page = page.per_page as usize; let page_id = page.page as usize; @@ -456,10 +456,6 @@ impl MonoApiService { let sorted_changed_files = self .mr_files_list(old_blobs.clone(), new_blobs.clone()) .await?; - let file_paths: Vec = sorted_changed_files - .iter() - .map(|f| f.path().to_string_lossy().to_string()) - .collect(); // ensure page_id is within bounds let start = (page_id.saturating_sub(1)) * per_page; @@ -487,7 +483,7 @@ impl MonoApiService { // calculate total pages let total = sorted_changed_files.len().div_ceil(per_page); - Ok((diff_output, file_paths, total as u64)) + Ok((diff_output, total as u64)) } async fn get_diff_by_blobs( @@ -582,6 +578,41 @@ impl MonoApiService { } } + pub async fn get_sorted_changed_file_list( + &self, + mr_link: &str + ) -> Result, MegaError> { + let mr = self + .storage + .mr_storage() + .get_mr(mr_link) + .await + .unwrap() + .ok_or_else( + || { MegaError::with_message("Error getting ")} + )?; + + let old_files = self + .get_commit_blobs( + &mr.from_hash.clone() + ).await?; + let new_files = self + .get_commit_blobs( + &mr.to_hash.clone() + ).await?; + + // calculate pages + let sorted_changed_files = self + .mr_files_list(old_files.clone(), new_files.clone()) + .await?; + let file_paths: Vec = sorted_changed_files + .iter() + .map(|f| f.path().to_string_lossy().to_string()) + .collect(); + + Ok(file_paths) + } + pub async fn mr_files_list( &self, old_files: Vec<(PathBuf, SHA1)>, diff --git a/mono/src/api/mr/mod.rs b/mono/src/api/mr/mod.rs index 06a8da4a1..4cc783fb6 100644 --- a/mono/src/api/mr/mod.rs +++ b/mono/src/api/mr/mod.rs @@ -56,7 +56,6 @@ impl From for MRDetailRes { #[derive(Serialize, ToSchema)] pub struct FilesChangedPage { - pub mui_trees: Vec, pub page: CommonPage, } diff --git a/mono/src/api/mr/mr_router.rs b/mono/src/api/mr/mr_router.rs index 0d2993aab..91ea9fce3 100644 --- a/mono/src/api/mr/mr_router.rs +++ b/mono/src/api/mr/mr_router.rs @@ -41,6 +41,7 @@ pub fn routers() -> OpenApiRouter { .routes(routes!(merge_no_auth)) .routes(routes!(close_mr)) .routes(routes!(reopen_mr)) + .routes(routes!(mr_mui_tree)) .routes(routes!(mr_files_changed_by_page)) .routes(routes!(mr_files_list)) .routes(routes!(save_comment)) @@ -50,7 +51,6 @@ pub fn routers() -> OpenApiRouter { .routes(routes!(add_reviewers)) .routes(routes!(remove_reviewers)) .routes(routes!(list_reviewers)) - .routes(routes!(change_reviewer_state)) .routes(routes!(change_review_resolve_state)), ) @@ -267,6 +267,26 @@ async fn mr_detail( Ok(Json(CommonResult::success(Some(mr_details)))) } +#[utoipa::path( + get, + params( + ("link", description = "MR link"), + ), + path = "/{link}/mui-tree", + responses( + (status = 200, body = CommonResult>, content_type = "application/json") + ), + tag = MR_TAG +)] +async fn mr_mui_tree( + Path(link): Path, + state: State, +) -> Result>>, ApiError> { + let files = state.monorepo().get_sorted_changed_file_list(&link).await?; + let mui_trees = build_forest(files); + Ok(Json(CommonResult::success(Some(mui_trees)))) +} + /// Get Merge Request file changed list in Pagination #[utoipa::path( post, @@ -285,14 +305,11 @@ async fn mr_files_changed_by_page( state: State, Json(json): Json>, ) -> Result>, ApiError> { - let (items, changed_files_path, total) = state + let (items, total) = state .monorepo() .paged_content_diff(&link, json.pagination) .await?; - - let mui_trees = build_forest(changed_files_path); let res = CommonResult::success(Some(FilesChangedPage { - mui_trees, page: CommonPage { total, items }, })); Ok(Json(res)) From 6985fb71ac462c44d1330a6efc7e6b36f8dd340f Mon Sep 17 00:00:00 2001 From: AidCheng Date: Sun, 14 Sep 2025 14:56:58 +0100 Subject: [PATCH 2/2] [mono]UPDATE: fmt Signed-off-by: AidCheng --- ceres/src/api_service/mono_api_service.rs | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/ceres/src/api_service/mono_api_service.rs b/ceres/src/api_service/mono_api_service.rs index a194fa43c..a3fef9e19 100644 --- a/ceres/src/api_service/mono_api_service.rs +++ b/ceres/src/api_service/mono_api_service.rs @@ -580,7 +580,7 @@ impl MonoApiService { pub async fn get_sorted_changed_file_list( &self, - mr_link: &str + mr_link: &str, ) -> Result, MegaError> { let mr = self .storage @@ -588,18 +588,10 @@ impl MonoApiService { .get_mr(mr_link) .await .unwrap() - .ok_or_else( - || { MegaError::with_message("Error getting ")} - )?; - - let old_files = self - .get_commit_blobs( - &mr.from_hash.clone() - ).await?; - let new_files = self - .get_commit_blobs( - &mr.to_hash.clone() - ).await?; + .ok_or_else(|| MegaError::with_message("Error getting "))?; + + let old_files = self.get_commit_blobs(&mr.from_hash.clone()).await?; + let new_files = self.get_commit_blobs(&mr.to_hash.clone()).await?; // calculate pages let sorted_changed_files = self @@ -609,7 +601,7 @@ impl MonoApiService { .iter() .map(|f| f.path().to_string_lossy().to_string()) .collect(); - + Ok(file_paths) }