public Node(PackageMeta packageMeta)
 {
     PackageMeta = packageMeta;
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 public CataloguePackageBuilder(PackageMeta metaData, DirectoryInfo source)
 {
     MetaData = metaData;
     Source   = source;
 }
Exemplo n.º 4
0
 public ResolvedPackage(PackageMeta packageMeta)
 {
     PackageMeta = packageMeta;
 }
Exemplo n.º 5
0
        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);
        }