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); }
/// <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); } }
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); } } }