public async Task <CreationResultStatus> CoordinateInvocationOrAcquisitionAsync() { EnsureTemplateResolutionResult(); if (_templateToInvoke != null) { // invoke and then check for updates CreationResultStatus creationResult = await InvokeTemplateAsync(); // check for updates on this template (pack) await CheckForTemplateUpdateAsync(); return(creationResult); } else { // The command didn't resolve to an installed template. Search for something that does. bool anySearchMatches = await SearchForTemplateMatchesAsync(); if (!anySearchMatches) { return(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(_templateResolutionResult, _environment, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage)); } else { return(CreationResultStatus.Success); } } }
private async Task <CreationResultStatus> EnterTemplateManipulationFlowAsync() { if (_commandInput.IsListFlagSpecified || _commandInput.IsHelpFlagSpecified) { TemplateListResolutionResult listingTemplateResolutionResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); return(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(listingTemplateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: _commandInput.IsHelpFlagSpecified)); } TemplateResolutionResult templateResolutionResult = TemplateResolver.GetTemplateResolutionResult(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); TemplateInvocationAndAcquisitionCoordinator invocationCoordinator = new TemplateInvocationAndAcquisitionCoordinator(_settingsLoader, _commandInput, _templateCreator, _hostDataLoader, _telemetryLogger, _defaultLanguage, CommandName, _inputGetter, _callbacks); return(await invocationCoordinator.CoordinateInvocationOrAcquisitionAsync()); }
private async Task <CreationResultStatus> EnterTemplateManipulationFlowAsync() { TemplateListResolutionResult templateResolutionResult = QueryForTemplateMatches(); if (_commandInput.IsListFlagSpecified || _commandInput.IsHelpFlagSpecified) { return(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(templateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: _commandInput.IsHelpFlagSpecified)); } TemplateInvocationAndAcquisitionCoordinator invocationCoordinator = new TemplateInvocationAndAcquisitionCoordinator(_settingsLoader, _commandInput, _templateCreator, _hostDataLoader, _telemetryLogger, _defaultLanguage, CommandName, _inputGetter); return(await invocationCoordinator.CoordinateInvocationOrAcquisitionAsync()); }
// TODO: make sure help / usage works right in these cases. private CreationResultStatus EnterMaintenanceFlow() { if (!TemplateResolver.ValidateRemainingParameters(_commandInput, out IReadOnlyList <string> invalidParams)) { HelpForTemplateResolution.DisplayInvalidParameters(invalidParams); if (_commandInput.IsHelpFlagSpecified) { // this code path doesn't go through the full help & usage stack, so needs it's own call to ShowUsageHelp(). HelpForTemplateResolution.ShowUsageHelp(_commandInput, _telemetryLogger); } else { Reporter.Error.WriteLine(string.Format(LocalizableStrings.RunHelpForInformationAboutAcceptedParameters, CommandName).Bold().Red()); } return(CreationResultStatus.InvalidParamValues); } if (_commandInput.ToUninstallList != null) { return(EnterUninstallFlow()); } if (_commandInput.ToInstallList != null && _commandInput.ToInstallList.Count > 0 && _commandInput.ToInstallList[0] != null) { CreationResultStatus installResult = EnterInstallFlow(); if (installResult == CreationResultStatus.Success) { _settingsLoader.Reload(); TemplateListResolutionResult resolutionResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(resolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: false); } return(installResult); } // No other cases specified, we've fallen through to "Optional usage help + List" TemplateListResolutionResult templateResolutionResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(templateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: _commandInput.IsHelpFlagSpecified); return(CreationResultStatus.Success); }
public async Task <CreationResultStatus> CoordinateInvocationOrAcquisitionAsync() { EnsureTemplateResolutionResult(); if (_templateToInvoke != null) { // invoke and then check for updates CreationResultStatus creationResult = await InvokeTemplateAsync(); // check for updates on this template (pack) await CheckForTemplateUpdateAsync(); return(creationResult); } else { ListOrHelpTemplateListResolutionResult listingTemplateListResolutionResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); return(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(listingTemplateListResolutionResult, _environment, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, false)); } }
private Task <CreationResultStatus> EnterTemplateManipulationFlowAsync() { if (_commandInput.IsListFlagSpecified || _commandInput.IsHelpFlagSpecified) { TemplateListResolutionResult listingTemplateResolutionResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); return(Task.FromResult(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(listingTemplateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: _commandInput.IsHelpFlagSpecified))); } TemplateResolutionResult templateResolutionResult = TemplateResolver.GetTemplateResolutionResult(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); if (templateResolutionResult.ResolutionStatus == TemplateResolutionResult.Status.SingleMatch) { TemplateInvocationCoordinator invocationCoordinator = new TemplateInvocationCoordinator(_settingsLoader, _commandInput, _telemetryLogger, CommandName, _inputGetter, _callbacks); return(invocationCoordinator.CoordinateInvocationOrAcquisitionAsync(templateResolutionResult.TemplateToInvoke)); } else { return(Task.FromResult(HelpForTemplateResolution.CoordinateAmbiguousTemplateResolutionDisplay(templateResolutionResult, EnvironmentSettings, _commandInput, _defaultLanguage, _settingsLoader.InstallUnitDescriptorCache.Descriptors.Values))); } }
private async Task <CreationResultStatus> EnterTemplateManipulationFlowAsync() { TemplateListResolutionResult templateResolutionResult = QueryForTemplateMatches(); if (_commandInput.IsListFlagSpecified || _commandInput.IsHelpFlagSpecified) { return(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(templateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage)); } if (templateResolutionResult.TryGetUnambiguousTemplateGroupToUse(out IReadOnlyList <ITemplateMatchInfo> unambiguousTemplateGroup) && templateResolutionResult.TryGetSingularInvokableMatch(out ITemplateMatchInfo templateToInvoke) && !unambiguousTemplateGroup.Any(x => x.HasParameterMismatch()) && !unambiguousTemplateGroup.Any(x => x.HasAmbiguousParameterValueMatch())) { // If any template in the group has any ambiguous params, then don't invoke. // The check for HasAmbiguousParameterValueMatch is for an example like: // "dotnet new mvc -f netcore" // - '-f netcore' is ambiguous in the 1.x version (2 begins-with matches) // - '-f netcore' is not ambiguous in the 2.x version (1 begins-with match) return(await EnterTemplateInvocationFlowAsync(templateToInvoke).ConfigureAwait(false)); }
// TODO: make sure help / usage works right in these cases. private CreationResultStatus EnterMaintenanceFlow() { if (!TemplateListResolver.ValidateRemainingParameters(_commandInput, out IReadOnlyList <string> invalidParams)) { HelpForTemplateResolution.DisplayInvalidParameters(invalidParams); if (_commandInput.IsHelpFlagSpecified) { _telemetryLogger.TrackEvent(CommandName + "-Help"); HelpForTemplateResolution.ShowUsageHelp(_commandInput); } else { Reporter.Error.WriteLine(string.Format(LocalizableStrings.RunHelpForInformationAboutAcceptedParameters, CommandName).Bold().Red()); } return(CreationResultStatus.InvalidParamValues); } if (_commandInput.ToUninstallList != null) { if (_commandInput.ToUninstallList.Count > 0 && _commandInput.ToUninstallList[0] != null) { IEnumerable <string> failures = Installer.Uninstall(_commandInput.ToUninstallList); foreach (string failure in failures) { Console.WriteLine(LocalizableStrings.CouldntUninstall, failure); } } else { Console.WriteLine(LocalizableStrings.CommandDescription); Console.WriteLine(); Console.WriteLine(LocalizableStrings.InstalledItems); foreach (string value in _settingsLoader.InstallUnitDescriptorCache.InstalledItems.Values) { Console.WriteLine($" {value}"); } return(CreationResultStatus.Success); } } if (_commandInput.ToInstallList != null && _commandInput.ToInstallList.Count > 0 && _commandInput.ToInstallList[0] != null) { CreationResultStatus installResult = EnterInstallFlow(); if (installResult == CreationResultStatus.Success) { _settingsLoader.Reload(); TemplateListResolutionResult resolutionResult = QueryForTemplateMatches(); HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(resolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage); } return(installResult); } //No other cases specified, we've fallen through to "Usage help + List" HelpForTemplateResolution.ShowUsageHelp(_commandInput); TemplateListResolutionResult templateResolutionResult = QueryForTemplateMatches(); HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(templateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage); return(CreationResultStatus.Success); }
// TODO: make sure help / usage works right in these cases. private CreationResultStatus EnterMaintenanceFlow() { if (!TemplateListResolver.ValidateRemainingParameters(_commandInput, out IReadOnlyList <string> invalidParams)) { HelpForTemplateResolution.DisplayInvalidParameters(invalidParams); if (_commandInput.IsHelpFlagSpecified) { // this code path doesn't go through the full help & usage stack, so needs it's own call to ShowUsageHelp(). HelpForTemplateResolution.ShowUsageHelp(_commandInput, _telemetryLogger); } else { Reporter.Error.WriteLine(string.Format(LocalizableStrings.RunHelpForInformationAboutAcceptedParameters, CommandName).Bold().Red()); } return(CreationResultStatus.InvalidParamValues); } if (_commandInput.ToUninstallList != null) { if (_commandInput.ToUninstallList.Count > 0 && _commandInput.ToUninstallList[0] != null) { IEnumerable <string> failures = Installer.Uninstall(_commandInput.ToUninstallList); foreach (string failure in failures) { Console.WriteLine(LocalizableStrings.CouldntUninstall, failure); } } else { Console.WriteLine(LocalizableStrings.CommandDescription); Console.WriteLine(); Console.WriteLine(LocalizableStrings.InstalledItems); foreach (KeyValuePair <Guid, string> entry in _settingsLoader.InstallUnitDescriptorCache.InstalledItems) { Console.WriteLine($" {entry.Value}"); if (_settingsLoader.InstallUnitDescriptorCache.Descriptors.TryGetValue(entry.Value, out IInstallUnitDescriptor descriptor)) { if (descriptor.Details != null && descriptor.Details.TryGetValue("Version", out string versionValue)) { Console.WriteLine($" {LocalizableStrings.Version} {versionValue}"); } } HashSet <string> displayStrings = new HashSet <string>(StringComparer.Ordinal); foreach (TemplateInfo info in _settingsLoader.UserTemplateCache.TemplateInfo.Where(x => x.ConfigMountPointId == entry.Key)) { string str = $" {info.Name} ({info.ShortName})"; if (info.Tags != null && info.Tags.TryGetValue("language", out ICacheTag languageTag)) { str += " " + string.Join(", ", languageTag.ChoicesAndDescriptions.Select(x => x.Key)); } displayStrings.Add(str); } if (displayStrings.Count > 0) { Console.WriteLine($" {LocalizableStrings.Templates}:"); foreach (string displayString in displayStrings) { Console.WriteLine(displayString); } } } return(CreationResultStatus.Success); } } if (_commandInput.ToInstallList != null && _commandInput.ToInstallList.Count > 0 && _commandInput.ToInstallList[0] != null) { CreationResultStatus installResult = EnterInstallFlow(); if (installResult == CreationResultStatus.Success) { _settingsLoader.Reload(); TemplateListResolutionResult resolutionResult = QueryForTemplateMatches(); HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(resolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage); } return(installResult); } //No other cases specified, we've fallen through to "Usage help + List" TemplateListResolutionResult templateResolutionResult = QueryForTemplateMatches(); HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(templateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage); return(CreationResultStatus.Success); }