public NetSdkManagedInstaller(IReporter reporter, SdkFeatureBand sdkFeatureBand, IWorkloadResolver workloadResolver, string userProfileDir, INuGetPackageDownloader nugetPackageDownloader = null, string dotnetDir = null, string tempDirPath = null, VerbosityOptions verbosity = VerbosityOptions.normal, PackageSourceLocation packageSourceLocation = null, RestoreActionConfig restoreActionConfig = null) { _userProfileDir = userProfileDir; _dotnetDir = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath); _tempPackagesDir = new DirectoryPath(tempDirPath ?? Path.GetTempPath()); ILogger logger = verbosity.VerbosityIsDetailedOrDiagnostic() ? new NuGetConsoleLogger() : new NullLogger(); _restoreActionConfig = restoreActionConfig; _nugetPackageDownloader = nugetPackageDownloader ?? new NuGetPackageDownloader(_tempPackagesDir, filePermissionSetter: null, new FirstPartyNuGetPackageSigningVerifier(_tempPackagesDir), logger, restoreActionConfig: _restoreActionConfig); bool userLocal = WorkloadFileBasedInstall.IsUserLocal(_dotnetDir, sdkFeatureBand.ToString()); _workloadMetadataDir = Path.Combine(userLocal ? _userProfileDir : _dotnetDir, "metadata", "workloads"); _reporter = reporter; _sdkFeatureBand = sdkFeatureBand; _workloadResolver = workloadResolver; _installationRecordRepository = new NetSdkManagedInstallationRecordRepository(_workloadMetadataDir); _packageSourceLocation = packageSourceLocation; }
// begin-snippet: argument_models_notify_with_model public void Notify( NotificationArgs notificationArgs, DryRunOptions dryRunOptions, VerbosityOptions verbosityOptions) { // send notification }
public static LoggerVerbosity ToLoggerVerbosity(this VerbosityOptions verbosityOptions) { LoggerVerbosity verbosity = Build.Framework.LoggerVerbosity.Normal; switch (verbosityOptions) { case VerbosityOptions.d: case VerbosityOptions.detailed: verbosity = Build.Framework.LoggerVerbosity.Detailed; break; case VerbosityOptions.diag: case VerbosityOptions.diagnostic: verbosity = Build.Framework.LoggerVerbosity.Diagnostic; break; case VerbosityOptions.m: case VerbosityOptions.minimal: verbosity = Build.Framework.LoggerVerbosity.Minimal; break; case VerbosityOptions.n: case VerbosityOptions.normal: verbosity = Build.Framework.LoggerVerbosity.Normal; break; case VerbosityOptions.q: case VerbosityOptions.quiet: verbosity = Build.Framework.LoggerVerbosity.Quiet; break; } return(verbosity); }
public static IInstaller GetWorkloadInstaller( IReporter reporter, SdkFeatureBand sdkFeatureBand, IWorkloadResolver workloadResolver, VerbosityOptions verbosity, INuGetPackageDownloader nugetPackageDownloader = null, string dotnetDir = null, PackageSourceLocation packageSourceLocation = null) { var installType = GetWorkloadInstallType(sdkFeatureBand, string.IsNullOrWhiteSpace(dotnetDir) ? Path.GetDirectoryName(Environment.ProcessPath) : dotnetDir); if (installType == InstallType.Msi) { if (!OperatingSystem.IsWindows()) { throw new InvalidOperationException(LocalizableStrings.OSDoesNotSupportMsi); } return(new NetSdkMsiInstaller()); } if (!CanWriteToDotnetRoot(dotnetDir)) { throw new GracefulException(LocalizableStrings.InadequatePermissions); } return(new NetSdkManagedInstaller(reporter, sdkFeatureBand, workloadResolver, nugetPackageDownloader, verbosity: verbosity, dotnetDir: dotnetDir, packageSourceLocation: packageSourceLocation)); }
public static bool VerbosityIsDetailedOrDiagnostic(this VerbosityOptions verbosity) { return(verbosity.Equals(VerbosityOptions.diag) || verbosity.Equals(VerbosityOptions.diagnostic) || verbosity.Equals(VerbosityOptions.d) || verbosity.Equals(VerbosityOptions.detailed)); }
/// <summary> /// Creates a new <see cref="NetSdkMsiInstallerClient"/> instance. If the current host process is not elevated, /// the elevated server process will also be started by running an additional command. /// </summary> /// <param name="nugetPackageDownloader"></param> /// <param name="verbosity"></param> /// <param name="packageSourceLocation"></param> /// <returns></returns> public static NetSdkMsiInstallerClient Create( SdkFeatureBand sdkFeatureBand, IWorkloadResolver workloadResolver, INuGetPackageDownloader nugetPackageDownloader = null, VerbosityOptions verbosity = VerbosityOptions.normal, PackageSourceLocation packageSourceLocation = null, IReporter reporter = null, string tempDirPath = null, RestoreActionConfig restoreActionConfig = null) { TimestampedFileLogger logger = new(Path.Combine(Path.GetTempPath(), $"Microsoft.NET.Workload_{DateTime.Now:yyyyMMdd_HHmmss}.log")); InstallClientElevationContext elevationContext = new(logger); if (nugetPackageDownloader == null) { DirectoryPath tempPackagesDir = new(string.IsNullOrWhiteSpace(tempDirPath) ? Path.GetTempPath() : tempDirPath); nugetPackageDownloader = new NuGetPackageDownloader(tempPackagesDir, filePermissionSetter: null, new FirstPartyNuGetPackageSigningVerifier(tempPackagesDir), new NullLogger(), restoreActionConfig: restoreActionConfig); } return(new NetSdkMsiInstallerClient(elevationContext, logger, workloadResolver, sdkFeatureBand, nugetPackageDownloader, verbosity, packageSourceLocation, reporter)); }
public NetSdkMsiInstallerClient(InstallElevationContextBase elevationContext, ISetupLogger logger, IWorkloadResolver workloadResolver, SdkFeatureBand sdkFeatureBand, INuGetPackageDownloader nugetPackageDownloader = null, VerbosityOptions verbosity = VerbosityOptions.normal, PackageSourceLocation packageSourceLocation = null, IReporter reporter = null) : base(elevationContext, logger, reporter) { _packageSourceLocation = packageSourceLocation; _nugetPackageDownloader = nugetPackageDownloader; _sdkFeatureBand = sdkFeatureBand; _workloadResolver = workloadResolver; _dependent = $"{DependentPrefix},{sdkFeatureBand},{HostArchitecture}"; Log?.LogMessage($"Executing: {CurrentProcess.GetCommandLine()}, PID: {CurrentProcess.Id}, PPID: {ParentProcess.Id}"); Log?.LogMessage($"{nameof(IsElevated)}: {IsElevated}"); Log?.LogMessage($"{nameof(Is64BitProcess)}: {Is64BitProcess}"); Log?.LogMessage($"{nameof(RebootPending)}: {RebootPending}"); Log?.LogMessage($"{nameof(ProcessorArchitecture)}: {ProcessorArchitecture}"); Log?.LogMessage($"{nameof(HostArchitecture)}: {HostArchitecture}"); Log?.LogMessage($"{nameof(SdkDirectory)}: {SdkDirectory}"); Log?.LogMessage($"SDK feature band: {_sdkFeatureBand}"); if (IsElevated) { // Turn off automatic updates. We don't want MU to potentially patch the SDK // and it also reduces the risk of hitting ERROR_INSTALL_ALREADY_RUNNING. UpdateAgent.Stop(); } }
public WorkloadUpdateCommand( ParseResult parseResult, IReporter reporter = null, IWorkloadResolver workloadResolver = null, IInstaller workloadInstaller = null, INuGetPackageDownloader nugetPackageDownloader = null, IWorkloadManifestUpdater workloadManifestUpdater = null, string dotnetDir = null, string userHome = null, string version = null) : base(parseResult) { _printDownloadLinkOnly = parseResult.ValueForOption <bool>(WorkloadInstallCommandParser.PrintDownloadLinkOnlyOption); _fromCacheOption = parseResult.ValueForOption <string>(WorkloadInstallCommandParser.FromCacheOption); _reporter = reporter ?? Reporter.Output; _includePreviews = parseResult.ValueForOption <bool>(WorkloadUpdateCommandParser.IncludePreviewsOption); _verbosity = parseResult.ValueForOption <VerbosityOptions>(WorkloadUpdateCommandParser.VerbosityOption); _sdkVersion = new ReleaseVersion(version ?? (string.IsNullOrWhiteSpace(parseResult.ValueForOption <string>(WorkloadUpdateCommandParser.SdkVersionOption)) ? Product.Version : parseResult.ValueForOption <string>(WorkloadUpdateCommandParser.SdkVersionOption))); var dotnetPath = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath); _workloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(dotnetPath, _sdkVersion.ToString()); _workloadResolver = workloadResolver ?? WorkloadResolver.Create(_workloadManifestProvider, dotnetPath, _sdkVersion.ToString()); var sdkFeatureBand = new SdkFeatureBand(_sdkVersion); _workloadInstaller = workloadInstaller ?? WorkloadInstallerFactory.GetWorkloadInstaller(_reporter, sdkFeatureBand, _workloadResolver, _verbosity, nugetPackageDownloader, dotnetDir); userHome = userHome ?? CliFolderPathCalculator.DotnetHomePath; var tempPackagesDir = new DirectoryPath(Path.Combine(userHome, ".dotnet", "sdk-advertising-temp")); _nugetPackageDownloader = nugetPackageDownloader ?? new NuGetPackageDownloader(tempPackagesDir, filePermissionSetter: null, new NullLogger()); _workloadManifestUpdater = workloadManifestUpdater ?? new WorkloadManifestUpdater(_reporter, _workloadManifestProvider, _nugetPackageDownloader, userHome); }
// begin-snippet: argument_models_notify_with_interceptor public Task <int> Interceptor(InterceptorExecutionDelegate next, CommandContext ctx, DryRunOptions dryRunOptions, VerbosityOptions verbosityOptions) { IEnumerable <IArgumentModel> models = ctx.InvocationPipeline.All .SelectMany(s => s.Invocation.FlattenedArgumentModels); return(next()); }
public WorkloadInstallCommand( ParseResult parseResult, IReporter reporter = null, IWorkloadResolver workloadResolver = null, IInstaller workloadInstaller = null, INuGetPackageDownloader nugetPackageDownloader = null, IWorkloadManifestUpdater workloadManifestUpdater = null, string dotnetDir = null, string userHome = null, string tempDirPath = null, string version = null, IReadOnlyCollection <string> workloadIds = null) : base(parseResult) { _reporter = reporter ?? Reporter.Output; _skipManifestUpdate = parseResult.ValueForOption <bool>(WorkloadInstallCommandParser.SkipManifestUpdateOption); _includePreviews = parseResult.ValueForOption <bool>(WorkloadInstallCommandParser.IncludePreviewOption); _printDownloadLinkOnly = parseResult.ValueForOption <bool>(WorkloadInstallCommandParser.PrintDownloadLinkOnlyOption); _fromCacheOption = parseResult.ValueForOption <string>(WorkloadInstallCommandParser.FromCacheOption); _downloadToCacheOption = parseResult.ValueForOption <string>(WorkloadInstallCommandParser.DownloadToCacheOption); _workloadIds = workloadIds ?? parseResult.ValueForArgument <IEnumerable <string> >(WorkloadInstallCommandParser.WorkloadIdArgument).ToList().AsReadOnly(); _verbosity = parseResult.ValueForOption <VerbosityOptions>(WorkloadInstallCommandParser.VerbosityOption); _dotnetPath = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath); _sdkVersion = WorkloadOptionsExtensions.GetValidatedSdkVersion(parseResult.ValueForOption <string>(WorkloadInstallCommandParser.VersionOption), version, _dotnetPath); _sdkFeatureBand = new SdkFeatureBand(string.Join('.', _sdkVersion.Major, _sdkVersion.Minor, _sdkVersion.SdkFeatureBand)); _tempDirPath = tempDirPath ?? (string.IsNullOrWhiteSpace(parseResult.ValueForOption <string>(WorkloadInstallCommandParser.TempDirOption)) ? Path.GetTempPath() : parseResult.ValueForOption <string>(WorkloadInstallCommandParser.TempDirOption)); var configOption = parseResult.ValueForOption <string>(WorkloadInstallCommandParser.ConfigOption); var sourceOption = parseResult.ValueForOption <string[]>(WorkloadInstallCommandParser.SourceOption); _packageSourceLocation = string.IsNullOrEmpty(configOption) && (sourceOption == null || !sourceOption.Any()) ? null : new PackageSourceLocation(string.IsNullOrEmpty(configOption) ? null : new FilePath(configOption), sourceFeedOverrides: sourceOption); var sdkWorkloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(_dotnetPath, _sdkVersion.ToString()); _workloadResolver = workloadResolver ?? WorkloadResolver.Create(sdkWorkloadManifestProvider, _dotnetPath, _sdkVersion.ToString()); var sdkFeatureBand = new SdkFeatureBand(_sdkVersion); var tempPackagesDir = new DirectoryPath(Path.Combine(_tempDirPath, "dotnet-sdk-advertising-temp")); var restoreActionConfig = _parseResult.ToRestoreActionConfig(); _nugetPackageDownloader = nugetPackageDownloader ?? new NuGetPackageDownloader(tempPackagesDir, filePermissionSetter: null, new FirstPartyNuGetPackageSigningVerifier(tempPackagesDir, _verbosity.VerbosityIsDetailedOrDiagnostic() ? new NuGetConsoleLogger() : new NullLogger()), _verbosity.VerbosityIsDetailedOrDiagnostic() ? new NuGetConsoleLogger() : new NullLogger(), restoreActionConfig: restoreActionConfig); _workloadInstaller = workloadInstaller ?? WorkloadInstallerFactory.GetWorkloadInstaller(_reporter, sdkFeatureBand, _workloadResolver, _verbosity, _nugetPackageDownloader, _dotnetPath, _tempDirPath, _packageSourceLocation, restoreActionConfig, elevationRequired: !_printDownloadLinkOnly && string.IsNullOrWhiteSpace(_downloadToCacheOption)); _userHome = userHome ?? CliFolderPathCalculator.DotnetHomePath; _workloadManifestUpdater = workloadManifestUpdater ?? new WorkloadManifestUpdater(_reporter, _workloadResolver, _nugetPackageDownloader, _userHome, _tempDirPath, _workloadInstaller.GetWorkloadInstallationRecordRepository(), _packageSourceLocation); ValidateWorkloadIdsInput(); }
public static IInstaller GetWorkloadInstaller( IReporter reporter, SdkFeatureBand sdkFeatureBand, IWorkloadResolver workloadResolver, VerbosityOptions verbosity, INuGetPackageDownloader nugetPackageDownloader = null, string dotnetDir = null) { return(new NetSdkManagedInstaller(reporter, sdkFeatureBand, workloadResolver, nugetPackageDownloader, verbosity: verbosity, dotnetDir: dotnetDir)); }
public WorkloadUpdateCommand( ParseResult parseResult, IReporter reporter = null, IWorkloadResolver workloadResolver = null, IInstaller workloadInstaller = null, INuGetPackageDownloader nugetPackageDownloader = null, IWorkloadManifestUpdater workloadManifestUpdater = null, string dotnetDir = null, string userProfileDir = null, string tempDirPath = null, string version = null) : base(parseResult) { _printDownloadLinkOnly = parseResult.GetValueForOption(WorkloadUpdateCommandParser.PrintDownloadLinkOnlyOption); _fromCacheOption = parseResult.GetValueForOption(WorkloadUpdateCommandParser.FromCacheOption); _reporter = reporter ?? Reporter.Output; _includePreviews = parseResult.GetValueForOption(WorkloadUpdateCommandParser.IncludePreviewsOption); _fromPreviousSdk = parseResult.GetValueForOption(WorkloadUpdateCommandParser.FromPreviousSdkOption); _adManifestOnlyOption = parseResult.GetValueForOption(WorkloadUpdateCommandParser.AdManifestOnlyOption); _downloadToCacheOption = parseResult.GetValueForOption(WorkloadUpdateCommandParser.DownloadToCacheOption); _verbosity = parseResult.GetValueForOption(WorkloadUpdateCommandParser.VerbosityOption); _dotnetPath = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath); _userProfileDir = userProfileDir ?? CliFolderPathCalculator.DotnetUserProfileFolderPath; _sdkVersion = WorkloadOptionsExtensions.GetValidatedSdkVersion(parseResult.GetValueForOption(WorkloadUpdateCommandParser.VersionOption), version, _dotnetPath, _userProfileDir); _tempDirPath = tempDirPath ?? (string.IsNullOrWhiteSpace(parseResult.GetValueForOption(WorkloadUpdateCommandParser.TempDirOption)) ? Path.GetTempPath() : parseResult.GetValueForOption(WorkloadUpdateCommandParser.TempDirOption)); _printRollbackDefinitionOnly = parseResult.GetValueForOption(WorkloadUpdateCommandParser.PrintRollbackOption); _fromRollbackDefinition = parseResult.GetValueForOption(WorkloadUpdateCommandParser.FromRollbackFileOption); var configOption = parseResult.GetValueForOption(WorkloadUpdateCommandParser.ConfigOption); var sourceOption = parseResult.GetValueForOption <string[]>(WorkloadUpdateCommandParser.SourceOption); _packageSourceLocation = string.IsNullOrEmpty(configOption) && (sourceOption == null || !sourceOption.Any()) ? null : new PackageSourceLocation(string.IsNullOrEmpty(configOption) ? null : new FilePath(configOption), sourceFeedOverrides: sourceOption); var workloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(_dotnetPath, _sdkVersion.ToString(), _userProfileDir); _workloadResolver = workloadResolver ?? WorkloadResolver.Create(workloadManifestProvider, _dotnetPath, _sdkVersion.ToString(), _userProfileDir); var sdkFeatureBand = new SdkFeatureBand(_sdkVersion); var restoreActionConfig = _parseResult.ToRestoreActionConfig(); _workloadInstaller = workloadInstaller ?? WorkloadInstallerFactory.GetWorkloadInstaller(_reporter, sdkFeatureBand, _workloadResolver, _verbosity, _userProfileDir, nugetPackageDownloader, dotnetDir, _tempDirPath, packageSourceLocation: _packageSourceLocation, restoreActionConfig, elevationRequired: !_printDownloadLinkOnly && string.IsNullOrWhiteSpace(_downloadToCacheOption)); var tempPackagesDir = new DirectoryPath(Path.Combine(_tempDirPath, "dotnet-sdk-advertising-temp")); _nugetPackageDownloader = nugetPackageDownloader ?? new NuGetPackageDownloader(tempPackagesDir, filePermissionSetter: null, new FirstPartyNuGetPackageSigningVerifier(tempPackagesDir, _verbosity.VerbosityIsDetailedOrDiagnostic() ? new NuGetConsoleLogger() : new NullLogger()), _verbosity.VerbosityIsDetailedOrDiagnostic() ? new NuGetConsoleLogger() : new NullLogger(), restoreActionConfig: restoreActionConfig); _workloadManifestUpdater = workloadManifestUpdater ?? new WorkloadManifestUpdater(_reporter, _workloadResolver, _nugetPackageDownloader, _userProfileDir, _tempDirPath, _workloadInstaller.GetWorkloadInstallationRecordRepository(), _packageSourceLocation); }
public WorkloadListCommand( ParseResult result, IReporter reporter = null, IWorkloadInstallationRecordRepository workloadRecordRepo = null, string currentSdkVersion = null, string dotnetDir = null, string userProfileDir = null, string tempDirPath = null, INuGetPackageDownloader nugetPackageDownloader = null, IWorkloadManifestUpdater workloadManifestUpdater = null, IWorkloadResolver workloadResolver = null ) : base(result) { _reporter = reporter ?? Reporter.Output; _machineReadableOption = result.GetValueForOption(WorkloadListCommandParser.MachineReadableOption); _verbosity = result.GetValueForOption(WorkloadListCommandParser.VerbosityOption); _dotnetPath = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath); ReleaseVersion currentSdkReleaseVersion = new(currentSdkVersion ?? Product.Version); _currentSdkFeatureBand = new SdkFeatureBand(currentSdkReleaseVersion); _includePreviews = result.GetValueForOption(WorkloadListCommandParser.IncludePreviewsOption); _tempDirPath = tempDirPath ?? (string.IsNullOrWhiteSpace( result.GetValueForOption(WorkloadListCommandParser.TempDirOption)) ? Path.GetTempPath() : result.GetValueForOption(WorkloadListCommandParser.TempDirOption)); _targetSdkVersion = result.GetValueForOption(WorkloadListCommandParser.VersionOption); _userProfileDir = userProfileDir ?? CliFolderPathCalculator.DotnetUserProfileFolderPath; var workloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(_dotnetPath, string.IsNullOrWhiteSpace(_targetSdkVersion) ? currentSdkReleaseVersion.ToString() : _targetSdkVersion, _userProfileDir); DirectoryPath tempPackagesDir = new(Path.Combine(_userProfileDir, "sdk-advertising-temp")); NullLogger nullLogger = new NullLogger(); _nugetPackageDownloader = nugetPackageDownloader ?? new NuGetPackageDownloader(tempPackagesDir, null, new FirstPartyNuGetPackageSigningVerifier(tempPackagesDir, nullLogger), verboseLogger: nullLogger, restoreActionConfig: _parseResult.ToRestoreActionConfig()); workloadResolver ??= WorkloadResolver.Create(workloadManifestProvider, _dotnetPath, currentSdkReleaseVersion.ToString(), _userProfileDir); _workloadRecordRepo = workloadRecordRepo ?? WorkloadInstallerFactory.GetWorkloadInstaller(reporter, _currentSdkFeatureBand, workloadResolver, _verbosity, _userProfileDir, elevationRequired: false).GetWorkloadInstallationRecordRepository(); _workloadManifestUpdater = workloadManifestUpdater ?? new WorkloadManifestUpdater(_reporter, workloadResolver, _nugetPackageDownloader, _userProfileDir, _tempDirPath, _workloadRecordRepo); }
public WorkloadSearchCommand( ParseResult result, IReporter reporter = null, IWorkloadResolver workloadResolver = null, string version = null) : base(result) { _reporter = reporter ?? Reporter.Output; _verbosity = result.ValueForOption <VerbosityOptions>(WorkloadSearchCommandParser.VerbosityOption); _workloadIdStub = result.ValueForArgument <string>(WorkloadSearchCommandParser.WorkloadIdStubArgument); _sdkVersion = new ReleaseVersion(version ?? Product.Version) ?? new ReleaseVersion(result.ValueForOption <string>(WorkloadSearchCommandParser.VersionOption)); var dotnetPath = Path.GetDirectoryName(Environment.ProcessPath); var workloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(dotnetPath, _sdkVersion.ToString()); _workloadResolver = workloadResolver ?? WorkloadResolver.Create(workloadManifestProvider, dotnetPath, _sdkVersion.ToString()); }
public WorkloadInstallCommand( ParseResult parseResult, IReporter reporter = null, IWorkloadResolver workloadResolver = null, IInstaller workloadInstaller = null, INuGetPackageDownloader nugetPackageDownloader = null, IWorkloadManifestUpdater workloadManifestUpdater = null, string dotnetDir = null, string userHome = null, string tempDirPath = null, string version = null) : base(parseResult) { _reporter = reporter ?? Reporter.Output; _skipManifestUpdate = parseResult.ValueForOption <bool>(WorkloadInstallCommandParser.SkipManifestUpdateOption); _includePreviews = parseResult.ValueForOption <bool>(WorkloadInstallCommandParser.IncludePreviewOption); _printDownloadLinkOnly = parseResult.ValueForOption <bool>(WorkloadInstallCommandParser.PrintDownloadLinkOnlyOption); _fromCacheOption = parseResult.ValueForOption <string>(WorkloadInstallCommandParser.FromCacheOption); _downloadToCacheOption = parseResult.ValueForOption <string>(WorkloadInstallCommandParser.DownloadToCacheOption); _workloadIds = parseResult.ValueForArgument <IEnumerable <string> >(WorkloadInstallCommandParser.WorkloadIdArgument).ToList().AsReadOnly(); _verbosity = parseResult.ValueForOption <VerbosityOptions>(WorkloadInstallCommandParser.VerbosityOption); _sdkVersion = string.IsNullOrEmpty(parseResult.ValueForOption <string>(WorkloadInstallCommandParser.VersionOption)) ? new ReleaseVersion(version ?? Product.Version) : new ReleaseVersion(parseResult.ValueForOption <string>(WorkloadInstallCommandParser.VersionOption)); _tempDirPath = tempDirPath ?? (string.IsNullOrWhiteSpace(parseResult.ValueForOption <string>(WorkloadInstallCommandParser.TempDirOption)) ? Path.GetTempPath() : parseResult.ValueForOption <string>(WorkloadInstallCommandParser.TempDirOption)); var configOption = parseResult.ValueForOption <string>(WorkloadInstallCommandParser.ConfigOption); var addSourceOption = parseResult.ValueForOption <string[]>(WorkloadInstallCommandParser.AddSourceOption); _packageSourceLocation = string.IsNullOrEmpty(configOption) && (addSourceOption == null || !addSourceOption.Any()) ? null : new PackageSourceLocation(string.IsNullOrEmpty(configOption) ? null : new FilePath(configOption), sourceFeedOverrides: addSourceOption); _dotnetPath = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath); _workloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(_dotnetPath, _sdkVersion.ToString()); _workloadResolver = workloadResolver ?? WorkloadResolver.Create(_workloadManifestProvider, _dotnetPath, _sdkVersion.ToString()); var sdkFeatureBand = new SdkFeatureBand(_sdkVersion); _workloadInstaller = workloadInstaller ?? WorkloadInstallerFactory.GetWorkloadInstaller(_reporter, sdkFeatureBand, _workloadResolver, _verbosity, nugetPackageDownloader, _dotnetPath, _packageSourceLocation); _userHome = userHome ?? CliFolderPathCalculator.DotnetHomePath; var tempPackagesDir = new DirectoryPath(Path.Combine(_tempDirPath, "dotnet-sdk-advertising-temp")); _nugetPackageDownloader = nugetPackageDownloader ?? new NuGetPackageDownloader(tempPackagesDir, filePermissionSetter: null, new NullLogger()); _workloadManifestUpdater = workloadManifestUpdater ?? new WorkloadManifestUpdater(_reporter, _workloadManifestProvider, _nugetPackageDownloader, _userHome, _tempDirPath, _packageSourceLocation); }
public static IInstaller GetWorkloadInstaller( IReporter reporter, SdkFeatureBand sdkFeatureBand, IWorkloadResolver workloadResolver, VerbosityOptions verbosity, string userProfileDir, bool verifySignatures, INuGetPackageDownloader nugetPackageDownloader = null, string dotnetDir = null, string tempDirPath = null, PackageSourceLocation packageSourceLocation = null, RestoreActionConfig restoreActionConfig = null, bool elevationRequired = true) { dotnetDir = string.IsNullOrWhiteSpace(dotnetDir) ? Path.GetDirectoryName(Environment.ProcessPath) : dotnetDir; var installType = GetWorkloadInstallType(sdkFeatureBand, dotnetDir); if (installType == InstallType.Msi) { if (!OperatingSystem.IsWindows()) { throw new InvalidOperationException(LocalizableStrings.OSDoesNotSupportMsi); } return(NetSdkMsiInstallerClient.Create(verifySignatures, sdkFeatureBand, workloadResolver, nugetPackageDownloader, verbosity, packageSourceLocation, reporter, tempDirPath)); } if (elevationRequired && !WorkloadFileBasedInstall.IsUserLocal(dotnetDir, sdkFeatureBand.ToString()) && !CanWriteToDotnetRoot(dotnetDir)) { throw new GracefulException(LocalizableStrings.InadequatePermissions, isUserError: false); } userProfileDir ??= CliFolderPathCalculator.DotnetUserProfileFolderPath; return(new FileBasedInstaller(reporter, sdkFeatureBand, workloadResolver, userProfileDir, nugetPackageDownloader, dotnetDir: dotnetDir, tempDirPath: tempDirPath, verbosity: verbosity, packageSourceLocation: packageSourceLocation, restoreActionConfig: restoreActionConfig)); }
public WorkloadSearchCommand( ParseResult result, IReporter reporter = null, IWorkloadResolver workloadResolver = null, string version = null, string userProfileDir = null) : base(result) { _reporter = reporter ?? Reporter.Output; _verbosity = result.GetValueForOption(WorkloadSearchCommandParser.VerbosityOption); _workloadIdStub = result.GetValueForArgument(WorkloadSearchCommandParser.WorkloadIdStubArgument); var dotnetPath = Path.GetDirectoryName(Environment.ProcessPath); userProfileDir ??= CliFolderPathCalculator.DotnetUserProfileFolderPath; _sdkVersion = WorkloadOptionsExtensions.GetValidatedSdkVersion(result.GetValueForOption(WorkloadSearchCommandParser.VersionOption), version, dotnetPath, userProfileDir); var workloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(dotnetPath, _sdkVersion.ToString(), userProfileDir); _workloadResolver = workloadResolver ?? WorkloadResolver.Create(workloadManifestProvider, dotnetPath, _sdkVersion.ToString(), userProfileDir); }
public NetSdkManagedInstaller( IReporter reporter, SdkFeatureBand sdkFeatureBand, IWorkloadResolver workloadResolver, INuGetPackageDownloader nugetPackageDownloader = null, string dotnetDir = null, VerbosityOptions verbosity = VerbosityOptions.normal) { _dotnetDir = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath); _tempPackagesDir = new DirectoryPath(Path.Combine(_dotnetDir, "metadata", "temp")); _nugetPackageDownloader = nugetPackageDownloader ?? new NuGetPackageDownloader(_tempPackagesDir, filePermissionSetter: null, verbosity.VerbosityIsDetailedOrDiagnostic() ? new NuGetConsoleLogger() : new NullLogger()); _workloadMetadataDir = Path.Combine(_dotnetDir, "metadata", "workloads"); _reporter = reporter; _sdkFeatureBand = sdkFeatureBand; _workloadResolver = workloadResolver; _installationRecordRepository = new NetSdkManagedInstallationRecordRepository(_dotnetDir); }
public WorkloadListCommand( ParseResult result, IReporter reporter = null, IWorkloadInstallationRecordRepository workloadRecordRepo = null, string currentSdkVersion = null, string dotnetDir = null, string userHome = null, string tempDirPath = null, INuGetPackageDownloader nugetPackageDownloader = null, IWorkloadManifestUpdater workloadManifestUpdater = null ) : base(result) { _reporter = reporter ?? Reporter.Output; _machineReadableOption = result.ValueForOption <bool>(WorkloadListCommandParser.MachineReadableOption); _verbosity = result.ValueForOption <VerbosityOptions>(WorkloadListCommandParser.VerbosityOption); _dotnetPath = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath); ReleaseVersion currentSdkReleaseVersion = new(currentSdkVersion ?? Product.Version); _currentSdkFeatureBand = new SdkFeatureBand(currentSdkReleaseVersion); _workloadRecordRepo = workloadRecordRepo ?? new NetSdkManagedInstallationRecordRepository(_dotnetPath); _includePreviews = result.ValueForOption <bool>(WorkloadListCommandParser.IncludePreviewsOption); _tempDirPath = tempDirPath ?? (string.IsNullOrWhiteSpace( result.ValueForOption <string>(WorkloadListCommandParser.TempDirOption)) ? Path.GetTempPath() : result.ValueForOption <string>(WorkloadListCommandParser.TempDirOption)); _targetSdkVersion = result.ValueForOption <string>(WorkloadListCommandParser.VersionOption); _workloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(_dotnetPath, string.IsNullOrWhiteSpace(_targetSdkVersion) ? currentSdkReleaseVersion.ToString() : _targetSdkVersion); _userHome = userHome ?? CliFolderPathCalculator.DotnetHomePath; DirectoryPath tempPackagesDir = new(Path.Combine(_userHome, ".dotnet", "sdk-advertising-temp")); _nugetPackageDownloader = nugetPackageDownloader ?? new NuGetPackageDownloader(tempPackagesDir, null, new NullLogger()); _workloadManifestUpdater = workloadManifestUpdater ?? new WorkloadManifestUpdater(_reporter, _workloadManifestProvider, _nugetPackageDownloader, _userHome, _tempDirPath); }
public WorkloadRepairCommand( ParseResult parseResult, IReporter reporter = null, IWorkloadResolver workloadResolver = null, IInstaller workloadInstaller = null, INuGetPackageDownloader nugetPackageDownloader = null, string dotnetDir = null, string tempDirPath = null, string version = null, string userProfileDir = null) : base(parseResult) { _reporter = reporter ?? Reporter.Output; _verbosity = parseResult.GetValueForOption(WorkloadRepairCommandParser.VerbosityOption); _dotnetPath = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath); userProfileDir ??= CliFolderPathCalculator.DotnetUserProfileFolderPath; _sdkVersion = WorkloadOptionsExtensions.GetValidatedSdkVersion(parseResult.GetValueForOption(WorkloadRepairCommandParser.VersionOption), version, _dotnetPath, userProfileDir); var configOption = parseResult.GetValueForOption(WorkloadRepairCommandParser.ConfigOption); var sourceOption = parseResult.GetValueForOption(WorkloadRepairCommandParser.SourceOption); _packageSourceLocation = string.IsNullOrEmpty(configOption) && (sourceOption == null || !sourceOption.Any()) ? null : new PackageSourceLocation(string.IsNullOrEmpty(configOption) ? null : new FilePath(configOption), sourceFeedOverrides: sourceOption); var workloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(_dotnetPath, _sdkVersion.ToString(), userProfileDir); _workloadResolver = workloadResolver ?? WorkloadResolver.Create(workloadManifestProvider, _dotnetPath, _sdkVersion.ToString(), userProfileDir); var sdkFeatureBand = new SdkFeatureBand(_sdkVersion); tempDirPath = tempDirPath ?? (string.IsNullOrWhiteSpace(parseResult.GetValueForOption(WorkloadInstallCommandParser.TempDirOption)) ? Path.GetTempPath() : parseResult.GetValueForOption(WorkloadInstallCommandParser.TempDirOption)); var tempPackagesDir = new DirectoryPath(Path.Combine(tempDirPath, "dotnet-sdk-advertising-temp")); NullLogger nullLogger = new NullLogger(); nugetPackageDownloader ??= new NuGetPackageDownloader( tempPackagesDir, filePermissionSetter: null, new FirstPartyNuGetPackageSigningVerifier(tempPackagesDir, nullLogger), nullLogger, restoreActionConfig: _parseResult.ToRestoreActionConfig()); _workloadInstaller = workloadInstaller ?? WorkloadInstallerFactory.GetWorkloadInstaller(_reporter, sdkFeatureBand, _workloadResolver, _verbosity, userProfileDir, nugetPackageDownloader, dotnetDir, tempDirPath, _packageSourceLocation, _parseResult.ToRestoreActionConfig()); }
public WorkloadListCommand( ParseResult result, IReporter reporter = null, IWorkloadInstallationRecordRepository workloadRecordRepo = null, string version = null) : base(result) { _reporter = reporter ?? Reporter.Output; _machineReadableOption = result.ValueForOption <bool>(WorkloadListCommandParser.MachineReadableOption); _verbosity = result.ValueForOption <VerbosityOptions>(WorkloadListCommandParser.VerbosityOption); var sdkVersion = new ReleaseVersion(version ?? Product.Version); var dotnetPath = Path.GetDirectoryName(Environment.ProcessPath); var workloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(dotnetPath, sdkVersion.ToString()); var workloadResolver = WorkloadResolver.Create(workloadManifestProvider, dotnetPath, sdkVersion.ToString()); _sdkFeatureBand = new SdkFeatureBand(sdkVersion); _workloadRecordRepo = workloadRecordRepo ?? WorkloadInstallerFactory .GetWorkloadInstaller(_reporter, _sdkFeatureBand, workloadResolver, _verbosity) .GetWorkloadInstallationRecordRepository(); _sdkVersion = result.ValueForOption <string>(WorkloadUpdateCommandParser.SdkVersionOption); }
public WorkloadListHelper( VerbosityOptions verbosity = VerbosityOptions.normal, string targetSdkVersion = null, bool?verifySignatures = null, IReporter reporter = null, IWorkloadInstallationRecordRepository workloadRecordRepo = null, string currentSdkVersion = null, string dotnetDir = null, string userProfileDir = null, IWorkloadResolver workloadResolver = null ) { string dotnetPath = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath); ReleaseVersion currentSdkReleaseVersion = new(currentSdkVersion ?? Product.Version); _currentSdkFeatureBand = new SdkFeatureBand(currentSdkReleaseVersion); _targetSdkVersion = targetSdkVersion; userProfileDir ??= CliFolderPathCalculator.DotnetUserProfileFolderPath; var workloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(dotnetPath, string.IsNullOrWhiteSpace(_targetSdkVersion) ? currentSdkReleaseVersion.ToString() : _targetSdkVersion, userProfileDir); WorkloadResolver = workloadResolver ?? NET.Sdk.WorkloadManifestReader.WorkloadResolver.Create( workloadManifestProvider, dotnetPath, currentSdkReleaseVersion.ToString(), userProfileDir); WorkloadRecordRepo = workloadRecordRepo ?? WorkloadInstallerFactory.GetWorkloadInstaller(reporter, _currentSdkFeatureBand, WorkloadResolver, verbosity, userProfileDir, verifySignatures ?? !SignCheck.IsDotNetSigned(), elevationRequired: false).GetWorkloadInstallationRecordRepository(); }
/// <summary> /// Set the verbosity level of the command. /// </summary> /// <param name="verbosity"></param> /// <returns></returns> public DotnetTestTask Verbosity(VerbosityOptions verbosity) { WithArguments("--verbosity", verbosity.ToString().ToLower()); return(this); }
public async Task ExecuteAsync(string vam, string[]?include, string[]?exclude, DeleteOptions delete, VerbosityOptions verbosity, ErrorReportingOptions warnings, ExecutionOptions execution) { vam = SanitizeVamRootFolder(vam); var filter = Filter.From(vam, include, exclude); var sw = Stopwatch.StartNew(); var varFiles = await _operationsFactory.Get <IScanVarPackagesOperation>().ExecuteAsync(vam, filter, verbosity); var freeFiles = await _operationsFactory.Get <IScanFilesOperation>().ExecuteAsync(vam); var matches = await _operationsFactory.Get <IMatchFilesToPackagesOperation>().ExecuteAsync(varFiles, freeFiles); var scenes = await _operationsFactory.Get <IScanJsonFilesOperation>().ExecuteAsync(vam, freeFiles, filter, warnings); await _operationsFactory.Get <IUpdateJsonFileReferencesOperation>().ExecuteAsync(scenes, matches, execution); await _operationsFactory.Get <IDeleteMatchedFilesOperation>().ExecuteAsync(freeFiles, matches, delete, filter, verbosity, execution); await _operationsFactory.Get <IDeleteOrphanMorphFilesOperation>().ExecuteAsync(freeFiles, delete, filter, verbosity, execution); _output.WriteLine($"Cleanup complete in {sw.Elapsed.TotalSeconds:0.00} seconds."); }
public async Task ExecuteAsync(IList <FreeFile> files, IList <FreeFilePackageMatch> matches, DeleteOptions delete, IFilter filter, VerbosityOptions verbosity, ExecutionOptions execution) { var filesToDelete = new HashSet <FreeFile>(); foreach (var match in matches) { foreach (var file in match.FreeFiles.Where(f => !filter.IsFiltered(f.LocalPath)).SelectMany(f => f.SelfAndChildren())) { filesToDelete.Add(file); } } await DeleteAsync(files, filesToDelete, delete, verbosity, execution); }
public DotnetBuildTask Verbosity(VerbosityOptions verbosity) { WithArgumentsKeyFromAttribute(verbosity.ToString().ToLower()); return(this); }
public async Task ExecuteAsync(IList <FreeFile> files, DeleteOptions delete, IFilter filter, VerbosityOptions verbosity, ExecutionOptions execution) { var filesToDelete = new HashSet <FreeFile>(files .Where(f => !filter.IsFiltered(f.LocalPath)).SelectMany(f => f.SelfAndChildren()) .Where(f => f.Extension == ".vmi" || f.Extension == ".vmb") .Select(f => (basePath: f.LocalPath.Substring(0, f.LocalPath.Length - f.Extension.Length), file: f)) .GroupBy(x => x.basePath) .Where(g => g.Count() == 1) .Select(g => g.Single().file)); await DeleteAsync(files, filesToDelete, delete, verbosity, execution); }
public Task DeleteAsync(IList <FreeFile> files, ISet <FreeFile> filesToDelete, DeleteOptions delete, VerbosityOptions verbosity, ExecutionOptions execution) { if (filesToDelete.Count >= files.Sum(f => f.Children == null ? 1 : 1 + f.Children.Count)) { throw new InvalidOperationException($"{Name}: Attempt to delete {filesToDelete.Count}, which is more than the total scanned files."); } if (filesToDelete.Count == 0) { Output.WriteLine($"{Name}: Nothing to delete."); return(Task.CompletedTask); } var mbSaved = 0f; using (var reporter = new ProgressReporter <ProgressInfo>(StartProgress, ReportProgress, CompleteProgress)) { foreach (var file in filesToDelete) { reporter.Report(new ProgressInfo(Interlocked.Increment(ref _processed), filesToDelete.Count, file.LocalPath)); if (verbosity == VerbosityOptions.Verbose) { Output.WriteLine($"{(execution == ExecutionOptions.Noop ? "[NOOP]" : "DELETE")}: {file.LocalPath}"); } if (execution == ExecutionOptions.Noop) { _logger.Log($"[DELETE(NOOP)] {file.Path}"); mbSaved += (file.Size ?? 0f) / 1024f / 1024f; } else { if (DeleteFile(file.Path, delete)) { lock (_sync) { mbSaved += (file.Size ?? 0f) / 1024f / 1024f; } } else { Interlocked.Increment(ref _errors); } } lock (_sync) { files.Remove(file); } } if (execution != ExecutionOptions.Noop) { foreach (var folder in filesToDelete.Select(f => FileSystem.Path.GetDirectoryName(f.Path)).Distinct().OrderByDescending(f => f.Length)) { if (FileSystem.Directory.Exists(folder) && FileSystem.Directory.GetFileSystemEntries(folder).Length == 0) { if (verbosity == VerbosityOptions.Verbose) { Output.WriteLine($"DELETE (empty folder): {folder}"); } FileSystem.Directory.Delete(folder); } } } } if (execution == ExecutionOptions.Noop) { Output.WriteLine($"{Name}: Did not delete {filesToDelete.Count} files since --noop was specified. Estimated {mbSaved:0.00}MB would have been saved."); } else { Output.WriteLine($"{Name}: Deleted {filesToDelete.Count} files. Estimated {mbSaved:0.00}MB saved."); } if (_errors > 0) { Output.WriteLine($"{Name}: Could not delete {_errors} files. Enable logging to get more information."); } return(Task.CompletedTask); }
public async Task <IList <VarPackage> > ExecuteAsync(string vam, IFilter filter, VerbosityOptions verbosity) { using (var reporter = new ProgressReporter <ProgressInfo>(StartProgress, ReportProgress, CompleteProgress)) { var packageFiles = _fs.Directory.GetFiles(_fs.Path.Combine(vam, "AddonPackages"), "*.var", SearchOption.AllDirectories); var scanPackageBlock = new ActionBlock <string>( f => ExecuteOneAsync(reporter, filter, packageFiles.Length, f), new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 4 }); foreach (var packageFile in packageFiles) { scanPackageBlock.Post(packageFile); } scanPackageBlock.Complete(); await scanPackageBlock.Completion; } Output.WriteLine($"Scanned {_files} files in {_packages.Count} var packages."); if (_errors.Count > 0) { if (verbosity == VerbosityOptions.Verbose) { foreach (var error in _errors.OrderBy(e => e)) { Output.WriteLine(error); } } else { Output.WriteLine($"Warning: {_errors.Count} var packages could not be read. Run with --log or --verbose to see the details."); } } return(_packages.ToList()); }
internal static void TryRunGarbageCollection(IInstaller workloadInstaller, IReporter reporter, VerbosityOptions verbosity, DirectoryPath?offlineCache = null) { try { if (workloadInstaller.GetInstallationUnit().Equals(InstallationUnit.Packs)) { workloadInstaller.GetPackInstaller().GarbageCollectInstalledWorkloadPacks(offlineCache); } } catch (Exception e) { // Garbage collection failed, warn user reporter.WriteLine(string.Format(LocalizableStrings.GarbageCollectionFailed, verbosity.VerbosityIsDetailedOrDiagnostic() ? e.StackTrace.ToString() : e.Message).Yellow()); } }