Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0d910c6

Browse files
authored
Ignore cache when querying for interpreters during auto-selection (microsoft#16734)
* Ignore cache when getting envs for autoselection * Don't call autoSelectInterpreter twice
1 parent ae979b1 commit 0d910c6

File tree

4 files changed

+47
-42
lines changed

4 files changed

+47
-42
lines changed

src/client/activation/activationManager.ts

-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ export class ExtensionActivationManager implements IExtensionActivationManager {
6161
Promise.all(this.singleActivationServices.map((item) => item.activate())),
6262
this.activateWorkspace(this.activeResourceService.getActiveResource()),
6363
]);
64-
await this.autoSelection.autoSelectInterpreter(undefined);
6564
}
6665

6766
@traceDecorators.error('Failed to activate a workspace')

src/client/interpreter/autoSelection/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ export class InterpreterAutoSelectionService implements IInterpreterAutoSelectio
260260
* As such, we can sort interpreters based on what it returns.
261261
*/
262262
private async autoselectInterpreterWithLocators(resource: Resource): Promise<void> {
263-
const interpreters = await this.interpreterService.getInterpreters(resource);
263+
const interpreters = await this.interpreterService.getInterpreters(resource, { ignoreCache: true });
264264
const workspaceUri = this.interpreterHelper.getActiveWorkspaceUri(resource);
265265

266266
// When auto-selecting an intepreter for a workspace, we either want to return a local one

src/test/activation/activationManager.unit.test.ts

-9
Original file line numberDiff line numberDiff line change
@@ -456,25 +456,16 @@ suite('Activation Manager', () => {
456456
.setup((s) => s.activate())
457457
.returns(() => Promise.resolve())
458458
.verifiable(typemoq.Times.once());
459-
autoSelection
460-
.setup((a) => a.autoSelectInterpreter(undefined))
461-
.returns(() => Promise.resolve())
462-
.verifiable(typemoq.Times.once());
463459
when(activeResourceService.getActiveResource()).thenReturn(resource);
464460
await managerTest.activate();
465461
assert.ok(initialize.calledOnce);
466462
assert.ok(activateWorkspace.calledOnce);
467463
singleActivationService.verifyAll();
468-
autoSelection.verifyAll();
469464
});
470465

471466
test('Throws error if execution fails', async () => {
472467
singleActivationService
473468
.setup((s) => s.activate())
474-
.returns(() => Promise.resolve())
475-
.verifiable(typemoq.Times.once());
476-
autoSelection
477-
.setup((a) => a.autoSelectInterpreter(undefined))
478469
.returns(() => Promise.reject(new Error('Kaboom')))
479470
.verifiable(typemoq.Times.once());
480471
when(activeResourceService.getActiveResource()).thenReturn(resource);

src/test/interpreters/autoSelection/index.unit.test.ts

+46-31
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ import {
3030
IInterpreterAutoSelectionProxyService,
3131
} from '../../../client/interpreter/autoSelection/types';
3232
import { EnvironmentTypeComparer } from '../../../client/interpreter/configuration/environmentTypeComparer';
33-
import { IInterpreterHelper, IInterpreterService, WorkspacePythonPath } from '../../../client/interpreter/contracts';
33+
import {
34+
GetInterpreterOptions,
35+
IInterpreterHelper,
36+
IInterpreterService,
37+
WorkspacePythonPath,
38+
} from '../../../client/interpreter/contracts';
3439
import { InterpreterHelper } from '../../../client/interpreter/helpers';
3540
import { InterpreterService } from '../../../client/interpreter/interpreterService';
3641
import { EnvironmentType, PythonEnvironment } from '../../../client/pythonEnvironments/info';
@@ -203,25 +208,30 @@ suite('Interpreters - Auto Selection', () => {
203208
envPath: path.join(workspacePath, '.venv'),
204209
version: { major: 3, minor: 10, patch: 0 },
205210
} as PythonEnvironment;
206-
207-
when(interpreterService.getInterpreters(resource)).thenResolve([
208-
{
209-
envType: EnvironmentType.Conda,
210-
envPath: path.join('some', 'conda', 'env'),
211-
version: { major: 3, minor: 7, patch: 2 },
212-
} as PythonEnvironment,
213-
{
214-
envType: EnvironmentType.System,
215-
envPath: path.join('/', 'usr', 'bin'),
216-
version: { major: 3, minor: 9, patch: 1 },
217-
} as PythonEnvironment,
218-
localEnv,
219-
]);
211+
let options: GetInterpreterOptions = {};
212+
213+
when(interpreterService.getInterpreters(resource, anything())).thenCall((_, opts) => {
214+
options = opts;
215+
return Promise.resolve([
216+
{
217+
envType: EnvironmentType.Conda,
218+
envPath: path.join('some', 'conda', 'env'),
219+
version: { major: 3, minor: 7, patch: 2 },
220+
} as PythonEnvironment,
221+
{
222+
envType: EnvironmentType.System,
223+
envPath: path.join('/', 'usr', 'bin'),
224+
version: { major: 3, minor: 9, patch: 1 },
225+
} as PythonEnvironment,
226+
localEnv,
227+
]);
228+
});
220229

221230
await autoSelectionService.autoSelectInterpreter(resource);
222231

223232
expect(eventFired).to.deep.equal(true, 'event not fired');
224-
verify(interpreterService.getInterpreters(resource)).once();
233+
expect(options).to.deep.equal({ ignoreCache: true }, 'getInterpreters options are different');
234+
verify(interpreterService.getInterpreters(resource, anything())).once();
225235
verify(state.updateValue(localEnv)).once();
226236
});
227237

@@ -231,25 +241,30 @@ suite('Interpreters - Auto Selection', () => {
231241
envPath: path.join('/', 'usr', 'bin'),
232242
version: { major: 3, minor: 9, patch: 1 },
233243
} as PythonEnvironment;
234-
235-
when(interpreterService.getInterpreters(resource)).thenResolve([
236-
{
237-
envType: EnvironmentType.Conda,
238-
envPath: path.join('some', 'conda', 'env'),
239-
version: { major: 3, minor: 7, patch: 2 },
240-
} as PythonEnvironment,
241-
systemEnv,
242-
{
243-
envType: EnvironmentType.Pipenv,
244-
envPath: path.join('some', 'pipenv', 'env'),
245-
version: { major: 3, minor: 10, patch: 0 },
246-
} as PythonEnvironment,
247-
]);
244+
let options: GetInterpreterOptions = {};
245+
246+
when(interpreterService.getInterpreters(resource, anything())).thenCall((_, opts) => {
247+
options = opts;
248+
return Promise.resolve([
249+
{
250+
envType: EnvironmentType.Conda,
251+
envPath: path.join('some', 'conda', 'env'),
252+
version: { major: 3, minor: 7, patch: 2 },
253+
} as PythonEnvironment,
254+
systemEnv,
255+
{
256+
envType: EnvironmentType.Pipenv,
257+
envPath: path.join('some', 'pipenv', 'env'),
258+
version: { major: 3, minor: 10, patch: 0 },
259+
} as PythonEnvironment,
260+
]);
261+
});
248262

249263
await autoSelectionService.autoSelectInterpreter(resource);
250264

251265
expect(eventFired).to.deep.equal(true, 'event not fired');
252-
verify(interpreterService.getInterpreters(resource)).once();
266+
expect(options).to.deep.equal({ ignoreCache: true }, 'getInterpreters options are different');
267+
verify(interpreterService.getInterpreters(resource, anything())).once();
253268
verify(state.updateValue(systemEnv)).once();
254269
});
255270
});

0 commit comments

Comments
 (0)