/// <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); } }
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)); }