diff --git a/src/env/node/git/sub-providers/stash.ts b/src/env/node/git/sub-providers/stash.ts index 749c39c0d4ac2..cd639c08a2864 100644 --- a/src/env/node/git/sub-providers/stash.ts +++ b/src/env/node/git/sub-providers/stash.ts @@ -111,40 +111,38 @@ export class StashGitSubProvider implements GitStashSubProvider { ); const ancestors = result.stdout.trim().split('\n'); - if (ancestors?.length && (ancestors.length !== 1 || ancestors[0])) { - const reachableCommits = new Set(ancestors); - - if (reachableCommits.size) { - const reachableStashes = new Set(); + const reachableCommits = + ancestors?.length && (ancestors.length !== 1 || ancestors[0]) ? new Set(ancestors) : undefined; + if (reachableCommits?.size) { + const reachableStashes = new Set(); + + // First pass: mark directly reachable stashes + for (const [sha, s] of stash.stashes) { + if (s.parents.some(p => p === options.reachableFrom || reachableCommits.has(p))) { + reachableStashes.add(sha); + } + } - // First pass: mark directly reachable stashes + // Second pass: mark stashes that build upon reachable stashes + let changed; + do { + changed = false; for (const [sha, s] of stash.stashes) { - if (s.parents.some(p => p === options.reachableFrom || reachableCommits.has(p))) { + if (!reachableStashes.has(sha) && s.parents.some(p => reachableStashes.has(p))) { reachableStashes.add(sha); + changed = true; } } + } while (changed); - // Second pass: mark stashes that build upon reachable stashes - let changed; - do { - changed = false; - for (const [sha, s] of stash.stashes) { - if (!reachableStashes.has(sha) && s.parents.some(p => reachableStashes.has(p))) { - reachableStashes.add(sha); - changed = true; - } - } - } while (changed); - - // Remove unreachable stashes - for (const [sha] of stash.stashes) { - if (!reachableStashes.has(sha)) { - stash.stashes.delete(sha); - } + // Remove unreachable stashes + for (const [sha] of stash.stashes) { + if (!reachableStashes.has(sha)) { + stash.stashes.delete(sha); } - } else { - stash.stashes.clear(); } + } else { + stash.stashes.clear(); } }