aboutsummaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
authorJJ Liebig <jonathan.liebig@gmail.com>2026-08-12 03:14:59 +0200
committerGitHub <noreply@github.com>2026-08-12 04:14:59 +0300
commit5600197f00e871764465d4e3d9ba5e6aa6fd9547 (patch)
tree26fd7ddb5f784f39aa4bec98735c316331cef211 /src/app
parent3f752a72fdd073d875cf941e3049f9860e30d841 (diff)
perf: avoid repeated Git config reads (#2688)
refs #2643 Co-authored-by: Can Celik <ogulcancelik@gmail.com>
Diffstat (limited to 'src/app')
-rw-r--r--src/app/git_refresh.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/app/git_refresh.rs b/src/app/git_refresh.rs
index a868a0ed..348b1556 100644
--- a/src/app/git_refresh.rs
+++ b/src/app/git_refresh.rs
@@ -141,6 +141,7 @@ fn deduplicate_git_refresh_items(
let mut jobs = Vec::<WorkspaceGitRefreshJob>::new();
for item in items {
+ let reconcile = item.cache_key_hint.is_none();
let cache_key = item.cache_key_hint.unwrap_or_else(|| {
crate::workspace::git_status_cache_key(&item.resolved_identity_cwd)
.unwrap_or_else(|| item.resolved_identity_cwd.clone())
@@ -150,11 +151,12 @@ fn deduplicate_git_refresh_items(
resolved_identity_cwd: item.resolved_identity_cwd,
};
if let Some(&index) = indexes.get(&cache_key) {
+ jobs[index].cached = jobs[index].cached.take().filter(|_| !reconcile);
jobs[index].targets.push(target);
continue;
}
- let cached = cache.get(&cache_key).cloned();
+ let cached = cache.get(&cache_key).filter(|_| !reconcile).cloned();
indexes.insert(cache_key.clone(), jobs.len());
jobs.push(WorkspaceGitRefreshJob {
cache_key,
@@ -299,6 +301,20 @@ mod tests {
assert_eq!(items.len(), 1);
assert_eq!(items[0].cache_key_hint, None);
+ let cache_key = items[0].resolved_identity_cwd.clone();
+ let cached = GitStatusCacheEntry {
+ fingerprint: None,
+ retry_after: None,
+ snapshot: crate::workspace::WorkspaceGitStatusSnapshot {
+ auto_label: "stale".into(),
+ branch: None,
+ ahead_behind: None,
+ space: None,
+ },
+ };
+ let jobs = deduplicate_git_refresh_items(items, &HashMap::from([(cache_key, cached)]));
+ assert_eq!(jobs.len(), 1);
+ assert_eq!(jobs[0].cached, None);
}
#[test]