diff options
| author | JJ Liebig <jonathan.liebig@gmail.com> | 2026-08-12 03:14:59 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-12 04:14:59 +0300 |
| commit | 5600197f00e871764465d4e3d9ba5e6aa6fd9547 (patch) | |
| tree | 26fd7ddb5f784f39aa4bec98735c316331cef211 /src/app | |
| parent | 3f752a72fdd073d875cf941e3049f9860e30d841 (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.rs | 18 |
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] |
