public LocalPackageInfo SaveRemotePackage(PackageHashes packageHashes, PackageMeta meta) { // register LocalPackageInfo package; lock (packagesLock) { package = localPackageManager.RegisterPackage(packageHashes, meta); RegisterPackageInternal(package); } return(package); }
public LocalPackageInfo RegisterPackage(PackageHashes hashes, PackageMeta metadata) { if (hashes == null) { throw new ArgumentNullException(nameof(hashes)); } // create directory EnsurePath(); string packagePath = CreatePackagePath(hashes.PackageId); if (Directory.Exists(packagePath)) { logger.LogError("Can't add package with Id {0:s}. This hash already exists in local repository.", hashes.PackageId); throw new InvalidOperationException("Package already exists in local repository."); } Directory.CreateDirectory(packagePath); // store data var packageSequence = hashes.CreatePackageSequence(); PackageDownloadInfo downloadStatus = PackageDownloadInfo.CreateForReadyForDownloadPackage(app.Version, hashes.PackageId, packageSequence); UpdateDownloadStatus(downloadStatus); UpdateHashes(hashes); UpdateMetadata(metadata); // allocate var allocator = new PackageDataAllocator(app.LoggerFactory); allocator.Allocate(packagePath, hashes.CreatePackageSequence(), overwrite: false); // log and build result logger.LogInformation($"New package {hashes.PackageId:s4} added to repository and allocated. Size: {SizeFormatter.ToString(hashes.PackageSize)}"); var reference = new PackageReference(packagePath, hashes.PackageId); var result = new LocalPackageInfo(reference, downloadStatus, hashes, metadata, packageSequence); return(result); }