public async Task <DependencyChain> AddDependenciesFromManifest(IManifestLoader manifestLoader, Manifest manifest) { foreach (var dependency in manifest.Dependencies.Where(dependency => !NeededDependencies.Any(current => dependency.IsSatisfiedBy(current) && !InstalledDependencies.Any(current => dependency.IsSatisfiedBy(current))))) { Console.WriteLine("Calculating dependencies for " + manifest.Name); var existingInstalledDependency = InstalledDependencies.FirstOrDefault(x => x.Name == dependency.Name); var existingNeededDependency = NeededDependencies.FirstOrDefault(x => x.Name == dependency.Name); if (existingNeededDependency != null) { if (existingNeededDependency.Version.Major != dependency.Version.Major) { Console.WriteLine($"Dependency on {dependency.Name} version {dependency.Version.ToNormalizedString()} is incompatible with dependency on Version {existingNeededDependency.Version.ToNormalizedString()}"); throw new Exception("Incompatible dependency chain"); } if (existingNeededDependency.Version > dependency.Version) { Console.WriteLine($"Dependency on {dependency.Name} version {dependency.Version.ToNormalizedString()} is already satisfied by Version {existingNeededDependency.Version.ToNormalizedString()}"); } else { Console.WriteLine($"Upgrading dependency on {dependency.Name} version {existingNeededDependency.Version.ToNormalizedString()} to Version {dependency.Version.ToNormalizedString()}"); NeededDependencies.Remove(existingNeededDependency); NeededDependencies.Add(dependency); } } else if (existingInstalledDependency != null) { if (existingInstalledDependency.Version.Major != dependency.Version.Major) { Console.WriteLine($"Dependency on {dependency.Name} version {dependency.Version.ToNormalizedString()} is incompatible with dependency on Version {existingInstalledDependency.Version.ToNormalizedString()}"); throw new Exception("Incompatible dependency chain"); } if (existingInstalledDependency.Version > dependency.Version) { Console.WriteLine($"Dependency on {dependency.Name} version {dependency.Version.ToNormalizedString()} is already satisfied by Version {existingInstalledDependency.Version.ToNormalizedString()}"); } else { Console.WriteLine($"Upgrading dependency on {dependency.Name} version {existingInstalledDependency.Version.ToNormalizedString()} to Version {dependency.Version.ToNormalizedString()}"); InstalledDependencies.Remove(existingInstalledDependency); NeededDependencies.Add(dependency); } } else { NeededDependencies.Add(dependency); } var dependencyManifest = await manifestLoader.FromUri(dependency.ManifestUri); await AddDependenciesFromManifest(manifestLoader, dependencyManifest); } return(this); }
private static async Task <Manifest> GetLatestManifest(IManifestLoader manifestLoader, Manifest manifest) { var version = manifest.GetSemanticVersion(); if (version == null) { Console.WriteLine("Could not get proper SemanticVersion for " + manifest.Name); return(null); } return(await manifestLoader.FromUri(manifest.ManifestUri)); }
public async Task <Manifest> GetFullManifest(IManifestLoader manifestLoader) { return(await manifestLoader.FromUri(ManifestUri)); }