Ejemplo n.º 1
0
 public Package(IPackage package, DerivedPackageData derivedData)
 {
     Id      = package.Id;
     Version = package.Version.ToString();
     Title   = package.Title;
     Authors = String.Join(",", package.Authors);
     if (package.IconUrl != null)
     {
         IconUrl = package.IconUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped);
     }
     if (package.LicenseUrl != null)
     {
         LicenseUrl = package.LicenseUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped);
     }
     if (package.ProjectUrl != null)
     {
         ProjectUrl = package.ProjectUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped);
     }
     RequireLicenseAcceptance = package.RequireLicenseAcceptance;
     Description             = package.Description;
     Summary                 = package.Summary;
     ReleaseNotes            = package.ReleaseNotes;
     Tags                    = package.Tags;
     Dependencies            = String.Join("|", package.DependencySets.SelectMany(ConvertDependencySetToStrings));
     PackageHash             = derivedData.PackageHash;
     PackageHashAlgorithm    = "SHA512";
     PackageSize             = derivedData.PackageSize;
     LastUpdated             = derivedData.LastUpdated.UtcDateTime;
     Published               = derivedData.Created.UtcDateTime;
     IsAbsoluteLatestVersion = package.IsAbsoluteLatestVersion;
     IsLatestVersion         = package.IsLatestVersion;
     Path                    = derivedData.Path;
     FullPath                = derivedData.FullPath;
     MinClientVersion        = package.MinClientVersion == null ? null : package.MinClientVersion.ToString();
 }
Ejemplo n.º 2
0
 public Package(IPackage package, DerivedPackageData derivedData)
 {
     Id      = package.Id;
     Version = package.Version.ToString();
     Title   = package.Title;
     Authors = String.Join(",", package.Authors);
     if (package.IconUrl != null)
     {
         IconUrl = package.IconUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped);
     }
     if (package.LicenseUrl != null)
     {
         LicenseUrl = package.LicenseUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped);
     }
     if (package.ProjectUrl != null)
     {
         ProjectUrl = package.ProjectUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped);
     }
     RequireLicenseAcceptance = package.RequireLicenseAcceptance;
     Description  = package.Description;
     Summary      = package.Summary;
     Language     = package.Language;
     Tags         = package.Tags;
     Dependencies = String.Join("|", from d in package.Dependencies
                                select ConvertDependency(d));
     PackageHash          = derivedData.PackageHash;
     PackageSize          = derivedData.PackageSize;
     LastUpdated          = derivedData.LastUpdated.UtcDateTime;
     Published            = derivedData.Created.UtcDateTime;
     DownloadCount        = -1;
     Rating               = -1;
     VersionDownloadCount = -1;
     VersionRatingsCount  = -1;
 }
Ejemplo n.º 3
0
        private void AddPackageToCache(ConcurrentDictionary <IPackage, DerivedPackageData> packages, ConcurrentDictionary <string, Tuple <IPackage, DerivedPackageData> > absoluteLatest, ConcurrentDictionary <string, Tuple <IPackage, DerivedPackageData> > latest, bool checkFrameworks, HttpContext context, string path, IPackage zip)
        {
            string packageHash       = null;
            long   packageSize       = 0;
            string persistedHashFile = EnablePersistNupkgHash ? GetHashFile(path, false) : null;
            bool   hashComputeNeeded = true;

            ReadHashFile(context, path, persistedHashFile, ref packageSize, ref packageHash, ref hashComputeNeeded);

            if (hashComputeNeeded)
            {
                using (var stream = _fileSystem.OpenFile(path))
                {
                    packageSize = stream.Length;
                    packageHash = Convert.ToBase64String(HashProvider.CalculateHash(stream));
                }
                WriteHashFile(context, path, persistedHashFile, packageSize, packageHash);
            }

            var data = new DerivedPackageData
            {
                PackageSize = packageSize,
                PackageHash = packageHash,
                LastUpdated = _fileSystem.GetLastModified(path),
                Created     = _fileSystem.GetCreated(path),
                Path        = path,
                FullPath    = _fileSystem.GetFullPath(path),

                // default to false, these will be set later
                IsAbsoluteLatestVersion = false,
                IsLatestVersion         = false
            };

            if (checkFrameworks)
            {
                data.SupportedFrameworks = zip.GetSupportedFrameworks();
            }

            var entry = new Tuple <IPackage, DerivedPackageData>(zip, data);

            // find the latest versions
            string id = zip.Id.ToLowerInvariant();

            // update with the highest version
            absoluteLatest.AddOrUpdate(id, entry, (oldId, oldEntry) => oldEntry.Item1.Version < entry.Item1.Version ? entry : oldEntry);

            // update latest for release versions
            if (zip.IsReleaseVersion())
            {
                latest.AddOrUpdate(id, entry, (oldId, oldEntry) => oldEntry.Item1.Version < entry.Item1.Version ? entry : oldEntry);
            }

            // add the package to the cache, it should not exist already
            Debug.Assert(packages.ContainsKey(zip) == false, "duplicate package added");
            packages.AddOrUpdate(zip, entry.Item2, (oldPkg, oldData) => oldData);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Gives the Package containing both the IPackage and the derived metadata.
        /// The returned Package will be null if <paramref name="package" /> no longer exists in the cache.
        /// </summary>
        public Package GetMetadataPackage(IPackage package)
        {
            Package metadata = null;

            // The cache may have changed, and the metadata may no longer exist
            DerivedPackageData data = null;

            if (PackageCache.TryGetValue(package, out data))
            {
                metadata = new Package(package, data);
            }

            return(metadata);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Gets the metadata package.
        /// </summary>
        /// <param name="package">The package.</param>
        /// <returns></returns>
        public Package GetMetadataPackage(IPackage package)
        {
            var derived = new DerivedPackageData()
            {
                //Created = ?
                //FullPath = ?
                IsAbsoluteLatestVersion = package.IsAbsoluteLatestVersion,
                IsLatestVersion         = package.IsLatestVersion
                                          //LastUpdated = ?
                                          //PackageHash = package.GetHash(),
                                          //PackageSize = ??
                                          //Path = ??
                                          //SupportedFrameworks = package.GetSupportedFrameworks(),
            };

            //var pkg = new Package(package, new DerivedPackageData());
            return(new Package(package, derived));
        }
        private DerivedPackageData CalculateDerivedData(IPackage package)
        {
            DerivedPackageData derivedPackageData;

            if (DerivedDataCache.TryGetValue(package.Id, out derivedPackageData))
            {
                return(derivedPackageData);
            }

            var blob = this.GetLatestBlobForPackage(package);

            long length = 0;

            byte[] inArray;
            using (var stream = blob.OpenRead())
            {
                length  = stream.Length;
                inArray = this.HashProvider.CalculateHash(stream);
            }

            derivedPackageData = new DerivedPackageData
            {
                PackageSize             = length,
                PackageHash             = Convert.ToBase64String(inArray),
                LastUpdated             = blob.Properties.LastModified ?? default(DateTimeOffset),
                Created                 = blob.Properties.LastModified ?? default(DateTimeOffset),
                Path                    = blob.Uri.ToString(),
                FullPath                = blob.Uri.ToString(),
                IsAbsoluteLatestVersion = package.IsAbsoluteLatestVersion,
                IsLatestVersion         = package.IsLatestVersion
            };

            DerivedDataCache.AddOrUpdate(package.Id, derivedPackageData, (key, old) => derivedPackageData);

            return(derivedPackageData);
        }