diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index edbb70a79..692c0d58b 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -258,6 +258,7 @@ fn list_session_files( handle: tauri::AppHandle, project_id: &str, session_id: &str, + paths: Option>, ) -> Result, Error> { let path_resolver = handle.path_resolver(); let storage = storage::Storage::from_path_resolver(&path_resolver); @@ -272,7 +273,7 @@ fn list_session_files( } })?; - let files = repo.files(session_id).map_err(|e| { + let files = repo.files(session_id, paths).map_err(|e| { log::error!("{}", e); Error { message: "Failed to list files".to_string(), diff --git a/src-tauri/src/repositories/repositories.rs b/src-tauri/src/repositories/repositories.rs index 014b8c015..d4ec765d4 100644 --- a/src-tauri/src/repositories/repositories.rs +++ b/src-tauri/src/repositories/repositories.rs @@ -47,12 +47,17 @@ impl Repository { sessions::list(&self.git_repository, &self.project, &self.reference()?) } - pub fn files(&self, session_id: &str) -> Result> { + pub fn files( + &self, + session_id: &str, + files: Option>, + ) -> Result> { sessions::list_files( &self.git_repository, &self.project, &self.reference()?, session_id, + files, ) } diff --git a/src-tauri/src/sessions/sessions.rs b/src-tauri/src/sessions/sessions.rs index 81f4689a0..1cc39d486 100644 --- a/src-tauri/src/sessions/sessions.rs +++ b/src-tauri/src/sessions/sessions.rs @@ -414,6 +414,7 @@ pub fn list_files( project: &projects::Project, reference: &git2::Reference, session_id: &str, + paths: Option>, ) -> Result> { let commit = if is_current_session_id(project, session_id)? { let head_commit = reference.peel_to_commit()?; @@ -465,14 +466,16 @@ pub fn list_files( let blob = entry.to_object(repo).and_then(|obj| obj.peel_to_blob()); let content = blob.map(|blob| blob.content().to_vec()); + let relpath = entry_path.strip_prefix("wd").unwrap(); + + if let Some(paths) = paths.as_ref() { + if !paths.contains(&relpath.to_str().unwrap()) { + return git2::TreeWalkResult::Ok; + } + } + files.insert( - entry_path - .strip_prefix("wd") - .unwrap() - .to_owned() - .to_str() - .unwrap() - .to_owned(), + relpath.to_owned().to_str().unwrap().to_owned(), String::from_utf8(content.unwrap_or_default()).unwrap_or_default(), ); diff --git a/src-tauri/src/sessions/sessions_tests.rs b/src-tauri/src/sessions/sessions_tests.rs index e1e216306..59c6d3dd0 100644 --- a/src-tauri/src/sessions/sessions_tests.rs +++ b/src-tauri/src/sessions/sessions_tests.rs @@ -219,7 +219,7 @@ fn test_list_files_from_first_presistent_session() { std::fs::write(file_path.clone(), "one").unwrap(); let reference = repo.find_reference(&project.refname()).unwrap(); - let files = super::sessions::list_files(&repo, &project, &reference, &first.id); + let files = super::sessions::list_files(&repo, &project, &reference, &first.id, None); assert!(files.is_ok()); let files = files.unwrap(); assert_eq!(files.len(), 1); @@ -248,7 +248,7 @@ fn test_list_files_from_second_current_session() { let second = second.unwrap(); let reference = repo.find_reference(&project.refname()).unwrap(); - let files = super::sessions::list_files(&repo, &project, &reference, &second.id); + let files = super::sessions::list_files(&repo, &project, &reference, &second.id, None); assert!(files.is_ok()); let files = files.unwrap(); assert_eq!(files.len(), 1); @@ -281,7 +281,7 @@ fn test_list_files_from_second_presistent_session() { std::fs::write(file_path.clone(), "two").unwrap(); let reference = repo.find_reference(&project.refname()).unwrap(); - let files = super::sessions::list_files(&repo, &project, &reference, &second.id); + let files = super::sessions::list_files(&repo, &project, &reference, &second.id, None); assert!(files.is_ok()); let files = files.unwrap(); assert_eq!(files.len(), 1);