Skip to content

Commit 57eaac1

Browse files
author
Kartik Raj
authored
Correctly indicate when a refresh has finished (#17336)
1 parent f4c8588 commit 57eaac1

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
([#17285](https://github.com/Microsoft/vscode-python/issues/17285))
2121
1. Ensure we trigger discovery for the first time as part of extension activation.
2222
([#17303](https://github.com/Microsoft/vscode-python/issues/17303))
23+
1. Correctly indicate when interpreter refresh has finished.
24+
([#17335](https://github.com/Microsoft/vscode-python/issues/17335))
2325
1. Missing location info for `async def` functions.
2426
([#17309](https://github.com/Microsoft/vscode-python/issues/17309))
2527
1. For CI ensure `tensorboard` is installed in python 3 environments only.

src/client/pythonEnvironments/base/locators/composite/envsCollectionService.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,20 +84,25 @@ export class EnvsCollectionService extends PythonEnvsWatcher<PythonEnvCollection
8484
const stopWatch = new StopWatch();
8585
this.refreshStarted.fire();
8686
const iterator = this.locator.iterEnvs(query);
87-
const refreshPromiseForQuery = this.addEnvsToCacheFromIterator(iterator);
88-
this.refreshPromises.set(query, refreshPromiseForQuery);
89-
return refreshPromiseForQuery.then(async () => {
90-
this.refreshPromises.delete(query);
91-
sendTelemetryEvent(EventName.PYTHON_INTERPRETER_DISCOVERY, stopWatch.elapsedTime, {
92-
interpreters: this.cache.getAllEnvs().length,
93-
});
94-
});
87+
const deferred = createDeferred<void>();
88+
// Ensure we set this before we trigger the promise to correctly indicate when a refresh has started.
89+
this.refreshPromises.set(query, deferred.promise);
90+
const promise = this.addEnvsToCacheFromIterator(iterator);
91+
return promise
92+
.then(async () => {
93+
deferred.resolve();
94+
this.refreshPromises.delete(query);
95+
sendTelemetryEvent(EventName.PYTHON_INTERPRETER_DISCOVERY, stopWatch.elapsedTime, {
96+
interpreters: this.cache.getAllEnvs().length,
97+
});
98+
})
99+
.catch((ex) => deferred.reject(ex));
95100
}
96101

97102
private async addEnvsToCacheFromIterator(iterator: IPythonEnvsIterator) {
98103
const seen: PythonEnvInfo[] = [];
99104
const state = {
100-
done: true,
105+
done: false,
101106
pending: 0,
102107
};
103108
const updatesDone = createDeferred<void>();

0 commit comments

Comments
 (0)