Exemplo n.º 1
0
        public NugetAnalyzedPackage AnalyzePackage(string xml, Dictionary <string, INugetPackage> packagesOnConfig, params string[] relativePaths)
        {
            var nugetPackage = new NugetPackage()
            {
                Id = "TestPkg", Version = "1.999"
            };

            var paths = new List <RelativePath>();

            paths.Add(RelativePath.Create(m_context.StringTable, nugetPackage.Id + ".nuspec"));
            foreach (var relativePath in relativePaths)
            {
                paths.Add(RelativePath.Create(m_context.StringTable, relativePath));
            }

            var packageOnDisk = new PackageOnDisk(
                m_context.PathTable,
                nugetPackage,
                PackageDownloadResult.FromRemote(
                    new PackageIdentity("nuget", nugetPackage.Id, nugetPackage.Version, nugetPackage.Alias),
                    AbsolutePath.Create(m_context.PathTable, A("X", "Pkgs", "TestPkg", "1.999", "TestPkg.nuspec")),
                    paths));

            return(NugetAnalyzedPackage.TryAnalyzeNugetPackage(m_context, m_monikers, XDocument.Parse(xml), packageOnDisk, packagesOnConfig, false));
        }
Exemplo n.º 2
0
        private static void GetSpecialFiles(
            PathTable pathTable,
            PathAtom nuspecFileName,
            PackageDownloadResult packageDownloadResult,
            out AbsolutePath nuSpecFile,
            out AbsolutePath moduleConfigFile)
        {
            nuSpecFile       = AbsolutePath.Invalid;
            moduleConfigFile = AbsolutePath.Invalid;

            foreach (var relativePath in packageDownloadResult.Contents)
            {
                // Check for special files.
                if (!relativePath.IsEmpty)
                {
                    var fileName = relativePath.GetName();
                    if (fileName.CaseInsensitiveEquals(pathTable.StringTable, nuspecFileName))
                    {
                        nuSpecFile = packageDownloadResult.TargetLocation.Combine(pathTable, relativePath);
                    }
                    else if (IsModuleConfigFileName(fileName, pathTable.StringTable))
                    {
                        moduleConfigFile = packageDownloadResult.TargetLocation.Combine(pathTable, relativePath);
                    }
                }
            }
        }
        /// <inheritdoc />
        /// <remarks>
        /// This function should ideally queue up the work
        /// </remarks>
        public override async Task <Possible <PackageDownloadResult> > DownloadPackage(
            string weakPackageFingerprint,
            PackageIdentity package,
            AbsolutePath packageTargetFolder,
            Func <Task <Possible <IReadOnlyList <RelativePath> > > > producePackage)
        {
            // Check if we can reuse a package that is layed out on disk already.
            // If the hash file is present packageHash variable will contain the content of it.
            if (TryGetPackageFromFromDisk(package, packageTargetFolder, weakPackageFingerprint, out var possiblePackageFromDisk, out var packageHash))
            {
                return(possiblePackageFromDisk);
            }

            // Slower path: checking the cache first
            var targetLocation = packageTargetFolder.ToString(PathTable);
            var friendlyName   = package.GetFriendlyName();

            using (var pm = PerformanceMeasurement.StartWithoutStatistic(
                       LoggingContext,
                       nestedLoggingContext => m_logger.StartRetrievingPackage(nestedLoggingContext, friendlyName, targetLocation),
                       nestedLoggingContext => m_logger.EndRetrievingPackage(nestedLoggingContext, friendlyName)))
            {
                var loggingContext = pm.LoggingContext;

                // Getting the package content from the cache
                var packageFromCache = await TryGetPackageFromCache(loggingContext, weakPackageFingerprint, package, packageTargetFolder, packageHash);

                if (!packageFromCache.Succeeded || packageFromCache.Result.IsValid)
                {
                    // Cache failure or package was successfully obtained from the cache.
                    return(packageFromCache);
                }

                // Cache miss
                m_logger.PackageNotFoundInCacheAndStartedDownloading(loggingContext, package.Id, package.Version);

                // Step: We couldn't retrieve the package from the cache, or some blobs were missing, generate the package with the given function
                var possiblePackageContents = await producePackage();

                if (!possiblePackageContents.Succeeded)
                {
                    return(possiblePackageContents.Failure);
                }

                // Now we can save the content to the cache
                Analysis.IgnoreResult(
                    await TryAddPackageToCache(
                        loggingContext,
                        weakPackageFingerprint,
                        package,
                        packageTargetFolder,
                        possiblePackageContents.Result),
                    justification: "Okay to ignore putting in cache failure, will happen next time"
                    );

                // Step: Return descriptor indicating it wasn't restored from the cache
                return(PackageDownloadResult.FromRemote(package, packageTargetFolder, possiblePackageContents.Result));
            }
        }
Exemplo n.º 4
0
 private PackageDownloadResult CreatePackageDownloadResult(bool fromCache, string packageName, string version, string pkgFolder, List <RelativePath> relativePaths)
 {
     return(fromCache ?
            PackageDownloadResult.FromCache(
                new PackageIdentity("nuget", packageName, version, string.Empty),
                AbsolutePath.Create(m_testContext.PathTable, pkgFolder),
                relativePaths)
         : PackageDownloadResult.FromRemote(
                new PackageIdentity("nuget", packageName, version, string.Empty),
                AbsolutePath.Create(m_testContext.PathTable, pkgFolder),
                relativePaths));
 }
Exemplo n.º 5
0
        public NugetAnalyzedPackage AnalyzePackageStub(Dictionary <string, INugetPackage> packagesOnConfig)
        {
            var nugetPackage = new NugetPackage()
            {
                Id = "TestPkgStub", Version = "1.999"
            };
            var packageOnDisk = new PackageOnDisk(
                m_context.PathTable,
                nugetPackage,
                PackageDownloadResult.EmptyStub(
                    "testPackageStubHash",
                    new PackageIdentity("nuget", nugetPackage.Id, nugetPackage.Version, nugetPackage.Alias),
                    packageFolder: AbsolutePath.Create(m_context.PathTable, X("/X/Pkgs/TestPkgStub/1.999"))));

            return(NugetAnalyzedPackage.TryAnalyzeNugetPackage(m_context, m_monikers, nuSpec: null, packageOnDisk, packagesOnConfig, false));
        }
Exemplo n.º 6
0
        /// <nodoc />
        public PackageOnDisk(PathTable pathTable, INugetPackage package, PackageDownloadResult packageDownloadResult)
        {
            Contract.Requires(pathTable != null);
            Contract.Requires(package != null);
            Contract.Requires(packageDownloadResult != null);

            Package = package;
            PackageDownloadResult = packageDownloadResult;

            var nuspecFileName = PathAtom.Create(pathTable.StringTable, package.Id + ".nuspec");

            GetSpecialFiles(pathTable, nuspecFileName, packageDownloadResult, out var nuSpecFile, out var moduleConfigFile);

            NuSpecFile       = nuSpecFile;
            ModuleConfigFile = moduleConfigFile;
        }