Skip to content

Commit 8689c41

Browse files
authored
Merge pull request #5041 from JoeRobich/fix-package-check
Filter packages to install by framework before attempting install
2 parents 752a56a + 1be0a7f commit 8689c41

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

src/InstallRuntimeDependencies.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,19 @@ import { EventStream } from './EventStream';
99
import { getRuntimeDependenciesPackages } from './tools/RuntimeDependencyPackageUtils';
1010
import { getAbsolutePathPackagesToInstall } from './packageManager/getAbsolutePathPackagesToInstall';
1111
import IInstallDependencies from './packageManager/IInstallDependencies';
12+
import { AbsolutePathPackage } from './packageManager/AbsolutePathPackage';
1213

13-
export async function installRuntimeDependencies(packageJSON: any, extensionPath: string, installDependencies: IInstallDependencies, eventStream: EventStream, platformInfo: PlatformInformation): Promise<boolean> {
14-
let runTimeDependencies = getRuntimeDependenciesPackages(packageJSON);
15-
let packagesToInstall = await getAbsolutePathPackagesToInstall(runTimeDependencies, platformInfo, extensionPath);
16-
if (packagesToInstall && packagesToInstall.length > 0) {
14+
export async function installRuntimeDependencies(packageJSON: any, extensionPath: string, installDependencies: IInstallDependencies, eventStream: EventStream, platformInfo: PlatformInformation, useFramework: boolean): Promise<boolean> {
15+
const runTimeDependencies = getRuntimeDependenciesPackages(packageJSON);
16+
const packagesToInstall = await getAbsolutePathPackagesToInstall(runTimeDependencies, platformInfo, extensionPath);
17+
const filteredPackages = filterOmniSharpPackage(packagesToInstall, useFramework);
18+
19+
if (filteredPackages && filteredPackages.length > 0) {
1720
eventStream.post(new PackageInstallation("C# dependencies"));
1821
// Display platform information and RID
1922
eventStream.post(new LogPlatformInfo(platformInfo));
20-
if (await installDependencies(packagesToInstall)) {
23+
24+
if (await installDependencies(filteredPackages)) {
2125
eventStream.post(new InstallationSuccess());
2226
}
2327
else {
@@ -29,3 +33,8 @@ export async function installRuntimeDependencies(packageJSON: any, extensionPath
2933
return true;
3034
}
3135

36+
function filterOmniSharpPackage(packages: AbsolutePathPackage[], useFramework: boolean) {
37+
// Since we will have more than one OmniSharp package defined for some platforms, we need
38+
// to filter out the one that doesn't match which dotnet runtime is being used.
39+
return packages.filter(pkg => pkg.id != "OmniSharp" || pkg.isFramework === useFramework);
40+
}

src/main.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<CSharp
160160
let networkSettingsProvider = vscodeNetworkSettingsProvider(vscode);
161161
const useFramework = optionProvider.GetLatestOptions().useModernNet !== true;
162162
let installDependencies: IInstallDependencies = async (dependencies: AbsolutePathPackage[]) => downloadAndInstallPackages(dependencies, networkSettingsProvider, eventStream, isValidDownload, useFramework);
163-
let runtimeDependenciesExist = await ensureRuntimeDependencies(extension, eventStream, platformInfo, installDependencies);
163+
let runtimeDependenciesExist = await ensureRuntimeDependencies(extension, eventStream, platformInfo, installDependencies, useFramework);
164164

165165
// activate language services
166166
let langServicePromise = OmniSharp.activate(context, extension.packageJSON, platformInfo, networkSettingsProvider, eventStream, optionProvider, extension.extensionPath);
@@ -228,8 +228,8 @@ function isSupportedPlatform(platform: PlatformInformation): boolean {
228228
return false;
229229
}
230230

231-
async function ensureRuntimeDependencies(extension: vscode.Extension<CSharpExtensionExports>, eventStream: EventStream, platformInfo: PlatformInformation, installDependencies: IInstallDependencies): Promise<boolean> {
232-
return installRuntimeDependencies(extension.packageJSON, extension.extensionPath, installDependencies, eventStream, platformInfo);
231+
async function ensureRuntimeDependencies(extension: vscode.Extension<CSharpExtensionExports>, eventStream: EventStream, platformInfo: PlatformInformation, installDependencies: IInstallDependencies, useFramework: boolean): Promise<boolean> {
232+
return installRuntimeDependencies(extension.packageJSON, extension.extensionPath, installDependencies, eventStream, platformInfo, useFramework);
233233
}
234234

235235
async function initializeDotnetPath() {

test/unitTests/InstallRuntimeDependencies.test.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ suite(`${installRuntimeDependencies.name}`, () => {
2525
let eventStream: EventStream;
2626
let eventBus: TestEventBus;
2727
let platformInfo = new PlatformInformation("platform1", "architecture1");
28+
const useFramework = true;
2829

2930
setup(() => {
3031
eventStream = new EventStream();
@@ -40,7 +41,7 @@ suite(`${installRuntimeDependencies.name}`, () => {
4041
});
4142

4243
test("True is returned", async () => {
43-
let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo);
44+
let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo, useFramework);
4445
expect(installed).to.be.true;
4546
});
4647

@@ -49,7 +50,7 @@ suite(`${installRuntimeDependencies.name}`, () => {
4950
runtimeDependencies: {}
5051
};
5152

52-
await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo);
53+
await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo, useFramework);
5354
expect(eventBus.getEvents()).to.be.empty;
5455
});
5556
});
@@ -78,15 +79,15 @@ suite(`${installRuntimeDependencies.name}`, () => {
7879
return Promise.resolve(true);
7980
};
8081

81-
let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo);
82+
let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo, useFramework);
8283
expect(installed).to.be.true;
8384
expect(inputPackage).to.have.length(1);
8485
expect(inputPackage[0]).to.be.deep.equal(AbsolutePathPackage.getAbsolutePathPackage(packageToInstall, extensionPath));
8586
});
8687

8788
test("Returns false when installDependencies returns false", async () => {
8889
installDependencies = async () => Promise.resolve(false);
89-
let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo);
90+
let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo, useFramework);
9091
expect(installed).to.be.false;
9192
});
9293
});

0 commit comments

Comments
 (0)