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()}"); } } }
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)); } } }
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); } } }
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)); } } }