public Node(PackageMeta packageMeta) { PackageMeta = packageMeta; }
private static ResolvedPackage ResolveInner( PackageMeta package, PackageRepository localRepository, PackageRepository repository, IDictionary <string, List <ResolvedPackage> > resolved) { var resolvedPackage = new ResolvedPackage(package); if (resolved.TryGetValue(package.PackageInfo.Name, out var alreadyResolved)) { alreadyResolved.Add(resolvedPackage); } else { resolved[package.PackageInfo.Name] = new List <ResolvedPackage> { resolvedPackage }; } foreach (var packageInfoDependency in package.PackageInfo.Dependencies) { var(lower, upper) = packageInfoDependency.Version.ToRange(); if (resolved.TryGetValue(packageInfoDependency.Name, out var packages)) { var suitableResolvedPackage = packages.FirstOrDefault(x => lower <= x.PackageMeta.PackageInfo.Version && x.PackageMeta.PackageInfo.Version <= upper); if (suitableResolvedPackage != null) { resolvedPackage.ResolvedDependencies.Add(suitableResolvedPackage); continue; } } var suitableLocalPackages = localRepository.FindPackages(packageInfoDependency.Name, lower, upper); if (suitableLocalPackages.Any()) { var newResolvedPackage = ResolveInner( suitableLocalPackages.First(), localRepository, repository, resolved); resolvedPackage.ResolvedDependencies.Add(newResolvedPackage); continue; } var suitableRepositoryPackages = repository.FindPackages(packageInfoDependency.Name, lower, upper); if (suitableRepositoryPackages.Any()) { var newResolvedPackage = ResolveInner( suitableRepositoryPackages.First(), localRepository, repository, resolved); resolvedPackage.ResolvedDependencies.Add(newResolvedPackage); continue; } throw new InvalidOperationException($"Dependency {packageInfoDependency.Name} of package {package.PackageInfo.Name} can't be found"); } return(resolvedPackage); }
public CataloguePackageBuilder(PackageMeta metaData, DirectoryInfo source) { MetaData = metaData; Source = source; }
public ResolvedPackage(PackageMeta packageMeta) { PackageMeta = packageMeta; }
public LocalPackageInfo CreatePackageFromFolder(string folderToProcess, string name, MeasureItem writeMeasure) { var operationMeasure = Stopwatch.StartNew(); // storage folder for package EnsurePath(); name = string.IsNullOrWhiteSpace(name) ? FileHelper.GetFileOrDirectoryName(folderToProcess) : name; DirectoryInfo buildDirectory = Directory.CreateDirectory(CreateBuildPath()); logger.LogInformation($"Creating package \"{name}\" from folder: {folderToProcess}"); // create package archive PackageHashes packageHashes; int entriesCount; using (var controller = new CreatePackageDataStreamController(app.Version, app.LoggerFactory, app.Crypto, sequenceForNewPackages, buildDirectory.FullName)) { using (var packageStream = new PackageDataStream(app.LoggerFactory, controller) { Measure = writeMeasure }) { var archive = new PackageArchive(app.CompatibilityChecker, app.MessageSerializer); archive.WriteFromFolder(folderToProcess, packageStream); entriesCount = archive.EntriesCount; } packageHashes = controller.PackageId; } // store package hashes UpdateHashes(packageHashes, directoryPath: buildDirectory.FullName); // store download status PackageSequenceInfo packageSequence = packageHashes.CreatePackageSequence(); PackageDownloadInfo downloadStatus = PackageDownloadInfo.CreateForCreatedPackage(app.Version, packageHashes.PackageId, packageSequence); UpdateDownloadStatus(downloadStatus, directoryPath: buildDirectory.FullName); // store metadata var metadata = new PackageMeta() { Created = DateTimeOffset.Now, Name = name, PackageSize = packageHashes.PackageSize, Version = app.Version, PackageId = packageHashes.PackageId }; UpdateMetadata(metadata, directoryPath: buildDirectory.FullName); // rename folder string packagePath = CreatePackagePath(packageHashes.PackageId); if (Directory.Exists(packagePath)) { throw new InvalidOperationException($"Folder for package {packageHashes.PackageId:s} already exists. {packagePath}"); } Directory.Move(buildDirectory.FullName, packagePath); operationMeasure.Stop(); logger.LogInformation($"Created package \"{packagePath}\":\nHash: {packageHashes.PackageId}\nSize: {SizeFormatter.ToString(packageHashes.PackageSize)}\nFiles and directories: {entriesCount}\nTime: {operationMeasure.Elapsed}"); var reference = new PackageReference(packagePath, packageHashes.PackageId); var result = new LocalPackageInfo(reference, downloadStatus, packageHashes, metadata, packageSequence); return(result); }