private PackageHelperTest(
     TestDirectory testDirectory,
     PackageArchiveReader reader,
     TestPackagesCore.TempFile tempFile)
 {
     Reader         = reader;
     _testDirectory = testDirectory;
     _tempFile      = tempFile;
     Resolver       = new PackagePathResolver(_testDirectory.Path);
     Root           = testDirectory.Path;
 }
Пример #2
0
        public async Task GetInstalledSatelliteFilesAsync_ReturnsEmptyEnumerableForNoInstalledSatelliteFiles()
        {
            using (var test = PackageHelperTest.Create(TestPackagesCore.GetPackageContentReaderTestPackage()))
            {
                using (var testDirectory = TestDirectory.Create())
                {
                    var packageIdentity     = new PackageIdentity("A", new NuGetVersion("1.2.3"));
                    var packagePathResolver = new PackagePathResolver(testDirectory.Path);
                    var packageFileInfo     = await TestPackagesCore.GetRuntimePackageAsync(
                        testDirectory.Path,
                        packageIdentity.Id,
                        packageIdentity.Version.ToNormalizedString());

                    var satellitePackageInfo = await TestPackagesCore.GetSatellitePackageAsync(
                        testDirectory.Path,
                        packageIdentity.Id,
                        packageIdentity.Version.ToNormalizedString(),
                        language : "fr");

                    // Install runtime package
                    using (var packageReader = new PackageArchiveReader(File.OpenRead(packageFileInfo.FullName)))
                        using (var packageStream = File.OpenRead(packageFileInfo.FullName))
                        {
                            await PackageExtractor.ExtractPackageAsync(
                                test.Root,
                                packageReader,
                                packageStream,
                                packagePathResolver,
                                new PackageExtractionContext(
                                    PackageSaveMode.Defaultv2,
                                    PackageExtractionBehavior.XmlDocFileSaveMode,
                                    clientPolicyContext : null,
                                    logger : NullLogger.Instance),
                                CancellationToken.None);
                        }

                    using (var packageReader = new PackageArchiveReader(File.OpenRead(satellitePackageInfo.FullName)))
                    {
                        var result = await PackageHelper.GetInstalledSatelliteFilesAsync(
                            packageReader,
                            packagePathResolver,
                            PackageSaveMode.Defaultv3,
                            CancellationToken.None);

                        var runtimePackageDirectory = result.Item1;
                        var satelliteFiles          = result.Item2;
                        var packageDirectoryName    = $"{packageIdentity.Id}.{packageIdentity.Version.ToNormalizedString()}";

                        Assert.Equal(Path.Combine(testDirectory.Path, packageDirectoryName), runtimePackageDirectory);
                        Assert.Empty(satelliteFiles);
                    }
                }
            }
        }
        public void GetInstalledPackageFilePath_ReturnsNullIfFileDoesNotExist(bool useSideBySidePaths)
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var target = new PackagePathResolver(testDirectory.Path, useSideBySidePaths);

                var filePath = target.GetInstalledPackageFilePath(PackageIdentity);

                Assert.Null(filePath);
            }
        }
Пример #4
0
 public FolderNuGetProject(string root, PackagePathResolver packagePathResolver)
 {
     if (root == null)
     {
         throw new ArgumentNullException(nameof(root));
     }
     Root = root;
     PackagePathResolver = packagePathResolver;
     InternalMetadata.Add(NuGetProjectMetadataKeys.Name, root);
     InternalMetadata.Add(NuGetProjectMetadataKeys.TargetFramework, NuGetFramework.AnyFramework);
 }
Пример #5
0
 public FolderNuGetProject(string root)
 {
     if (root == null)
     {
         throw new ArgumentNullException("root");
     }
     Root = root;
     PackagePathResolver = new PackagePathResolver(root);
     PackageSaveMode     = PackageSaveModes.Nupkg;
     InternalMetadata.Add(NuGetProjectMetadataKeys.Name, root);
     InternalMetadata.Add(NuGetProjectMetadataKeys.TargetFramework, NuGetFramework.AnyFramework);
 }
        public async Task InstallPackageAsync_WithSourceControlEnabled()
        {
            // Arrange
            var packageIdentity = new PackageIdentity("packageA", new NuGetVersion("1.0.0"));

            using (var randomTestSourcePath = TestDirectory.Create())
                using (var randomTestDestinationPath = TestDirectory.Create())
                {
                    var packageFileInfo = TestPackagesGroupedByFolder.GetLegacyTestPackage(
                        randomTestSourcePath,
                        packageIdentity.Id,
                        packageIdentity.Version.ToNormalizedString());

                    var folderNuGetProject  = new FolderNuGetProject(randomTestDestinationPath);
                    var packagePathResolver = new PackagePathResolver(randomTestDestinationPath);
                    var packageInstallPath  = packagePathResolver.GetInstallPath(packageIdentity);
                    var nupkgFilePath
                        = Path.Combine(packageInstallPath, packagePathResolver.GetPackageFileName(packageIdentity));
                    var testSourceControlManager = new TestSourceControlManager();
                    var testNuGetProjectContext  = new TestNuGetProjectContext()
                    {
                        SourceControlManagerProvider = new TestSourceControlManagerProvider(testSourceControlManager)
                    };

                    var token = CancellationToken.None;
                    using (var packageStream = GetDownloadResourceResult(packageFileInfo))
                    {
                        // Act
                        await folderNuGetProject.InstallPackageAsync(
                            packageIdentity,
                            packageStream,
                            testNuGetProjectContext,
                            token);
                    }

                    // Assert
                    Assert.True(File.Exists(nupkgFilePath));

                    Assert.Equal(5, testSourceControlManager.PendAddedFiles.Count);
                    Assert.True(testSourceControlManager.PendAddedFiles.Contains(nupkgFilePath));
                    var expectedEntries = new[]
                    {
                        "lib/test.dll",
                        "lib/net40/test40.dll",
                        "lib/net40/test40b.dll",
                        "lib/net45/test45.dll"
                    };

                    Assert.All(
                        expectedEntries.Select(e => Path.Combine(packageInstallPath, e.Replace('/', Path.DirectorySeparatorChar))),
                        item => Assert.Contains(item, testSourceControlManager.PendAddedFiles));
                }
        }
        public async Task InstallPackageAsync_WithSourceControlDisabled()
        {
            // Arrange
            var packageIdentity = new PackageIdentity("packageA", new NuGetVersion("1.0.0"));

            using (var randomTestSourcePath = TestDirectory.Create())
                using (var randomTestDestinationPath = TestDirectory.Create())
                {
                    var packageFileInfo = TestPackagesGroupedByFolder.GetLegacyTestPackage(
                        randomTestSourcePath,
                        packageIdentity.Id,
                        packageIdentity.Version.ToNormalizedString());

                    // Create a nuget.config file with source control disabled
                    File.WriteAllText(
                        Path.Combine(randomTestSourcePath, "nuget.config"),
                        @"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
  <solution>
    <add key=""disableSourceControlIntegration"" value=""true"" />
  </solution >
</configuration>");

                    var settings = new Settings(randomTestSourcePath);

                    var folderNuGetProject  = new FolderNuGetProject(randomTestDestinationPath);
                    var packagePathResolver = new PackagePathResolver(randomTestDestinationPath);
                    var packageInstallPath  = packagePathResolver.GetInstallPath(packageIdentity);
                    var nupkgFilePath
                        = Path.Combine(packageInstallPath, packagePathResolver.GetPackageFileName(packageIdentity));
                    var testSourceControlManager = new TestSourceControlManager(settings);
                    var testNuGetProjectContext  = new TestNuGetProjectContext()
                    {
                        SourceControlManagerProvider = new TestSourceControlManagerProvider(testSourceControlManager)
                    };

                    var token = CancellationToken.None;
                    using (var packageStream = GetDownloadResourceResult(packageFileInfo))
                    {
                        // Act
                        await folderNuGetProject.InstallPackageAsync(
                            packageIdentity,
                            packageStream,
                            testNuGetProjectContext,
                            token);
                    }

                    // Assert
                    Assert.True(File.Exists(nupkgFilePath));

                    Assert.Equal(0, testSourceControlManager.PendAddedFiles.Count);
                }
        }
Пример #8
0
        /// <summary>
        /// Initialize NugetStore using <paramref name="rootDirectory"/> as location of the local copies,
        /// and a configuration file <paramref name="configFile"/> as well as an override configuration
        /// file <paramref name="overrideFile"/> where all settings of <paramref name="overrideFile"/> also
        /// presents in <paramref name="configFile"/> take precedence.
        /// </summary>
        /// <param name="rootDirectory">The location of the Nuget store.</param>
        public NugetStore(string rootDirectory, string configFile = DefaultConfig)
        {
            RootDirectory = rootDirectory ?? throw new ArgumentNullException(nameof(rootDirectory));

            settings = NuGet.Configuration.Settings.LoadDefaultSettings(rootDirectory);

            // Add dev source
            Directory.CreateDirectory(Environment.ExpandEnvironmentVariables(DevSource));
            CheckPackageSource("Xenko Dev", DevSource);
            CheckPackageSource("Xenko", DefaultPackageSource);

            // Override file does not exist, fallback to default config file
            var configFileName = configFile;
            var configFilePath = Path.Combine(rootDirectory, configFileName);

            if (File.Exists(configFilePath))
            {
                localSettings = NuGet.Configuration.Settings.LoadDefaultSettings(rootDirectory, configFileName, machineWideSettings: null);

                // Replicate packageSources in user config so that NuGet restore can find them as well
                foreach (var x in localSettings.GetSettingValues("packageSources", true))
                {
                    CheckPackageSource(x.Key, x.Value);
                }
            }

            InstallPath = SettingsUtility.GetGlobalPackagesFolder(settings);

            var pathContext = NuGetPathContext.Create(settings);

            InstalledPathResolver = new FallbackPackagePathResolver(pathContext);
            var packageSourceProvider = new PackageSourceProvider(settings);

            var availableSources = packageSourceProvider.LoadPackageSources().Where(source => source.IsEnabled);
            var packageSources   = new List <PackageSource>();

            packageSources.AddRange(availableSources);
            PackageSources = packageSources;

            // Setup source provider as a V3 only.
            sourceRepositoryProvider = new NugetSourceRepositoryProvider(packageSourceProvider, this);

            manager = new NuGetPackageManager(sourceRepositoryProvider, settings, InstallPath);
            // Override PackagePathResolver
            // Workaround for https://github.com/NuGet/Home/issues/6639
            manager.PackagesFolderNuGetProject.GetType().GetProperty("PackagePathResolver", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(manager.PackagesFolderNuGetProject, new PackagePathResolverV3(InstallPath));

            // Obsolete (Xenko 2.x support)
            InstallPathV2  = Path.Combine(RootDirectory, DefaultGamePackagesDirectory);
            managerV2      = new NuGetPackageManager(sourceRepositoryProvider, settings, InstallPathV2);
            PathResolverV2 = new PackagePathResolver(InstallPathV2);
        }
Пример #9
0
        public void GetPackageFileName_ReturnsPackageFileName(bool useSideBySidePaths, string expected)
        {
            // Arrange
            var target = new PackagePathResolver(
                rootDirectory: InMemoryRootDirectory,
                useSideBySidePaths: useSideBySidePaths);

            // Act
            var actual = target.GetPackageFileName(PackageIdentity);

            // Assert
            Assert.Equal(expected, actual);
        }
Пример #10
0
        /// <summary>
        /// Create a packagets.config folder of nupkgs
        /// </summary>
        public static async Task CreateFolderFeedPackagesConfigAsync(string root, params string[] nupkgPaths)
        {
            var resolver = new PackagePathResolver(root);
            var context  = new PackageExtractionContext(NullLogger.Instance);

            foreach (var path in nupkgPaths)
            {
                using (var stream = File.OpenRead(path))
                {
                    await PackageExtractor.ExtractPackageAsync(stream, resolver, context, CancellationToken.None);
                }
            }
        }
Пример #11
0
        public NuGetPackageManager(string packagesDirectory)
        {
            m_AssemblyLoader = Assembly.Load;

            Logger            = new NullLogger();
            PackagesDirectory = packagesDirectory;
            m_Providers       = new List <Lazy <INuGetResourceProvider> >();
            m_Providers.AddRange(Repository.Provider.GetCoreV3()); // Add v3 API support

            const string nugetFile = "NuGet.Config";

            if (!Directory.Exists(packagesDirectory))
            {
                Directory.CreateDirectory(packagesDirectory);
            }

            var nugetConfig = Path.Combine(packagesDirectory, nugetFile);

            if (!File.Exists(nugetConfig))
            {
                var nl = Environment.NewLine;

                File.WriteAllText(nugetConfig,
                                  $"<?xml version=\"1.0\" encoding=\"utf-8\"?>{nl}"
                                  + $"<configuration>{nl}"
                                  + $"    <packageSources>{nl}"
                                  + $"        <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" protocolVersion=\"3\" />{nl}"
                                  + $"    </packageSources>{nl}"
                                  + "</configuration>");
            }

            m_NugetSettings = Settings.LoadDefaultSettings(packagesDirectory, nugetFile, null);

            m_FrameworkReducer = new FrameworkReducer();

            var frameworkName = Assembly.GetExecutingAssembly().GetCustomAttributes(true)
                                .OfType <System.Runtime.Versioning.TargetFrameworkAttribute>()
                                .Select(x => x.FrameworkName)
                                .FirstOrDefault();

            m_CurrentFramework = frameworkName == null
                ? NuGetFramework.AnyFramework
                : NuGetFramework.ParseFrameworkName(frameworkName, new DefaultFrameworkNameProvider());

            m_PackagePathResolver     = new PackagePathResolver(packagesDirectory);
            m_PackageResolver         = new PackageResolver();
            m_LoadedPackageAssemblies = new Dictionary <string, List <NuGetAssembly> >();
            m_ResolveCache            = new Dictionary <string, Assembly>();
            m_IgnoredDependendencies  = new HashSet <string>();
            InstallAssemblyResolver();
        }
Пример #12
0
        /// <summary>
        /// Initializes a new <see cref="FolderNuGetProject" /> class.
        /// </summary>
        /// <param name="root">The folder project root path.</param>
        /// <param name="packagePathResolver">A package path resolver.</param>
        /// <param name="targetFramework">Project target framework.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="root" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="packagePathResolver" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="targetFramework" /> is <c>null</c>.</exception>
        public FolderNuGetProject(string root, PackagePathResolver packagePathResolver, NuGetFramework targetFramework)
        {
            if (targetFramework == null)
            {
                throw new ArgumentNullException(nameof(targetFramework));
            }

            Root = root ?? throw new ArgumentNullException(nameof(root));
            PackagePathResolver = packagePathResolver ?? throw new ArgumentNullException(nameof(packagePathResolver));

            InternalMetadata.Add(NuGetProjectMetadataKeys.Name, root);
            InternalMetadata.Add(NuGetProjectMetadataKeys.TargetFramework, targetFramework);
            _framework = targetFramework;
        }
Пример #13
0
        public ProjectConverter(ProjectConverterSettings converterSettings, ISettings nugetSettings)
        {
            _converterSettings = converterSettings ?? throw new ArgumentNullException(nameof(converterSettings));

            _nugetSettings = nugetSettings ?? throw new ArgumentNullException(nameof(nugetSettings));

            _repositoryPath = Path.GetFullPath(SettingsUtility.GetRepositoryPath(_nugetSettings)).Trim(Path.DirectorySeparatorChar);

            _globalPackagesFolder = Path.GetFullPath(SettingsUtility.GetGlobalPackagesFolder(_nugetSettings)).Trim(Path.DirectorySeparatorChar);

            PackagePathResolver = new PackagePathResolver(_repositoryPath);

            VersionFolderPathResolver = new VersionFolderPathResolver(_globalPackagesFolder);
        }
Пример #14
0
        public NugetPackageInstaller(FileIO io)
        {
            var nugetSettings            = Settings.LoadDefaultSettings(root: null);
            var sourceRepositoryProvider = new SourceRepositoryProvider(new PackageSourceProvider(nugetSettings), Repository.Provider.GetCoreV3());

            this.io                  = io;
            this.nugetFramework      = NuGetFramework.ParseFolder("netstandard2.0");
            this.repositories        = sourceRepositoryProvider.GetRepositories().ToList();
            this.nugetCache          = new SourceCacheContext();
            this.packagePathResolver = new PackagePathResolver(io.GetFullFileSystemPath("packages"));
            this.globalPackageFolder = SettingsUtility.GetGlobalPackagesFolder(nugetSettings);
            this.frameworkReducer    = new FrameworkReducer();
            this.clientPolicy        = ClientPolicyContext.GetClientPolicy(nugetSettings, NuGet.Common.NullLogger.Instance);
        }
Пример #15
0
        /// <summary>
        /// Initializes a new <see cref="FolderNuGetProject" /> class.
        /// </summary>
        /// <param name="root">The folder project root path.</param>
        /// <param name="packagePathResolver">A package path resolver.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="root" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="packagePathResolver" />
        /// is <c>null</c>.</exception>
        public FolderNuGetProject(string root, PackagePathResolver packagePathResolver)
        {
            if (root == null)
            {
                throw new ArgumentNullException(nameof(root));
            }

            if (packagePathResolver == null)
            {
                throw new ArgumentNullException(nameof(packagePathResolver));
            }

            Initialize(root, packagePathResolver);
        }
        public static async Task InstallWithDependencies(string packageId, string version, string frameworkVersion, ILogger logger)
        {
            var packageVersion = NuGetVersion.Parse(version);
            var nuGetFramework = NuGetFramework.ParseFolder(frameworkVersion);
            var settings       = Settings.LoadDefaultSettings(root: null);
            var feed           = new Uri("https://api.nuget.org/v3/index.json");
            var repositoryList = new List <SourceRepository>();

            repositoryList.Add(Repository.Factory.GetCoreV3(feed.AbsoluteUri, FeedType.HttpV3));
            var sourceRepositoryProvider = new SourceRepositoryProvider(settings, Repository.Provider.GetCoreV3());

            using (var cacheContext = new SourceCacheContext())
            {
                var availablePackages = new HashSet <SourcePackageDependencyInfo>(PackageIdentityComparer.Default);
                await GetPackageDependencies(
                    new PackageIdentity(packageId, packageVersion),
                    nuGetFramework, cacheContext, logger, repositoryList, availablePackages);

                var resolverContext = new PackageResolverContext(
                    DependencyBehavior.Lowest,
                    new[] { packageId },
                    Enumerable.Empty <string>(),
                    Enumerable.Empty <PackageReference>(),
                    Enumerable.Empty <PackageIdentity>(),
                    availablePackages,
                    sourceRepositoryProvider.GetRepositories().Select(s => s.PackageSource),
                    logger);

                var resolver          = new PackageResolver();
                var packagesToInstall = resolver.Resolve(resolverContext, CancellationToken.None)
                                        .Select(p => availablePackages.Single(x => PackageIdentityComparer.Default.Equals(x, p)));
                var packagePathResolver      = new PackagePathResolver(Path.GetFullPath("packages"));
                var packageExtractionContext = new PackageExtractionContext(
                    PackageSaveMode.Defaultv3,
                    XmlDocFileSaveMode.None,
                    ClientPolicyContext.GetClientPolicy(settings, logger),
                    logger);
                //new PackageSignatureVerifier(
                //  signatureVerification.GetSignatureVerificationProviders()),
                //SignedPackageVerifierSettings.GetDefault());
                var frameworkReducer = new FrameworkReducer();

                foreach (var packageToInstall in packagesToInstall)
                {
                    InstallPackages(packagePathResolver, packageToInstall, cacheContext, packageExtractionContext,
                                    frameworkReducer, nuGetFramework, settings, logger);
                }
            }
        }
Пример #17
0
        public void GetInstalledPackageFilePath_ReturnsInstalledPackageFilePath(bool useSideBySidePaths, string expectedFileName)
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var expectedFilePath = Path.Combine(testDirectory.Path, expectedFileName);

                File.WriteAllText(expectedFilePath, string.Empty);

                var target = new PackagePathResolver(testDirectory.Path, useSideBySidePaths);

                var actualFilePath = target.GetInstalledPackageFilePath(PackageIdentity);

                Assert.Equal(expectedFilePath, actualFilePath);
            }
        }
Пример #18
0
        public void GetInstallPath_ReturnsInstallPath(bool useSideBySidePaths, string expected)
        {
            // Arrange
            var target = new PackagePathResolver(
                rootDirectory: InMemoryRootDirectory,
                useSideBySidePaths: useSideBySidePaths);

            expected = Path.Combine(InMemoryRootDirectory, expected);

            // Act
            var actual = target.GetInstallPath(PackageIdentity);

            // Assert
            Assert.Equal(expected, actual);
        }
Пример #19
0
 public NugetFolderProject(
     IFileSystem fileSystem,
     INuGetContentResolver contentResolver,
     ICakeConfiguration config,
     ICakeLog log,
     PackagePathResolver pathResolver,
     string root) : base(root, pathResolver)
 {
     _fileSystem        = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));
     _contentResolver   = contentResolver ?? throw new ArgumentNullException(nameof(contentResolver));
     _config            = config ?? throw new ArgumentNullException(nameof(config));
     _log               = log ?? throw new ArgumentNullException(nameof(log));
     _pathResolver      = pathResolver ?? throw new ArgumentNullException(nameof(pathResolver));
     _installedPackages = new HashSet <PackageIdentity>();
 }
Пример #20
0
        public void GetInstalledPackageFilePath_ThrowsForNullVersion()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var target = new PackagePathResolver(testDirectory.Path);

                PackageIdentity nullVersionPackageIdentity = new PackageIdentity("PackageA", null);

                // Act
                var exception = Assert.Throws <ArgumentException>(paramName: "packageIdentity",
                                                                  () => target.GetInstalledPackageFilePath(nullVersionPackageIdentity));

                Assert.Contains("'Version' cannot be null.", exception.Message);
            }
        }
Пример #21
0
        private void InitNuGet()
        {
            _nugetSettings = Settings.LoadDefaultSettings(root: null);
            _nugetSourceRepositoryProvider = new SourceRepositoryProvider(_nugetSettings, Repository.Provider.GetCoreV3());
            _nuGetFramework    = NuGetFramework.ParseFolder("netstandard2.0");
            _packagesDirectory = _fileSystemManager.BuildFilePath(Path.Combine(_neonConfig.Plugins.Directory, "packages"));

            _fileSystemManager.CreateDirectory(Path.Combine(_neonConfig.Plugins.Directory, "packages"));
            _packagePathResolver = new PackagePathResolver(_packagesDirectory);

            _packageExtractionContext = new PackageExtractionContext(
                PackageSaveMode.Defaultv3,
                XmlDocFileSaveMode.None,
                ClientPolicyContext.GetClientPolicy(_nugetSettings, NullLogger.Instance), NullLogger.Instance);
        }
Пример #22
0
        public async Task DeletePackage_DeletesPackage()
        {
            // Arrange
            using (var randomTestSourcePath = TestDirectory.Create())
                using (var randomTestDestinationPath = TestDirectory.Create())
                {
                    var packageIdentity = new PackageIdentity("packageA", new NuGetVersion("1.0.0"));
                    var packageFileInfo = TestPackagesGroupedByFolder.GetLegacyContentPackage(
                        randomTestSourcePath,
                        packageIdentity.Id,
                        packageIdentity.Version.ToNormalizedString());
                    var folderNuGetProject      = new FolderNuGetProject(randomTestDestinationPath);
                    var packagePathResolver     = new PackagePathResolver(randomTestDestinationPath);
                    var packageInstallPath      = packagePathResolver.GetInstallPath(packageIdentity);
                    var nupkgFilePath           = Path.Combine(packageInstallPath, packagePathResolver.GetPackageFileName(packageIdentity));
                    var testNuGetProjectContext = new TestNuGetProjectContext();
                    var token = CancellationToken.None;
                    using (var packageStream = GetDownloadResourceResult(packageFileInfo))
                    {
                        // Act
                        await folderNuGetProject.InstallPackageAsync(packageIdentity, packageStream, testNuGetProjectContext, token);
                    }

                    var unNormalizedPackageIdentity = new PackageIdentity(packageIdentity.Id,
                                                                          new NuGetVersion(packageIdentity.Version + ".0"));

                    // Assert
                    Assert.True(File.Exists(nupkgFilePath));
                    Assert.True(File.Exists(Path.Combine(packageInstallPath, "Content/Scripts/test1.js")));
                    using (var packageStream = File.OpenRead(nupkgFilePath))
                    {
                        var zipArchive = new ZipArchive(packageStream);
                        Assert.Equal(6, zipArchive.Entries.Count);
                    }
                    Assert.True(folderNuGetProject.PackageExists(packageIdentity));
                    var packageDirectoryPath = folderNuGetProject.GetInstalledPath(unNormalizedPackageIdentity);
                    Assert.True(!string.IsNullOrEmpty(packageDirectoryPath));
                    Assert.True(Directory.Exists(packageDirectoryPath));

                    // Main Act
                    await folderNuGetProject.DeletePackage(packageIdentity, testNuGetProjectContext, CancellationToken.None);

                    // Assert
                    Assert.False(folderNuGetProject.PackageExists(unNormalizedPackageIdentity));
                    // Check that the package directories are deleted
                    Assert.False(Directory.Exists(packageDirectoryPath));
                }
        }
Пример #23
0
        public RestoreAndUninstallNuGetPackageAction(
            IMonoDevelopSolutionManager solutionManager,
            IDotNetProject dotNetProject)
        {
            this.dotNetProject = dotNetProject;

            nugetProject        = solutionManager.GetNuGetProject(dotNetProject) as MSBuildNuGetProject;
            packagePathResolver = new PackagePathResolver(nugetProject.GetPackagesFolderPath(solutionManager));

            restoreAction = new RestoreNuGetPackagesInProjectAction(
                dotNetProject.DotNetProject,
                nugetProject,
                solutionManager);

            uninstallAction = new UninstallNuGetPackageAction(solutionManager, dotNetProject);
        }
Пример #24
0
        private async Task PushPackageToFileSystem(Uri sourceUri,
                                                   string pathToPackage,
                                                   bool skipDuplicate,
                                                   ILogger log,
                                                   CancellationToken token)
        {
            var             root            = sourceUri.LocalPath;
            PackageIdentity packageIdentity = null;

            using (var reader = new PackageArchiveReader(pathToPackage))
            {
                packageIdentity = reader.GetIdentity();
            }

            if (IsV2LocalRepository(root))
            {
                var pathResolver    = new PackagePathResolver(sourceUri.AbsolutePath, useSideBySidePaths: true);
                var packageFileName = pathResolver.GetPackageFileName(packageIdentity);

                var fullPath = Path.Combine(root, packageFileName);
                File.Copy(pathToPackage, fullPath, overwrite: true);

                //Indicate that SkipDuplicate is currently not supported in this scenario.
                if (skipDuplicate)
                {
                    log?.LogWarning(Strings.PushCommandSkipDuplicateNotImplemented);
                }
            }
            else
            {
                var packageExtractionContext = new PackageExtractionContext(
                    PackageSaveMode.Defaultv3,
                    PackageExtractionBehavior.XmlDocFileSaveMode,
                    ClientPolicyContext.GetClientPolicy(Settings, log),
                    log);

                var context = new OfflineFeedAddContext(pathToPackage,
                                                        root,
                                                        log,
                                                        throwIfSourcePackageIsInvalid: true,
                                                        throwIfPackageExistsAndInvalid: !skipDuplicate,
                                                        throwIfPackageExists: !skipDuplicate,
                                                        extractionContext: packageExtractionContext);

                await OfflineFeedUtility.AddPackageToSource(context, token);
            }
        }
        /// <summary>
        /// Create a packagets.config folder of nupkgs
        /// </summary>
        public static async Task CreateFolderFeedPackagesConfigAsync(string root, params string[] nupkgPaths)
        {
            var resolver = new PackagePathResolver(root);
            var context  = new PackageExtractionContext(
                PackageSaveMode.Defaultv2,
                PackageExtractionBehavior.XmlDocFileSaveMode,
                NullLogger.Instance,
                signedPackageVerifier: null);

            foreach (var path in nupkgPaths)
            {
                using (var stream = File.OpenRead(path))
                {
                    await PackageExtractor.ExtractPackageAsync(stream, resolver, context, CancellationToken.None);
                }
            }
        }
        public static async Task InstallPackages(PackagePathResolver packagePathResolver, SourcePackageDependencyInfo packageToInstall, SourceCacheContext cacheContext,
                                                 PackageExtractionContext packageExtractionContext, FrameworkReducer frameworkReducer, NuGetFramework nuGetFramework, ISettings settings, ILogger logger)
        {
            PackageReaderBase packageReader;
            var installedPath = packagePathResolver.GetInstalledPath(packageToInstall);

            if (installedPath == null)
            {
                var downloadResource =
                    await packageToInstall.Source.GetResourceAsync <DownloadResource>(CancellationToken.None);

                var downloadResult = await downloadResource.GetDownloadResourceResultAsync(
                    packageToInstall,
                    new PackageDownloadContext(cacheContext),
                    SettingsUtility.GetGlobalPackagesFolder(settings),
                    logger, CancellationToken.None);

                await PackageExtractor.ExtractPackageAsync(
                    downloadResult.PackageSource,
                    downloadResult.PackageStream,
                    packagePathResolver,
                    packageExtractionContext,
                    CancellationToken.None);

                packageReader = downloadResult.PackageReader;
            }
            else
            {
                packageReader = new PackageFolderReader(installedPath);
            }

            var libItems = packageReader.GetLibItems();
            var nearest  = frameworkReducer.GetNearest(nuGetFramework, libItems.Select(x => x.TargetFramework));

            Console.WriteLine(string.Join("\n", libItems
                                          .Where(x => x.TargetFramework.Equals(nearest))
                                          .SelectMany(x => x.Items)));

            var frameworkItems = packageReader.GetFrameworkItems();

            nearest = frameworkReducer.GetNearest(nuGetFramework,
                                                  frameworkItems.Select(x => x.TargetFramework));
            Console.WriteLine(string.Join("\n", frameworkItems
                                          .Where(x => x.TargetFramework.Equals(nearest))
                                          .SelectMany(x => x.Items)));
        }
Пример #27
0
            internal FolderNuGetProjectTest(bool useSideBySidePaths = true)
            {
                PackageIdentity  = new PackageIdentity(id: "a", version: NuGetVersion.Parse("1.0.0"));
                TestDirectory    = TestDirectory.Create();
                ProjectDirectory = Directory.CreateDirectory(Path.Combine(TestDirectory.Path, "project"));
                Resolver         = new PackagePathResolver(ProjectDirectory.FullName, useSideBySidePaths);
                Project          = new FolderNuGetProject(ProjectDirectory.FullName, Resolver);

                var sourcePackageDirectoryPath = Path.Combine(TestDirectory.Path, "source");

                Directory.CreateDirectory(sourcePackageDirectoryPath);

                Package = TestPackagesGroupedByFolder.GetLegacyTestPackage(
                    sourcePackageDirectoryPath,
                    PackageIdentity.Id,
                    PackageIdentity.Version.ToNormalizedString());
            }
Пример #28
0
        public NuGetFolderProject(
            IFileSystem fileSystem,
            INuGetContentResolver contentResolver,
            ICakeLog log,
            PackagePathResolver pathResolver,
            string root,
            NuGetFramework targetFramework) : base(root, pathResolver)
        {
            _fileSystem        = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));
            _contentResolver   = contentResolver ?? throw new ArgumentNullException(nameof(contentResolver));
            _log               = log ?? throw new ArgumentNullException(nameof(log));
            _pathResolver      = pathResolver ?? throw new ArgumentNullException(nameof(pathResolver));
            _installedPackages = new HashSet <PackageIdentity>();

            TargetFramework = targetFramework ?? throw new ArgumentNullException(nameof(targetFramework));
            InternalMetadata[NuGetProjectMetadataKeys.TargetFramework] = TargetFramework;
        }
Пример #29
0
        public IReadOnlyCollection <IFile> Install(PackageReference package, PackageType type, DirectoryPath path)
        {
            if (package == null)
            {
                throw new ArgumentNullException(nameof(package));
            }
            if (path == null)
            {
                throw new ArgumentNullException(nameof(path));
            }

            var targetFramework          = type == PackageType.Addin ? _currentFramework : NuGetFramework.AnyFramework;
            var sourceRepositoryProvider = new NuGetSourceRepositoryProvider(_nugetSettings, _config, package);
            var packageIdentity          = GetPackageId(package, sourceRepositoryProvider, targetFramework, _nugetLogger);

            if (packageIdentity == null)
            {
                return(Array.Empty <IFile>());
            }

            var packageRoot    = path.MakeAbsolute(_environment).FullPath;
            var pathResolver   = new PackagePathResolver(packageRoot);
            var nuGetProject   = new NugetFolderProject(_fileSystem, _contentResolver, _config, _log, pathResolver, packageRoot, targetFramework);
            var packageManager = new NuGetPackageManager(sourceRepositoryProvider, _nugetSettings, packageRoot)
            {
                PackagesFolderNuGetProject = nuGetProject
            };

            var sourceRepositories = sourceRepositoryProvider.GetRepositories();
            var includePrerelease  = false;

            if (package.Parameters.ContainsKey("prerelease"))
            {
                bool.TryParse(package.Parameters["prerelease"].FirstOrDefault() ?? bool.TrueString, out includePrerelease);
            }
            var resolutionContext = new ResolutionContext(DependencyBehavior.Lowest, includePrerelease, false, VersionConstraints.None);
            var projectContext    = new NuGetProjectContext(_log);

            packageManager.InstallPackageAsync(nuGetProject, packageIdentity, resolutionContext, projectContext,
                                               sourceRepositories, Array.Empty <SourceRepository>(),
                                               CancellationToken.None).Wait();

            return(nuGetProject.GetFiles(path, package, type));
        }
Пример #30
0
        public async Task GetInstalledPath_ReturnsInstalledPath()
        {
            // Arrange
            using (var randomTestSourcePath = TestDirectory.Create())
                using (var randomTestDestinationPath = TestDirectory.Create())
                {
                    var packageIdentity = new PackageIdentity("packageA", new NuGetVersion("1.0.0"));
                    var packageFileInfo = TestPackagesGroupedByFolder.GetLegacyTestPackage(
                        randomTestSourcePath,
                        packageIdentity.Id,
                        packageIdentity.Version.ToNormalizedString());
                    var folderNuGetProject      = new FolderNuGetProject(randomTestDestinationPath);
                    var packagePathResolver     = new PackagePathResolver(randomTestDestinationPath);
                    var packageInstallPath      = packagePathResolver.GetInstallPath(packageIdentity);
                    var nupkgFilePath           = Path.Combine(packageInstallPath, packagePathResolver.GetPackageFileName(packageIdentity));
                    var testNuGetProjectContext = new TestNuGetProjectContext();
                    var token = CancellationToken.None;
                    using (var packageStream = GetDownloadResourceResult(packageFileInfo))
                    {
                        // Act
                        await folderNuGetProject.InstallPackageAsync(packageIdentity, packageStream, testNuGetProjectContext, token);
                    }

                    // Assert
                    Assert.True(File.Exists(nupkgFilePath));
                    Assert.True(File.Exists(Path.Combine(packageInstallPath, "lib/test.dll")));
                    using (var packageStream = File.OpenRead(nupkgFilePath))
                    {
                        var zipArchive = new ZipArchive(packageStream);
                        Assert.Equal(5, zipArchive.Entries.Count);
                    }

                    // Main Act
                    var installedPath = folderNuGetProject.GetInstalledPath(
                        new PackageIdentity(
                            packageIdentity.Id,
                            new NuGetVersion(packageIdentity.Version + ".0")));

                    // Assert
                    Assert.NotNull(installedPath);
                    Assert.True(Directory.Exists(installedPath));
                    Assert.True(string.Equals(packageInstallPath, installedPath));
                }
        }