コード例 #1
0
        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)));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
            }
        }