public BuildSolutionStep UpdatePackages() { var packageWithFrameworks = packages as PackageWithFramework[] ?? packages.ToArray(); packageWithFrameworks = packageWithFrameworks .OrderBy(x => !previousVersions.ContainsKey(x.Id) || x.IsLatestVersion(previousVersions[x.Id])) .ToArray(); var packageUpdateResults = new List <PackageUpdateResult>(); foreach (var package in packageWithFrameworks) { var isLatestVersion = previousVersions.ContainsKey(package.Id) && package.IsLatestVersion(previousVersions[package.Id]); if (isLatestVersion) { continue; } package.IncrementAssemblyInfo(buildAndRevision); } IReadOnlyDictionary <string, Func <Version> > packagesVersion = packageWithFrameworks .ToDictionary(k => k.Id, v => (Func <Version>)(() => v.Version)); foreach (var package in packageWithFrameworks) { var nugetDependecies = package.TryUpdateNuspecDependencies(packagesVersion).ToArray(); var isLatestVersion = previousVersions.ContainsKey(package.Id) && package.IsLatestVersion(previousVersions[package.Id]); if (!nugetDependecies.Any() && isLatestVersion) { continue; } package.UpdateNuspecVersion(); var updateDataResult = new PackageUpdateDataResult( package.Version, nugetDependecies, package.FrameworkPackages); var packageUpdate = new PackageUpdateResult(package.Id, updateDataResult); packageUpdateResults.Add(packageUpdate); } return(new BuildSolutionStep(buildAndRevision, solutionSystemInfo, new NugetPackageResultCollection(packageUpdateResults))); }
public void TestVersionNumberComparison() { IInsertionApiFactory apiFactory = new InsertionApiFactory(); IInsertionApi api = apiFactory.Create(TimeSpan.FromSeconds(75), TimeSpan.FromSeconds(4)); UpdateResults results; string assetsDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Assets"); string manifestFile = Path.Combine(assetsDirectory, "manifest.json"); string defaultConfigFile = Path.Combine(assetsDirectory, "default.config"); IEnumerable <Regex> whitelistedPackages = new Regex[] { new Regex(@"^VS\.Redist\.Common\.NetCore\.SharedFramework\.(x86|x64)\.[0-9]+\.[0-9]+$") }; ImmutableHashSet <string> ignoredPackages = ImmutableHashSet <string> .Empty; results = api.UpdateVersions( manifestFile, defaultConfigFile, whitelistedPackages, ignoredPackages, null, null, null); Assert.IsTrue(results.UpdatedPackages.Any(), "Some packages should have been updated."); PackageUpdateResult packx64 = results.UpdatedPackages.FirstOrDefault(p => p.PackageId == "VS.Redist.Common.NetCore.SharedFramework.x64.3.1"); Assert.IsNotNull(packx64); Assert.AreEqual(packx64.NewVersion, "4.1.2-servicing.20067.4"); PackageUpdateResult packx86 = results.UpdatedPackages.FirstOrDefault(p => p.PackageId == "VS.Redist.Common.NetCore.SharedFramework.x86.3.1"); Assert.IsNotNull(packx86); Assert.AreEqual("3.1.3-servicing.20067.4", packx86.NewVersion); }
private async Task <IEnumerable <string> > GetPackageFileListAsync(DefaultConfigUpdater defaultConfigUpdater, PackageUpdateResult packageUpdate, CancellationToken?cancellationToken = null) { string?link = defaultConfigUpdater.GetPackageLink(packageUpdate.PackageId); if (link == null) { // We don't know where nuget package should be extracted to. return(Enumerable.Empty <string>()); } SourceCacheContext cache = new SourceCacheContext(); NuGetVersion packageVersion = new NuGetVersion(packageUpdate.NewVersion); // We have to specify some cancellation token, if caller doesn't provide one CancellationTokenSource?ownedCancellationToken = cancellationToken == null ? new CancellationTokenSource() : null; // Stream that will receive the package bytes using MemoryStream packageStream = new MemoryStream(); try { SourceRepository rep = Repository.Factory.GetCoreV3(_feed, FeedType.HttpV3); if (_credentials != null) { rep.PackageSource.Credentials = _credentials; } FindPackageByIdResource resource = await rep.GetResourceAsync <FindPackageByIdResource>().ConfigureAwait(false); Trace.WriteLine($"Downloading package {packageUpdate.PackageId}-{packageUpdate.NewVersion} into memory."); bool downloadResult = await resource.CopyNupkgToStreamAsync( packageUpdate.PackageId, packageVersion, packageStream, cache, NullLogger.Instance, cancellationToken ?? ownedCancellationToken !.Token) .ConfigureAwait(false); if (!downloadResult) { Trace.WriteLine($"There is an issue downloading nuget package: {packageUpdate.PackageId}"); return(Enumerable.Empty <string>()); } Trace.WriteLine($"Downloading complete for package {packageUpdate.PackageId}."); return(GetNugetFileList(packageStream, link)); } catch (Exception e) { Trace.WriteLine($"There is an issue downloading nuget package."); Trace.WriteLine(e.ToString()); return(Enumerable.Empty <string>()); } finally { ownedCancellationToken?.Dispose(); } }