|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
#nullable disable
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Configurer;
using Microsoft.Extensions.EnvironmentAbstractions;
namespace Microsoft.DotNet.Cli.ShellShim;
internal static class EnvironmentPathFactory
{
public static IEnvironmentPath CreateEnvironmentPath(
bool isDotnetBeingInvokedFromNativeInstaller = false,
IEnvironmentProvider environmentProvider = null)
{
environmentProvider ??= new EnvironmentProvider();
IEnvironmentPath environmentPath = new DoNothingEnvironmentPath();
if (OperatingSystem.IsWindows())
{
if (isDotnetBeingInvokedFromNativeInstaller)
{
// On Windows MSI will in charge of appending ToolShimPath
environmentPath = new DoNothingEnvironmentPath();
}
else
{
environmentPath = new WindowsEnvironmentPath(
CliFolderPathCalculator.ToolsShimPath,
CliFolderPathCalculator.WindowsNonExpandedToolsShimPath,
environmentProvider,
new WindowsRegistryEnvironmentPathEditor(),
Reporter.Output);
}
}
else if (OperatingSystem.IsLinux() && isDotnetBeingInvokedFromNativeInstaller)
{
environmentPath = new LinuxEnvironmentPath(
CliFolderPathCalculator.ToolsShimPathInUnix,
Reporter.Output,
environmentProvider,
new FileWrapper());
}
else if (OperatingSystem.IsMacOS() && isDotnetBeingInvokedFromNativeInstaller)
{
environmentPath = new OsxBashEnvironmentPath(
executablePath: CliFolderPathCalculator.ToolsShimPathInUnix,
reporter: Reporter.Output,
environmentProvider: environmentProvider,
fileSystem: new FileWrapper());
}
return environmentPath;
}
public static IEnvironmentPathInstruction CreateEnvironmentPathInstruction(
IEnvironmentProvider environmentProvider = null)
{
environmentProvider ??= new EnvironmentProvider();
if (OperatingSystem.IsMacOS() && ZshDetector.IsZshTheUsersShell(environmentProvider))
{
return new OsxZshEnvironmentPathInstruction(
executablePath: CliFolderPathCalculator.ToolsShimPathInUnix,
reporter: Reporter.Output,
environmentProvider: environmentProvider);
}
if (OperatingSystem.IsWindows())
{
return new WindowsEnvironmentPath(
CliFolderPathCalculator.ToolsShimPath,
nonExpandedPackageExecutablePath: CliFolderPathCalculator.WindowsNonExpandedToolsShimPath,
expandedEnvironmentReader: environmentProvider,
environmentPathEditor: new WindowsRegistryEnvironmentPathEditor(),
reporter: Reporter.Output);
}
return CreateEnvironmentPath(true, environmentProvider);
}
}
|