summaryrefslogtreecommitdiff
path: root/crates/vcs_data/src/data/local/file_status.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/vcs_data/src/data/local/file_status.rs')
-rw-r--r--crates/vcs_data/src/data/local/file_status.rs29
1 files changed, 21 insertions, 8 deletions
diff --git a/crates/vcs_data/src/data/local/file_status.rs b/crates/vcs_data/src/data/local/file_status.rs
index b8b5952..7841237 100644
--- a/crates/vcs_data/src/data/local/file_status.rs
+++ b/crates/vcs_data/src/data/local/file_status.rs
@@ -79,13 +79,14 @@ impl<'a> AnalyzeResult<'a> {
}
if entry.file_type().is_file()
- && let Ok(relative_path) = entry.path().strip_prefix(local_path) {
- let format = format_path(relative_path.to_path_buf());
- let Ok(format) = format else {
- continue;
- };
- paths.insert(format);
- }
+ && let Ok(relative_path) = entry.path().strip_prefix(local_path)
+ {
+ let format = format_path(relative_path.to_path_buf());
+ let Ok(format) = format else {
+ continue;
+ };
+ paths.insert(format);
+ }
}
paths
@@ -174,7 +175,16 @@ impl<'a> AnalyzeResult<'a> {
.iter()
.filter_map(|f| {
local_sheet.mapping_data(f).ok().map(|mapping_data| {
- (mapping_data.hash_when_updated.clone(), (*f).clone())
+ (
+ // Using the most recently recorded Hash can more accurately identify moved items,
+ // but if it doesn't exist, fall back to the initially recorded Hash
+ mapping_data
+ .last_modifiy_check_hash
+ .as_ref()
+ .cloned()
+ .unwrap_or(mapping_data.hash_when_updated.clone()),
+ (*f).clone(),
+ )
})
})
.collect(),
@@ -270,6 +280,9 @@ impl<'a> AnalyzeResult<'a> {
mapping_data.last_modifiy_check_time = modified_time;
mapping_data.last_modifiy_check_result = false;
}
+
+ // Record latest hash
+ mapping_data.last_modifiy_check_hash = Some(hash_calc.hash)
}
// Persist the local sheet data