Beispiel #1
0
        static IEnumerable <string> FindAssemblyReferences(
            NuGetFramework projectFramework,
            DependencyInfoResource dependencyResource,
            FindLocalPackagesResource localPackageResource,
            SourceCacheContext cacheContext,
            string packageId)
        {
            var packageInfo = localPackageResource.FindPackagesById(packageId, NullLogger.Instance, CancellationToken.None).FirstOrDefault();

            if (packageInfo == null)
            {
                yield break;
            }
            using (var reader = packageInfo.GetReader())
            {
                var nearestFramework = reader.GetReferenceItems().GetNearest(projectFramework);
                if (nearestFramework != null)
                {
                    foreach (var assembly in nearestFramework.Items)
                    {
                        yield return(Path.GetFileName(assembly));
                    }
                }
            }

            var dependencyInfo = dependencyResource.ResolvePackage(packageInfo.Identity, projectFramework, cacheContext, NullLogger.Instance, CancellationToken.None).Result;

            foreach (var dependency in dependencyInfo.Dependencies)
            {
                foreach (var reference in FindAssemblyReferences(projectFramework, dependencyResource, localPackageResource, cacheContext, dependency.Id))
                {
                    yield return(reference);
                }
            }
        }
        public static async Task Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("Two arguments required: <local nuget directory> <remote nuget feed>");
                Environment.Exit(1);
            }
            // Local directory
            string localRepositoryPath = args[0];
            // Remote nuget feed
            string nugetFeedAddress = args[1];

            // Won't log a thing, sorry
            ILogger           logger            = NullLogger.Instance;
            CancellationToken cancellationToken = CancellationToken.None;

            // Setup our repos
            SourceCacheContext cache           = new SourceCacheContext();
            SourceRepository   localRepository = Repository.Factory.GetCoreV3(localRepositoryPath, FeedType.FileSystemV2);
            SourceRepository   nugetFeed       = Repository.Factory.GetCoreV3(nugetFeedAddress);

            // Get a package searcher by ID on remote
            FindPackageByIdResource remotePackageByIdResource =
                await nugetFeed.GetResourceAsync <FindPackageByIdResource>();

            // Get a local pacakges searcher on local
            FindLocalPackagesResource localPackagesResource =
                await localRepository.GetResourceAsync <FindLocalPackagesResource>();

            // List all local packages
            IEnumerable <LocalPackageInfo> localPacakges = localPackagesResource.GetPackages(logger, cancellationToken);

            //For each of them
            foreach (LocalPackageInfo packageInfo in localPacakges)
            {
                Console.WriteLine($"Found package {packageInfo.Nuspec.GetId()} {packageInfo.Nuspec.GetVersion()}");
                // Check if the package exists at that version on remote
                if (await remotePackageByIdResource.DoesPackageExistAsync(
                        packageInfo.Nuspec.GetId(),
                        packageInfo.Nuspec.GetVersion(),
                        cache,
                        logger,
                        cancellationToken))
                {
                    Console.WriteLine(
                        $"WARNING: Package {packageInfo.Nuspec.GetId()} already deployed at version {packageInfo.Nuspec.GetVersion()}");
                    // Set return code to 128 so CI can fail
                    Environment.ExitCode = 128;
                }
                else
                {
                    Console.WriteLine(
                        $"Package {packageInfo.Nuspec.GetId()} can be deployed at {packageInfo.Nuspec.GetVersion()}");
                }
            }
        }
Beispiel #3
0
        public async Task FindLocalPackagesResource_FindPackagesByIdBasicAsync()
        {
            using (var rootPackagesConfig = TestDirectory.Create())
                using (var rootUnzip = TestDirectory.Create())
                    using (var rootV3 = TestDirectory.Create())
                        using (var rootV2 = TestDirectory.Create())
                        {
                            // Arrange
                            var testLogger = new TestLogger();
                            await CreateFeedsAsync(rootV2, rootV3, rootUnzip, rootPackagesConfig, PackageSet1);

                            var expected = new HashSet <PackageIdentity>(new[]
                            {
                                PackageA1,
                                PackageA2,
                                PackageA3,
                                PackageA4,
                                PackageA5,
                            });

                            var resources = new FindLocalPackagesResource[]
                            {
                                new FindLocalPackagesResourcePackagesConfig(rootPackagesConfig),
                                new FindLocalPackagesResourceUnzipped(rootUnzip),
                                new FindLocalPackagesResourceV2(rootV2),
                                new FindLocalPackagesResourceV3(rootV3),
                                new FindLocalPackagesResourcePackagesConfig(UriUtility.CreateSourceUri(rootPackagesConfig).AbsoluteUri),
                                new FindLocalPackagesResourceUnzipped(UriUtility.CreateSourceUri(rootUnzip).AbsoluteUri),
                                new FindLocalPackagesResourceV2(UriUtility.CreateSourceUri(rootV2).AbsoluteUri),
                                new FindLocalPackagesResourceV3(UriUtility.CreateSourceUri(rootV3).AbsoluteUri)
                            };

                            foreach (var resource in resources)
                            {
                                // Act
                                var result = resource.FindPackagesById("a", testLogger, CancellationToken.None).ToList();

                                // Assert
                                Assert.True(expected.SetEquals(result.Select(p => p.Identity)));
                                Assert.True(expected.SetEquals(result.Select(p =>
                                {
                                    using (var reader = p.GetReader())
                                    {
                                        return(reader.GetIdentity());
                                    }
                                })));
                                Assert.True(expected.SetEquals(result.Select(p => p.Nuspec.GetIdentity())));
                                Assert.True(result.All(p => p.IsNupkg));
                            }
                        }
        }
Beispiel #4
0
        static IEnumerable<string> FindAssemblyReferences(
            NuGetFramework projectFramework,
            DependencyInfoResource dependencyResource,
            FindLocalPackagesResource localPackageResource,
            SourceCacheContext cacheContext,
            string packageId)
        {
            var packageInfo = localPackageResource.FindPackagesById(packageId, NullLogger.Instance, CancellationToken.None).FirstOrDefault();
            if (packageInfo == null) yield break;
            using (var reader = packageInfo.GetReader())
            {
                var assemblyReferences = reader.GetReferenceItems().GetNearest(projectFramework);
                if (assemblyReferences != null)
                {
                    foreach (var assembly in assemblyReferences.Items)
                    {
                        yield return Path.GetFileName(assembly);
                    }
                }

                var buildReferences = reader.GetBuildItems().GetNearest(projectFramework);
                if (buildReferences != null)
                {
                    var buildProperties = buildReferences.Items.FirstOrDefault(item => Path.GetExtension(item) == PropertyExtension);
                    if (buildProperties != null)
                    {
                        using (var propertyStream = reader.GetStream(buildProperties))
                        using (var propertyReader = XmlReader.Create(propertyStream))
                        {
                            while (propertyReader.ReadToFollowing(ReferenceElement))
                            {
                                var assemblyName = propertyReader.GetAttribute(IncludeAttribute);
                                yield return Path.ChangeExtension(assemblyName, DllExtension);
                            }
                        }
                    }
                }
            }

            var dependencyInfo = dependencyResource.ResolvePackage(packageInfo.Identity, projectFramework, cacheContext, NullLogger.Instance, CancellationToken.None).Result;
            foreach (var dependency in dependencyInfo.Dependencies)
            {
                foreach (var reference in FindAssemblyReferences(projectFramework, dependencyResource, localPackageResource, cacheContext, dependency.Id))
                {
                    yield return reference;
                }
            }
        }
        public async Task FindLocalPackagesResource_GetPackageBasic()
        {
            using (var rootPackagesConfig = TestDirectory.Create())
                using (var rootUnzip = TestDirectory.Create())
                    using (var rootV3 = TestDirectory.Create())
                        using (var rootV2 = TestDirectory.Create())
                        {
                            // Arrange
                            var testLogger = new TestLogger();
                            await CreateFeeds(rootV2, rootV3, rootUnzip, rootPackagesConfig, PackageSet1);

                            var expected = new HashSet <PackageIdentity>(new[]
                            {
                                PackageA1,
                                PackageA2,
                                PackageA3,
                                PackageA4,
                                PackageA5,
                            });

                            var resources = new FindLocalPackagesResource[]
                            {
                                new FindLocalPackagesResourcePackagesConfig(rootPackagesConfig),
                                new FindLocalPackagesResourceUnzipped(rootUnzip),
                                new FindLocalPackagesResourceV2(rootV2),
                                new FindLocalPackagesResourceV3(rootV3),
                                new FindLocalPackagesResourcePackagesConfig(UriUtility.CreateSourceUri(rootPackagesConfig).AbsoluteUri),
                                new FindLocalPackagesResourceUnzipped(UriUtility.CreateSourceUri(rootUnzip).AbsoluteUri),
                                new FindLocalPackagesResourceV2(UriUtility.CreateSourceUri(rootV2).AbsoluteUri),
                                new FindLocalPackagesResourceV3(UriUtility.CreateSourceUri(rootV3).AbsoluteUri)
                            };

                            foreach (var resource in resources)
                            {
                                // Act
                                var result  = resource.GetPackage(PackageA3, testLogger, CancellationToken.None);
                                var result2 = resource.GetPackage(UriUtility.CreateSourceUri(result.Path), testLogger, CancellationToken.None);

                                // Assert
                                Assert.Equal(PackageA3, result.Identity);
                                Assert.Equal(PackageA3, result2.Identity);
                            }
                        }
        }
        public void FindLocalPackagesResource_EmptyFolders()
        {
            using (var emptyDir = TestDirectory.Create())
            {
                // Arrange
                var testLogger   = new TestLogger();
                var doesNotExist = Path.Combine(emptyDir, "doesNotExist");

                var resources = new FindLocalPackagesResource[]
                {
                    new FindLocalPackagesResourcePackagesConfig(doesNotExist),
                    new FindLocalPackagesResourcePackagesConfig(emptyDir),
                    new FindLocalPackagesResourceUnzipped(doesNotExist),
                    new FindLocalPackagesResourceV2(doesNotExist),
                    new FindLocalPackagesResourceV3(doesNotExist),
                    new FindLocalPackagesResourceUnzipped(emptyDir),
                    new FindLocalPackagesResourceV2(emptyDir),
                    new FindLocalPackagesResourceV3(emptyDir),
                    new FindLocalPackagesResourcePackagesConfig(UriUtility.CreateSourceUri(doesNotExist).AbsoluteUri),
                    new FindLocalPackagesResourceUnzipped(UriUtility.CreateSourceUri(doesNotExist).AbsoluteUri),
                    new FindLocalPackagesResourceV2(UriUtility.CreateSourceUri(doesNotExist).AbsoluteUri),
                    new FindLocalPackagesResourceV3(UriUtility.CreateSourceUri(doesNotExist).AbsoluteUri),
                };

                foreach (var resource in resources)
                {
                    // Act
                    var getPackages  = resource.GetPackages(testLogger, CancellationToken.None).ToList();
                    var findPackages = resource.FindPackagesById("a", testLogger, CancellationToken.None).ToList();
                    var package      = resource.GetPackage(PackageA1, testLogger, CancellationToken.None);

                    // Assert
                    Assert.Equal(0, getPackages.Count);
                    Assert.Equal(0, findPackages.Count);
                    Assert.Null(package);
                }
            }
        }
Beispiel #7
0
        public async Task FindLocalPackagesResource_GetPackagesBasic()
        {
            using (var rootPackagesConfig = TestFileSystemUtility.CreateRandomTestFolder())
                using (var rootUnzip = TestFileSystemUtility.CreateRandomTestFolder())
                    using (var rootV3 = TestFileSystemUtility.CreateRandomTestFolder())
                        using (var rootV2 = TestFileSystemUtility.CreateRandomTestFolder())
                        {
                            // Arrange
                            var testLogger = new TestLogger();
                            await CreateFeeds(rootV2, rootV3, rootUnzip, rootPackagesConfig, PackageSet1);

                            var expected = new HashSet <PackageIdentity>(PackageSet1);

                            var resources = new FindLocalPackagesResource[]
                            {
                                new FindLocalPackagesResourcePackagesConfig(rootPackagesConfig),
                                new FindLocalPackagesResourceUnzipped(rootUnzip),
                                new FindLocalPackagesResourceV2(rootV2),
                                new FindLocalPackagesResourceV3(rootV3),
                                new FindLocalPackagesResourcePackagesConfig(UriUtility.CreateSourceUri(rootPackagesConfig).AbsoluteUri),
                                new FindLocalPackagesResourceUnzipped(UriUtility.CreateSourceUri(rootUnzip).AbsoluteUri),
                                new FindLocalPackagesResourceV2(UriUtility.CreateSourceUri(rootV2).AbsoluteUri),
                                new FindLocalPackagesResourceV3(UriUtility.CreateSourceUri(rootV3).AbsoluteUri)
                            };

                            foreach (var resource in resources)
                            {
                                // Act
                                var result = resource.GetPackages(testLogger, CancellationToken.None).ToList();

                                // Assert
                                Assert.True(expected.SetEquals(result.Select(p => p.Identity)));
                                Assert.True(expected.SetEquals(result.Select(p => p.GetReader().GetIdentity())));
                                Assert.True(expected.SetEquals(result.Select(p => p.Nuspec.GetIdentity())));
                                Assert.True(result.All(p => p.IsNupkg));
                            }
                        }
        }