public static Package ConvertToPackage(Version version) { var metadataWrapper = new MetadataWrapper(version.Metadata); var package = new Package { Id = version.Project, Version = version.Name, Title = metadataWrapper["Title"], Authors = metadataWrapper["Authors"], Copyright = metadataWrapper["Copyrights"], Description = metadataWrapper["Description"], IconUrl = metadataWrapper["IconUrl"], LicenseUrl = metadataWrapper["LicenseUrl"], ProjectUrl = metadataWrapper["ProjectUrl"], ReleaseNotes = metadataWrapper["RequireLicenseAcceptance"], RequireLicenseAcceptance = (metadataWrapper["LicenseUrl"] ?? "").Equals("true", StringComparison.OrdinalIgnoreCase), Summary = metadataWrapper["Summary"], Tags = metadataWrapper["Tags"], Dependencies = metadataWrapper["Dependencies"], PackageHash = metadataWrapper["PackageHash"] ?? version.PackageHash, PackageHashAlgorithm = metadataWrapper["PackageHashAlgorithm"] ?? "SHA512", PackageSize = int.Parse(metadataWrapper["PackageSize"] ?? "-1"), DownloadCount = int.Parse(metadataWrapper["DownloadCount"] ?? "0"), LastUpdated = DateTime.UtcNow, Published = DateTime.UtcNow, IsLatestVersion = (metadataWrapper["IsLatestVersion"] ?? "").Equals("true", StringComparison.OrdinalIgnoreCase), IsAbsoluteLatestVersion = (metadataWrapper["IsAbsoluteLatestName"] ?? "").Equals("true", StringComparison.OrdinalIgnoreCase), }; return package; }
public Version[] GetPackages(ref Repository repository, ref PackageFilter filter, string packageFormat, string projectId) { #if DEBUG var startTime = DateTime.Now; System.Diagnostics.Trace.WriteLine(string.Format("Start: {0}", startTime.ToString("s"))); #endif if (_cachedVersionRepository.Count == 0) { lock (_syncLock) { if (_cachedVersionRepository.Count == 0) { var repositoryCopy = repository; var versions = Directory.EnumerateDirectories(configuration.DataPath) .SelectMany( projectPath => Directory.EnumerateDirectories(projectPath) .Select( versionPath => new Version { Company = repositoryCopy.Company, Repository = repositoryCopy.Name, Project = Path.GetFileName(projectPath), Name = Path.GetFileName(versionPath), PackageFormat = packageFormat, }) .Where(version => GetPackagePathFromVersion(version, packageFormat) != null) .Select(version => new Version { Company = version.Company, Repository = version.Repository, Project = version.Project, Name = version.Name, PackageFormat = "SHA512", PackageHash = GetPackageSHA512(GetPackagePathFromVersion(version, packageFormat)), }) ) .ToArray(); // Reorder according semver List<Version> sortedVersions = versions.ToList(); sortedVersions.Sort(); sortedVersions.Reverse(); foreach (var version in sortedVersions) { bool isLatest = sortedVersions.Where(v => v.Project == version.Project && !v.Name.Contains("-")) .Select(v => v.Name) .FirstOrDefault() == version.Name; bool isAbsoluteLatest = sortedVersions.Where(v => v.Project == version.Project) .Select(v => v.Name) .FirstOrDefault() == version.Name; var metadata = new List<MetadataEntry>( GetPackageMetadata(GetPackagePathFromVersion(version, packageFormat), packageFormat) ?? new MetadataEntry[0]); var metadataWrapper = new MetadataWrapper(metadata); metadataWrapper["IsLatestVersion"] = isLatest.ToString(); metadataWrapper["IsAbsoluteLatestName"] = isAbsoluteLatest.ToString(); version.Metadata = metadata.ToArray(); } _cachedVersionRepository = sortedVersions; } } } #if DEBUG TimeSpan elapsed2 = DateTime.Now - startTime; System.Diagnostics.Trace.WriteLine(string.Format("End: {0} - Elapsed2: {1}", DateTime.Now.ToString("s"), elapsed2.ToString("g"))); #endif return _cachedVersionRepository.ToArray(); }
public static Version ConvertToVersion(Stream stream) { var package = new ZipPackage(stream); var version = new Version { Project = package.Id, Name = package.Version.ToString(), }; var metadata = new List<MetadataEntry>(); var metadataWrapper = new MetadataWrapper(metadata); if (!package.Authors.IsEmpty()) metadataWrapper["Authors"] = String.Join(",", package.Authors); if (!string.IsNullOrEmpty(package.Copyright)) metadataWrapper["Copyrights"] = package.Copyright; if (!string.IsNullOrEmpty(package.Description)) metadataWrapper["Description"] = package.Description; if (package.IconUrl != null) metadataWrapper["IconUrl"] = package.IconUrl.ToString(); if (!string.IsNullOrEmpty(package.Language)) metadataWrapper["Language"] = package.Language; if (package.LicenseUrl != null) metadataWrapper["LicenseUrl"] = package.LicenseUrl.ToString(); if (!package.Owners.IsEmpty()) metadataWrapper["Owners"] = String.Join(",", package.Owners); if (package.ProjectUrl != null) metadataWrapper["ProjectUrl"] = package.ProjectUrl.ToString(); if (!string.IsNullOrEmpty(package.ReleaseNotes)) metadataWrapper["ReleaseNotes"] = package.ReleaseNotes; metadataWrapper["RequireLicenseAcceptance"] = package.RequireLicenseAcceptance.ToString(); if (!string.IsNullOrEmpty(package.Summary)) metadataWrapper["Summary"] = package.Summary; if (!string.IsNullOrEmpty(package.Tags)) metadataWrapper["Tags"] = package.Tags; if (package.DependencySets.SelectMany(ConvertDependencySetToStrings).Any()) metadataWrapper["Dependencies"] = String.Join("|", package.DependencySets.SelectMany(ConvertDependencySetToStrings)); if (!string.IsNullOrEmpty(package.Title)) metadataWrapper["Title"] = package.Title; metadataWrapper["PackageSize"] = stream.Length.ToString(); metadataWrapper["PackageHashAlgorithm"] = "SHA512"; stream.Seek(0, SeekOrigin.Begin); using (var hasher = new SHA512Managed()) metadataWrapper["PackageHash"] = Convert.ToBase64String(hasher.ComputeHash(stream)); metadataWrapper["DownloadCount"] = "000000"; metadataWrapper["CreatedDate"] = DateTime.UtcNow.ToString("s"); version.Metadata = metadata.ToArray(); return version; }
public Version[] GetPackages(ref Repository repository, ref PackageFilter filter, string packageFormat, string projectId) { var repositoryCopy = repository; var versions = Directory.EnumerateDirectories(configuration.DataPath) .SelectMany( projectPath => Directory.EnumerateDirectories(projectPath) .Select( versionPath => new Version { Company = repositoryCopy.Company, Repository = repositoryCopy.Name, Project = Path.GetFileName(projectPath), Name = Path.GetFileName(versionPath), PackageFormat = packageFormat, }) .Where(version => GetPackagePathFromVersion(version, packageFormat) != null) .Select(version => new Version { Company = version.Company, Repository = version.Repository, Project = version.Project, Name = version.Name, PackageFormat = "SHA512", PackageHash = GetPackageSHA512(GetPackagePathFromVersion(version, packageFormat)), }) ) .ToArray(); // Reorder according semver List<Version> sortedVersions = versions.ToList(); sortedVersions.Sort(); sortedVersions.Reverse(); foreach (var version in sortedVersions) { bool isLatest = sortedVersions.Where(v => v.Project == version.Project && !v.Name.Contains("-")) .Select(v => v.Name) .FirstOrDefault() == version.Name; bool isAbsoluteLatest = sortedVersions.Where(v => v.Project == version.Project) .Select(v => v.Name) .FirstOrDefault() == version.Name; var metadata = new List<MetadataEntry>( GetPackageMetadata(GetPackagePathFromVersion(version, packageFormat), packageFormat) ?? new MetadataEntry[0]); var metadataWrapper = new MetadataWrapper(metadata); metadataWrapper["IsLatestVersion"] = isLatest.ToString(); metadataWrapper["IsAbsoluteLatestName"] = isAbsoluteLatest.ToString(); version.Metadata = metadata.ToArray(); } return sortedVersions.ToArray(); }
public Version[] GetPackages(ref Repository repository, ref PackageFilter filter, string packageFormat, string projectId) { var repositoryCopy = repository; var versions = (projectId == null ? Directory.EnumerateDirectories(configuration.DataPath) : Directory.EnumerateDirectories(configuration.DataPath, projectId)) .SelectMany( projectPath => Directory.EnumerateDirectories(projectPath) .Select( versionPath => new Version { Company = repositoryCopy.Company, Repository = repositoryCopy.Name, Project = Path.GetFileName(projectPath), Name = Path.GetFileName(versionPath), PackageFormat = packageFormat, }) .Where(version => GetPackagePathFromVersion(version, packageFormat) != null) .Select(version => new Version { Company = version.Company, Repository = version.Repository, Project = version.Project, Name = version.Name, PackageFormat = "SHA512", PackageHash = GetPackageSHA512(GetPackagePathFromVersion(version, packageFormat)), }) ) .OrderByDescending(v => v.Name) .ToArray(); foreach(var version in versions) { bool isLatest = versions.Where(v => v.Project == version.Project).Select(v => v.Name).FirstOrDefault() == version.Name; var metadata = new List<MetadataEntry>(GetPackageMetadata(GetPackagePathFromVersion(version, packageFormat), packageFormat) ?? new MetadataEntry[0]); var metadataWrapper = new MetadataWrapper(metadata); metadataWrapper["IsLatestVersion"] = isLatest.ToString(); version.Metadata = metadata.ToArray(); } return versions; }
private static IList<MetadataEntry> GetMetadataEntries(IPackageMetadata package) { var metadata = new List<MetadataEntry>(); var metadataWrapper = new MetadataWrapper(metadata); if (!package.Authors.IsEmpty()) metadataWrapper["Authors"] = String.Join(",", package.Authors); if (!string.IsNullOrEmpty(package.Copyright)) metadataWrapper["Copyrights"] = package.Copyright; if (!string.IsNullOrEmpty(package.Description)) metadataWrapper["Description"] = package.Description; if (package.IconUrl != null) metadataWrapper["IconUrl"] = package.IconUrl.ToString(); if (!string.IsNullOrEmpty(package.Language)) metadataWrapper["Language"] = package.Language; if (package.LicenseUrl != null) metadataWrapper["LicenseUrl"] = package.LicenseUrl.ToString(); if (!package.Owners.IsEmpty()) metadataWrapper["Owners"] = String.Join(",", package.Owners); if (package.ProjectUrl != null) metadataWrapper["ProjectUrl"] = package.ProjectUrl.ToString(); if (!string.IsNullOrEmpty(package.ReleaseNotes)) metadataWrapper["ReleaseNotes"] = package.ReleaseNotes; metadataWrapper["RequireLicenseAcceptance"] = package.RequireLicenseAcceptance.ToString(); if (!string.IsNullOrEmpty(package.Summary)) metadataWrapper["Summary"] = package.Summary; if (!string.IsNullOrEmpty(package.Tags)) metadataWrapper["Tags"] = package.Tags; if (!string.IsNullOrEmpty(package.Title)) metadataWrapper["Title"] = package.Title; return metadata; }