Esempio n. 1
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var jobj = JObject.Load(reader);

            var result = new MetaPackages();

            foreach (var property in jobj.Properties())
            {
                if (property.Value == null || property.Value.Type == JTokenType.Null)
                {
                    continue;
                }

                var metaPackageId = property.Name;

                var metaPackageArray = property.Value as JArray;

                if (metaPackageArray == null)
                {
                    throw new JsonSerializationException($"Expected array for property {metaPackageId}");
                }

                foreach (var package in metaPackageArray)
                {
                    result.AddMetaPackageMapping(package.ToString(), metaPackageId);
                }
            }

            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// Merges another packageIndex into this package index.  For any overlapping
        /// data 'other' has precedence.
        /// </summary>
        /// <param name="other"></param>
        public void Merge(PackageIndex other)
        {
            if (other.IndexSources.IsSubsetOf(IndexSources))
            {
                return;
            }

            // if pre-release is set on this index and different than the other
            // move pre-release to individual infos
            if (PreRelease != null && !PreRelease.Equals(other.PreRelease))
            {
                foreach (var info in Packages.Values)
                {
                    if (info.PreRelease == null)
                    {
                        info.PreRelease = PreRelease;
                    }
                }

                PreRelease = null;
            }

            foreach (var otherPackage in other.Packages)
            {
                var         otherInfo = otherPackage.Value;
                PackageInfo info;

                if (Packages.TryGetValue(otherPackage.Key, out info))
                {
                    info.Merge(otherInfo);
                }
                else
                {
                    Packages[otherPackage.Key] = info = otherInfo;

                    // if pre-release is set on the other index and doesn't match the value of the info, set it
                    if (other.PreRelease != null && !other.PreRelease.Equals(info.PreRelease))
                    {
                        info.PreRelease = other.PreRelease;
                    }
                }
            }

            foreach (var otherModuleToPackage in other.ModulesToPackages)
            {
                ModulesToPackages[otherModuleToPackage.Key] = otherModuleToPackage.Value;
            }

            MetaPackages.Merge(other.MetaPackages);

            foreach (var otherIndexSource in other.IndexSources)
            {
                IndexSources.Add(otherIndexSource);
            }
        }
Esempio n. 3
0
 public void Merge(MetaPackages other)
 {
     foreach (var metaPackage in other.packageToMetaPackage)
     {
         // only merge a meta-package definition if it wasn't defined
         if (!packageToMetaPackage.ContainsKey(metaPackage.Key))
         {
             packageToMetaPackage.Add(metaPackage.Key, metaPackage.Value);
         }
     }
 }