private void UninstallOtherVersionsOfSamePackage(IInstallUnitDescriptor descriptor) { IReadOnlyList <IInstallUnitDescriptor> allDescriptors = ((SettingsLoader)(_environmentSettings.SettingsLoader)).InstallUnitDescriptorCache.Descriptors.Values.ToList(); foreach (IInstallUnitDescriptor testDescriptor in allDescriptors) { if (string.Equals(descriptor.Identifier, testDescriptor.Identifier, StringComparison.OrdinalIgnoreCase) && descriptor.FactoryId == testDescriptor.FactoryId && descriptor.DescriptorId != testDescriptor.DescriptorId) { if (descriptor.MountPointId != testDescriptor.MountPointId) { // Uninstalls the mount point and the descriptor(s) for packs that were installed under that mount point. UninstallMountPoint(testDescriptor.MountPointId); } else { // The new install is in the same place as the old install. Don't remove the mount point, just the old descriptor. // This is for when the exact same pack is installed over-the-top of an existing install of it. // Works for both zip/nupkg and for local file sources. ((SettingsLoader)(_environmentSettings.SettingsLoader)).InstallUnitDescriptorCache.RemoveDescriptor(testDescriptor); } } } }
/// <summary> /// Displays the help when <paramref name="unambiguousTemplateGroup"/> contains the invokable templates with ambiguous precedence. /// </summary> /// <param name="unambiguousTemplateGroup">resolved unambiguous template group to use based on the command input</param> /// <param name="environmentSettings"></param> /// <param name="commandInput">the command input</param> /// <param name="installUnitDescriptors">the list of install unit descriptors</param> /// <returns></returns> /// <exception cref="ArgumentNullException">when <paramref name="unambiguousTemplateGroup"/>is <see cref="null"/></exception> /// <exception cref="ArgumentNullException">when <paramref name="commandInput"/>is <see cref="null"/></exception> private static CreationResultStatus DisplayAmbiguousPrecedenceError( TemplateGroup unambiguousTemplateGroup, IEngineEnvironmentSettings environmentSettings, INewCommandInput commandInput, IEnumerable <IInstallUnitDescriptor> installUnitDescriptors) { _ = unambiguousTemplateGroup ?? throw new ArgumentNullException(paramName: nameof(unambiguousTemplateGroup)); _ = unambiguousTemplateGroup ?? throw new ArgumentNullException(paramName: nameof(commandInput)); Reporter.Error.WriteLine(LocalizableStrings.AmbiguousTemplatesHeader.Bold().Red()); List <AmbiguousTemplateDetails> ambiguousTemplateDetails = new List <AmbiguousTemplateDetails>(); foreach (ITemplateMatchInfo template in unambiguousTemplateGroup.GetHighestPrecedenceInvokableTemplates(true)) { ambiguousTemplateDetails.Add(new AmbiguousTemplateDetails { TemplateIdentity = template.Info.Identity, TemplateName = template.Info.Name, TemplateShortName = template.Info.ShortName, TemplateLanguage = template.Info.GetLanguage(), TemplatePrecedence = template.Info.Precedence, TemplateAuthor = template.Info.Author, InstallationDescriptor = installUnitDescriptors?.FirstOrDefault(descriptor => descriptor.MountPointId == template.Info.ConfigMountPointId) }); } HelpFormatter <AmbiguousTemplateDetails> formatter = HelpFormatter .For( environmentSettings, commandInput, ambiguousTemplateDetails, columnPadding: 2, headerSeparator: '-', blankLineBetweenRows: false) .DefineColumn(t => t.TemplateIdentity, LocalizableStrings.ColumnNameIdentity, showAlways: true) .DefineColumn(t => t.TemplateName, LocalizableStrings.ColumnNameTemplateName, shrinkIfNeeded: true, minWidth: 15, showAlways: true) .DefineColumn(t => t.TemplateShortName, LocalizableStrings.ColumnNameShortName, showAlways: true) .DefineColumn(t => t.TemplateLanguage, LocalizableStrings.ColumnNameLanguage, showAlways: true) .DefineColumn(t => t.TemplatePrecedence.ToString(), out object prcedenceColumn, LocalizableStrings.ColumnNamePrecedence, showAlways: true) .DefineColumn(t => t.TemplateAuthor, LocalizableStrings.ColumnNameAuthor, showAlways: true, shrinkIfNeeded: true, minWidth: 10) .DefineColumn(t => t.InstallationDescriptor != null ? t.InstallationDescriptor.Identifier : string.Empty, LocalizableStrings.ColumnNamePackage, showAlways: true) .OrderByDescending(prcedenceColumn, new NullOrEmptyIsLastStringComparer()); Reporter.Error.WriteLine(formatter.Layout().Bold().Red()); string hintMessage = LocalizableStrings.AmbiguousTemplatesMultiplePackagesHint; if (unambiguousTemplateGroup.Templates.AllAreTheSame(t => t.Info.ConfigMountPointId)) { IInstallUnitDescriptor descriptor = installUnitDescriptors?.First(descriptor => descriptor.MountPointId == unambiguousTemplateGroup.Templates.First().Info.ConfigMountPointId); if (descriptor?.Details?.ContainsKey("NuGetPackageId") ?? false) { hintMessage = string.Format(LocalizableStrings.AmbiguousTemplatesSamePackageHint, descriptor.Identifier); } } Reporter.Error.WriteLine(hintMessage.Bold().Red()); return(CreationResultStatus.NotFound); }
private void WriteDescriptorDetail(IInstallUnitDescriptor descriptor, string detailKey, ref bool wroteHeader) { if (descriptor.Details.TryGetValue(detailKey, out string detailValue) && !string.IsNullOrEmpty(detailValue)) { if (!wroteHeader) { Reporter.Output.WriteLine($" {LocalizableStrings.UninstallListDetailsHeader}"); wroteHeader = true; } Reporter.Output.WriteLine($" {detailKey}: {detailValue}"); } }
public bool TryCreateFromDetails(Guid descriptorId, string identifier, Guid mountPointId, IReadOnlyDictionary <string, string> details, out IInstallUnitDescriptor descriptor) { if (string.IsNullOrEmpty(identifier) || mountPointId == Guid.Empty) { descriptor = null; return(false); } if (!details.TryGetValue(nameof(NupkgInstallUnitDescriptor.Version), out string version) || string.IsNullOrEmpty(version)) { descriptor = null; return(false); } if (!details.TryGetValue(nameof(NupkgInstallUnitDescriptor.Author), out string author) || string.IsNullOrEmpty(author)) { descriptor = null; return(false); } descriptor = new NupkgInstallUnitDescriptor(descriptorId, mountPointId, identifier, version, author); return(true); }
public static bool TryParse(IEngineEnvironmentSettings environmentSettings, JProperty descriptorProperty, out IInstallUnitDescriptor parsedDescriptor) { if (descriptorProperty == null) { parsedDescriptor = null; return(false); } if (!Guid.TryParse(descriptorProperty.Name, out Guid descriptorId) || descriptorId == Guid.Empty) { parsedDescriptor = null; return(false); } if (!(descriptorProperty.Value is JObject descriptorObj)) { parsedDescriptor = null; return(false); } if (!descriptorObj.TryGetValue(nameof(IInstallUnitDescriptor.FactoryId), StringComparison.OrdinalIgnoreCase, out JToken factoryIdToken) || (factoryIdToken == null) || (factoryIdToken.Type != JTokenType.String) || !Guid.TryParse(factoryIdToken.ToString(), out Guid factoryId) || !environmentSettings.SettingsLoader.Components.TryGetComponent(factoryId, out IInstallUnitDescriptorFactory factory)) { parsedDescriptor = null; return(false); } if (!descriptorObj.TryGetValue(nameof(IInstallUnitDescriptor.MountPointId), StringComparison.OrdinalIgnoreCase, out JToken mountPointIdToken) || (mountPointIdToken == null) || (mountPointIdToken.Type != JTokenType.String) || !Guid.TryParse(mountPointIdToken.ToString(), out Guid mountPointId)) { parsedDescriptor = null; return(false); } if (!descriptorObj.TryGetValue(nameof(IInstallUnitDescriptor.Identifier), StringComparison.OrdinalIgnoreCase, out JToken identifierToken) || (identifierToken == null) || (identifierToken.Type != JTokenType.String)) { parsedDescriptor = null; return(false); } bool isPartOfAnOptionalWorkload = false; if (descriptorObj.TryGetValue(nameof(IInstallUnitDescriptor.IsPartOfAnOptionalWorkload), StringComparison.OrdinalIgnoreCase, out JToken optionalToken)) { _ = bool.TryParse(optionalToken.ToString(), out isPartOfAnOptionalWorkload); } Dictionary <string, string> details = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); foreach (JProperty property in descriptorObj.PropertiesOf(nameof(IInstallUnitDescriptor.Details))) { if (property.Value.Type != JTokenType.String) { parsedDescriptor = null; return(false); } details[property.Name] = property.Value.ToString(); } if (factory.TryCreateFromDetails(descriptorId, identifierToken.ToString(), mountPointId, isPartOfAnOptionalWorkload, details, out IInstallUnitDescriptor descriptor)) { parsedDescriptor = descriptor; return(true); } parsedDescriptor = null; return(false); }
public bool TryCreateFromDetails(IReadOnlyDictionary <string, string> details, out IInstallUnitDescriptor descriptor) { if (!details.TryGetValue(nameof(NupkgInstallUnitDescriptor.MountPointId), out string mountPointValue) || string.IsNullOrEmpty(mountPointValue) || !Guid.TryParse(mountPointValue, out Guid mountPointId)) { descriptor = null; return(false); } if (!details.TryGetValue(nameof(NupkgInstallUnitDescriptor.PackageName), out string packageName) || string.IsNullOrEmpty(packageName)) { descriptor = null; return(false); } if (!details.TryGetValue(nameof(NupkgInstallUnitDescriptor.Version), out string version) || string.IsNullOrEmpty(version)) { descriptor = null; return(false); } descriptor = new NupkgInstallUnitDescriptor(mountPointId, packageName, version); return(true); }
public void RemoveDescriptor(IInstallUnitDescriptor descriptor) { _cache.Remove(descriptor.Identifier); }
public void AddOrReplaceDescriptor(IInstallUnitDescriptor descriptor) { _cache[descriptor.Identifier] = descriptor; }
public UpdateUnitDescriptor(IInstallUnitDescriptor installUnitDescriptor, string installString, string displayString) { InstallUnitDescriptor = installUnitDescriptor; InstallString = installString; UpdateDisplayInfo = displayString; }
public bool TryCreateFromDetails(Guid descriptorId, string identifier, Guid mountPointId, bool isPartOfAnOptionalWorkload, IReadOnlyDictionary <string, string> details, out IInstallUnitDescriptor descriptor) { descriptor = new DefaultInstallUnitDescriptor(descriptorId, mountPointId, identifier, isPartOfAnOptionalWorkload); return(true); }
public void AddOrReplaceDescriptor(IInstallUnitDescriptor descriptor) { _cache[descriptor.DescriptorId] = descriptor; }
public bool TryGetDescriptorForTemplate(ITemplateInfo templateInfo, out IInstallUnitDescriptor descriptor) { descriptor = _cache.FirstOrDefault(entry => entry.Value.MountPointId == templateInfo.ConfigMountPointId).Value; return(descriptor != null); }
public void RemoveDescriptor(IInstallUnitDescriptor descriptor) { _cache.Remove(descriptor.DescriptorId); }
public static bool TryParse(IEngineEnvironmentSettings environmentSettings, JObject descriptorObj, out IInstallUnitDescriptor parsedDescriptor) { if (descriptorObj == null) { parsedDescriptor = null; return(false); } if (!descriptorObj.TryGetValue(nameof(IInstallUnitDescriptor.FactoryId), StringComparison.OrdinalIgnoreCase, out JToken factoryIdToken) || (factoryIdToken == null) || (factoryIdToken.Type != JTokenType.String) || !Guid.TryParse(factoryIdToken.ToString(), out Guid factoryId) || !environmentSettings.SettingsLoader.Components.TryGetComponent(factoryId, out IInstallUnitDescriptorFactory factory)) { parsedDescriptor = null; return(false); } Dictionary <string, string> details = new Dictionary <string, string>(); foreach (JProperty property in descriptorObj.PropertiesOf(nameof(IInstallUnitDescriptor.Details))) { if (property.Value.Type != JTokenType.String) { parsedDescriptor = null; return(false); } details[property.Name] = property.Value.ToString(); } if (factory.TryCreateFromDetails(details, out IInstallUnitDescriptor descriptor)) { parsedDescriptor = descriptor; return(true); } parsedDescriptor = null; return(false); }