@@ -9,7 +9,6 @@ import { normalizePath } from '../../../common/externalDependencies';
9
9
import { PythonEnvInfo } from '../../info' ;
10
10
import {
11
11
IDiscoveryAPI ,
12
- IPythonEnvsIterator ,
13
12
IResolvingLocator ,
14
13
isProgressEvent ,
15
14
ProgressNotificationEvent ,
@@ -100,14 +99,12 @@ export class EnvsCollectionService extends PythonEnvsWatcher<PythonEnvCollection
100
99
101
100
private startRefresh ( query : ( PythonLocatorQuery & { clearCache ?: boolean } ) | undefined ) : Promise < void > {
102
101
const deferred = createDeferred < void > ( ) ;
103
-
104
102
if ( query ?. clearCache ) {
105
103
this . cache . clearCache ( ) ;
106
104
}
107
105
// Ensure we set this before we trigger the promise to accurately track when a refresh has started.
108
106
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 ) ;
111
108
return promise
112
109
. then ( async ( ) => {
113
110
// 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
117
114
. catch ( ( ex ) => deferred . reject ( ex ) ) ;
118
115
}
119
116
120
- private async addEnvsToCacheFromIterator ( iterator : IPythonEnvsIterator ) {
117
+ private async addEnvsToCacheForQuery ( query : PythonLocatorQuery | undefined ) {
118
+ const iterator = this . locator . iterEnvs ( query ) ;
121
119
const seen : PythonEnvInfo [ ] = [ ] ;
122
120
const state = {
123
121
done : false ,
@@ -128,12 +126,12 @@ export class EnvsCollectionService extends PythonEnvsWatcher<PythonEnvCollection
128
126
if ( iterator . onUpdated !== undefined ) {
129
127
const listener = iterator . onUpdated ( async ( event ) => {
130
128
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 ) {
132
133
this . progress . fire ( event ) ;
133
- return ;
134
134
}
135
- state . done = true ;
136
- listener . dispose ( ) ;
137
135
} else {
138
136
state . pending += 1 ;
139
137
this . cache . updateEnv ( seen [ event . index ] , event . update ) ;
0 commit comments