Skip to content

Commit ba3d488

Browse files
author
Kartik Raj
committed
Add get refresh promise options
1 parent a1eec92 commit ba3d488

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

src/client/apiTypes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Event, Uri } from 'vscode';
55
import { Resource } from './common/types';
66
import { IDataViewerDataProvider, IJupyterUriProvider } from './jupyter/types';
77
import { EnvPathType, PythonEnvKind } from './pythonEnvironments/base/info';
8-
import { ProgressNotificationEvent } from './pythonEnvironments/base/locator';
8+
import { GetRefreshEnvironmentsOptions, ProgressNotificationEvent } from './pythonEnvironments/base/locator';
99

1010
/*
1111
* Do not introduce any breaking changes to this API.
@@ -212,7 +212,7 @@ export interface IProposedExtensionAPI {
212212
* Returns a promise for the ongoing refresh. Returns `undefined` if there are no active
213213
* refreshes going on.
214214
*/
215-
getRefreshPromise(): Promise<void> | undefined;
215+
getRefreshPromise(options?: GetRefreshEnvironmentsOptions): Promise<void> | undefined;
216216
/**
217217
* This event is triggered when the known environment list changes, like when a environment
218218
* is found, existing environment is removed, or some details changed on an environment.

src/client/pythonEnvironments/base/locator.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ interface IResolver {
186186

187187
export interface IResolvingLocator<I = PythonEnvInfo> extends IResolver, ILocator<I> {}
188188

189+
export interface GetRefreshEnvironmentsOptions {
190+
stage?: ProgressReportStage;
191+
}
192+
189193
export interface IDiscoveryAPI {
190194
/**
191195
* Fires with details of the current discovery progress, i.e when it starts, finishes or any other relevant stage.

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { normalizePath } from '../../../common/externalDependencies';
99
import { PythonEnvInfo } from '../../info';
1010
import {
1111
IDiscoveryAPI,
12-
IPythonEnvsIterator,
1312
IResolvingLocator,
1413
isProgressEvent,
1514
ProgressNotificationEvent,
@@ -100,14 +99,12 @@ export class EnvsCollectionService extends PythonEnvsWatcher<PythonEnvCollection
10099

101100
private startRefresh(query: (PythonLocatorQuery & { clearCache?: boolean }) | undefined): Promise<void> {
102101
const deferred = createDeferred<void>();
103-
104102
if (query?.clearCache) {
105103
this.cache.clearCache();
106104
}
107105
// Ensure we set this before we trigger the promise to accurately track when a refresh has started.
108106
this.refreshPromises.set(query, deferred.promise);
109-
const iterator = this.locator.iterEnvs(query);
110-
const promise = this.addEnvsToCacheFromIterator(iterator);
107+
const promise = this.addEnvsToCacheForQuery(query);
111108
return promise
112109
.then(async () => {
113110
// Ensure we delete this before we resolve the promise to accurately track when a refresh finishes.
@@ -117,7 +114,8 @@ export class EnvsCollectionService extends PythonEnvsWatcher<PythonEnvCollection
117114
.catch((ex) => deferred.reject(ex));
118115
}
119116

120-
private async addEnvsToCacheFromIterator(iterator: IPythonEnvsIterator) {
117+
private async addEnvsToCacheForQuery(query: PythonLocatorQuery | undefined) {
118+
const iterator = this.locator.iterEnvs(query);
121119
const seen: PythonEnvInfo[] = [];
122120
const state = {
123121
done: false,
@@ -128,12 +126,12 @@ export class EnvsCollectionService extends PythonEnvsWatcher<PythonEnvCollection
128126
if (iterator.onUpdated !== undefined) {
129127
const listener = iterator.onUpdated(async (event) => {
130128
if (isProgressEvent(event)) {
131-
if (event.stage !== ProgressReportStage.discoveryFinished) {
129+
if (event.stage === ProgressReportStage.discoveryFinished) {
130+
state.done = true;
131+
listener.dispose();
132+
} else if (event.stage === ProgressReportStage.allPathsDiscovered && !query) {
132133
this.progress.fire(event);
133-
return;
134134
}
135-
state.done = true;
136-
listener.dispose();
137135
} else {
138136
state.pending += 1;
139137
this.cache.updateEnv(seen[event.index], event.update);

0 commit comments

Comments
 (0)