Beispiel #1
0
        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);
                    }
                }
            }
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        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);
 }
Beispiel #11
0
 public void AddOrReplaceDescriptor(IInstallUnitDescriptor descriptor)
 {
     _cache[descriptor.DescriptorId] = descriptor;
 }
Beispiel #12
0
        public bool TryGetDescriptorForTemplate(ITemplateInfo templateInfo, out IInstallUnitDescriptor descriptor)
        {
            descriptor = _cache.FirstOrDefault(entry => entry.Value.MountPointId == templateInfo.ConfigMountPointId).Value;

            return(descriptor != null);
        }
Beispiel #13
0
 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);
        }