示例#1
0
        private void AttemptToGetPackageFromCache(string packageId, SemanticVersion version, string feedId, string cacheDirectory, out IPackage downloaded, out string downloadedTo)
        {
            downloaded   = null;
            downloadedTo = null;

            Log.VerboseFormat("Checking package cache for package {0} {1}", packageId, version.ToString());

            var name = GetNameOfPackage(packageId, version.ToString());

            fileSystem.EnsureDirectoryExists(cacheDirectory);

            var files = fileSystem.EnumerateFilesRecursively(cacheDirectory, name + "*.nupkg");

            foreach (var file in files)
            {
                var package = ReadPackageFile(file);
                if (package == null)
                {
                    continue;
                }

                if (!string.Equals(package.Id, packageId, StringComparison.OrdinalIgnoreCase) || !string.Equals(package.Version.ToString(), version.ToString(), StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                downloaded   = package;
                downloadedTo = file;
            }
        }
        private void AttemptToGetPackageFromCache(string packageId, NuGetVersion version, string cacheDirectory, out LocalNuGetPackage downloaded, out string downloadedTo)
        {
            downloaded = null;
            downloadedTo = null;

            Log.VerboseFormat("Checking package cache for package {0} {1}", packageId, version.ToString());

            var name = GetNameOfPackage(packageId, version.ToString());
            fileSystem.EnsureDirectoryExists(cacheDirectory);

            var files = fileSystem.EnumerateFilesRecursively(cacheDirectory, name + "*.nupkg");

            foreach (var file in files)
            {
                var package = ReadPackageFile(file);
                if (package == null)
                    continue;

                var idMatches = string.Equals(package.Metadata.Id, packageId, StringComparison.OrdinalIgnoreCase);
                var versionExactMatch = string.Equals(package.Metadata.Version.ToString(), version.ToString(), StringComparison.OrdinalIgnoreCase);
            #if USE_NUGET_V2_LIBS
                var nugetVerMatches = NuGetVersion.TryParse(package.Metadata.Version, out NuGetVersion packageVersion) &&
                        VersionComparer.Default.Equals(version, packageVersion);
            #else
                var nugetVerMatches = package.Metadata.Version.Equals(version);
            #endif

                if (idMatches && (nugetVerMatches || versionExactMatch))
                {
                    downloaded = package;
                    downloadedTo = file;
                    return;
                }
            }
        }
示例#3
0
        public PackagePhysicalFileMetadata DownloadPackage(
            string packageId,
            IVersion version,
            string feedId,
            Uri feedUri,
            ICredentials feedCredentials,
            bool forcePackageDownload,
            int maxDownloadAttempts,
            TimeSpan downloadAttemptBackoff)
        {
            var cacheDirectory = PackageDownloaderUtils.GetPackageRoot(feedId);

            fileSystem.EnsureDirectoryExists(cacheDirectory);

            if (!forcePackageDownload)
            {
                var downloaded = SourceFromCache(packageId, version, cacheDirectory);
                if (downloaded != null)
                {
                    Log.VerboseFormat("Package was found in cache. No need to download. Using file: '{0}'", downloaded.FullFilePath);
                    return(downloaded);
                }
            }

            return(DownloadPackage(packageId, version, feedUri, feedCredentials, cacheDirectory, maxDownloadAttempts, downloadAttemptBackoff));
        }
        private void AttemptToGetPackageFromCache(string packageId, IVersion version, string cacheDirectory,
                                                  out LocalNuGetPackage downloaded, out string downloadedTo)
        {
            downloaded   = null;
            downloadedTo = null;

            Log.VerboseFormat("Checking package cache for package {0} {1}", packageId, version.ToString());

            var name = GetNameOfPackage(packageId, version.ToString());

            fileSystem.EnsureDirectoryExists(cacheDirectory);

            var files = fileSystem.EnumerateFilesRecursively(cacheDirectory, name + "*.nupkg");

            foreach (var file in files)
            {
                var package = ReadPackageFile(file);
                if (package == null)
                {
                    continue;
                }


                var idMatches         = string.Equals(package.Metadata.Id, packageId, StringComparison.OrdinalIgnoreCase);
                var versionExactMatch = string.Equals(package.Metadata.Version.ToString(), version.ToString(),
                                                      StringComparison.OrdinalIgnoreCase);

                var packageMetadata = new MetadataFactory().GetMetadataFromPackageID(packageId);
                var nugetVerMatches = VersionFactory.TryCreateVersion(package.Metadata.Version.ToString(),
                                                                      out IVersion packageVersion, packageMetadata.VersionFormat) &&
                                      version.Equals(packageVersion);

                if (idMatches && (nugetVerMatches || versionExactMatch))
                {
                    downloaded   = package;
                    downloadedTo = file;
                    return;
                }
            }
        }
        public void LongFilePathsShouldWork()
        {
            var paths = new Stack <string>();
            var path  = rootPath;

            for (var i = 0; i <= 15; i++)
            {
                path += @"\ZZZZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
                fileSystem.EnsureDirectoryExists(path);
                paths.Push(path);
            }

            fileSystem.OverwriteFile("Some sample text", path + @"\test.txt");
            fileSystem.DeleteFile(path + @"\test.txt");

            while (paths.Any())
            {
                var pathToRemove = paths.Pop();
                fileSystem.DeleteDirectory(pathToRemove);
            }
        }