/// <summary>
        /// Initializes a new <see cref="SourceRepositoryDependencyProvider" /> class.
        /// </summary>
        /// <param name="sourceRepository">A source repository.</param>
        /// <param name="logger">A logger.</param>
        /// <param name="cacheContext">A source cache context.</param>
        /// <param name="ignoreFailedSources"><c>true</c> to ignore failed sources; otherwise <c>false</c>.</param>
        /// <param name="ignoreWarning"><c>true</c> to ignore warnings; otherwise <c>false</c>.</param>
        /// <param name="nuspecCache">Optional nuspec cache.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="sourceRepository" />
        /// is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="logger" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="cacheContext" /> is <c>null</c>.</exception>
        public SourceRepositoryDependencyProvider(
            SourceRepository sourceRepository,
            ILogger logger,
            SourceCacheContext cacheContext,
            bool ignoreFailedSources,
            bool ignoreWarning,
            LocalNuspecCache nuspecCache)
        {
            if (sourceRepository == null)
            {
                throw new ArgumentNullException(nameof(sourceRepository));
            }

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

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

            _sourceRepository    = sourceRepository;
            _logger              = logger;
            _cacheContext        = cacheContext;
            _ignoreFailedSources = ignoreFailedSources;
            _ignoreWarning       = ignoreWarning;
            _nuspecCache         = nuspecCache;
        }
 /// <summary>
 /// Providers used by the restore command. These can be shared across restores.
 /// </summary>
 /// <param name="globalPackages">Path to the global packages folder.</param>
 /// <param name="fallbackPackageFolders">Path to any fallback package folders.</param>
 /// <param name="localProviders">This is typically just a provider for the global packages folder.</param>
 /// <param name="remoteProviders">All dependency providers.</param>
 /// <param name="nuspecCache">Nuspec cache.</param>
 public RestoreCommandProviders(
     NuGetv3LocalRepository globalPackages,
     IReadOnlyList <NuGetv3LocalRepository> fallbackPackageFolders,
     IReadOnlyList <IRemoteDependencyProvider> localProviders,
     IReadOnlyList <IRemoteDependencyProvider> remoteProviders,
     LocalNuspecCache nuspecCache)
 {
     GlobalPackages         = globalPackages ?? throw new ArgumentNullException(nameof(globalPackages));
     LocalProviders         = localProviders ?? throw new ArgumentNullException(nameof(localProviders));
     RemoteProviders        = remoteProviders ?? throw new ArgumentNullException(nameof(remoteProviders));
     FallbackPackageFolders = fallbackPackageFolders ?? throw new ArgumentNullException(nameof(fallbackPackageFolders));
     NuspecCache            = nuspecCache ?? throw new ArgumentNullException(nameof(nuspecCache));
 }
        public void LocalNuspecCache_DirNotFoundVerifyFailure()
        {
            using (var pathContext = new SimpleTestPathContext())
            {
                var cache        = new LocalNuspecCache();
                var pathResolver = new VersionFolderPathResolver(pathContext.PackageSource);

                var identity = new PackageIdentity("X", NuGetVersion.Parse("1.0.0"));

                var nuspec   = pathResolver.GetManifestFilePath(identity.Id, identity.Version);
                var expanded = pathResolver.GetInstallPath(identity.Id, identity.Version);

                // Verify does not throw
                var result = cache.GetOrAdd(nuspec, expanded);

                // This should throw
                Assert.Throws <DirectoryNotFoundException>(() => result.Value);
            }
        }
        public async Task LocalNuspecCache_FallbackToFolderReaderVerifyResult()
        {
            using (var pathContext = new SimpleTestPathContext())
            {
                var cache        = new LocalNuspecCache();
                var pathResolver = new VersionFolderPathResolver(pathContext.PackageSource);

                var identity = new PackageIdentity("X", NuGetVersion.Parse("1.0.0"));

                await SimpleTestPackageUtility.CreateFolderFeedV3(
                    pathContext.PackageSource,
                    identity);

                var nuspec   = pathResolver.GetManifestFilePath(identity.Id, identity.Version) + "invalid.nuspec";
                var expanded = pathResolver.GetInstallPath(identity.Id, identity.Version);

                var result = cache.GetOrAdd(nuspec, expanded);

                result.Value.GetIdentity().Should().Be(identity);
            }
        }
        public async Task LocalNuspecCache_GetNuspecTwiceVerifySameInstance()
        {
            using (var pathContext = new SimpleTestPathContext())
            {
                var cache        = new LocalNuspecCache();
                var pathResolver = new VersionFolderPathResolver(pathContext.PackageSource);

                var identity = new PackageIdentity("X", NuGetVersion.Parse("1.0.0"));

                await SimpleTestPackageUtility.CreateFolderFeedV3(
                    pathContext.PackageSource,
                    identity);

                var nuspec   = pathResolver.GetManifestFilePath(identity.Id, identity.Version);
                var expanded = pathResolver.GetInstallPath(identity.Id, identity.Version);

                var result1 = cache.GetOrAdd(nuspec, expanded);
                var result2 = cache.GetOrAdd(nuspec, expanded);

                Assert.Same(result1.Value, result2.Value);
                result1.Value.GetIdentity().Should().Be(identity);
            }
        }
Beispiel #6
0
 public NuGetv3LocalRepository(string path, LocalNuspecCache nuspecCache)
 {
     RepositoryRoot = path;
     PathResolver   = new VersionFolderPathResolver(path);
     _nuspecCache   = nuspecCache ?? new LocalNuspecCache();
 }
        public static RestoreCommandProviders Create(
            string globalFolderPath,
            IEnumerable <string> fallbackPackageFolderPaths,
            IEnumerable <SourceRepository> sources,
            SourceCacheContext cacheContext,
            LocalNuspecCache nuspecCache,
            ILogger log)
        {
            var globalPackages       = new NuGetv3LocalRepository(globalFolderPath, nuspecCache);
            var globalPackagesSource = Repository.Factory.GetCoreV3(globalFolderPath, FeedType.FileSystemV3);

            var localProviders = new List <IRemoteDependencyProvider>()
            {
                // Do not throw or warn for global cache
                new SourceRepositoryDependencyProvider(
                    globalPackagesSource,
                    log,
                    cacheContext,
                    ignoreFailedSources: true,
                    ignoreWarning: true,
                    nuspecCache: nuspecCache)
            };

            // Add fallback sources as local providers also
            var fallbackPackageFolders = new List <NuGetv3LocalRepository>();

            foreach (var path in fallbackPackageFolderPaths)
            {
                var fallbackRepository = new NuGetv3LocalRepository(path, nuspecCache);
                var fallbackSource     = Repository.Factory.GetCoreV3(path, FeedType.FileSystemV3);

                var provider = new SourceRepositoryDependencyProvider(
                    fallbackSource,
                    log,
                    cacheContext,
                    ignoreFailedSources: false,
                    ignoreWarning: false,
                    nuspecCache: nuspecCache);

                fallbackPackageFolders.Add(fallbackRepository);
                localProviders.Add(provider);
            }

            var remoteProviders = new List <IRemoteDependencyProvider>();

            foreach (var source in sources)
            {
                var provider = new SourceRepositoryDependencyProvider(
                    source,
                    log,
                    cacheContext,
                    cacheContext.IgnoreFailedSources,
                    ignoreWarning: false,
                    nuspecCache: nuspecCache);

                remoteProviders.Add(provider);
            }

            return(new RestoreCommandProviders(
                       globalPackages,
                       fallbackPackageFolders,
                       localProviders,
                       remoteProviders,
                       nuspecCache));
        }