/// <summary> /// Initializes the <see cref="PackagesToPublish"/> and <see cref="PackagesAlreadyPublishedCount"/>. /// This can be called multiple times. /// </summary> /// <param name="ctx">The Cake context.</param> /// <param name="allPackagesToPublish">The set of packages </param> /// <returns>The awaitable.</returns> public async Task InitializePackagesToPublishAsync(ICakeContext ctx, IEnumerable <SimplePackageId> allPackagesToPublish) { if (_packagesToPublish != null) { _packagesToPublish.Clear(); PackagesAlreadyPublishedCount = 0; } else { _packagesToPublish = new List <SimplePackageId>(); } var logger = InitializeAndGetLogger(ctx); MetadataResource meta = await _sourceRepository.GetResourceAsync <MetadataResource>(); foreach (var p in allPackagesToPublish) { if (await meta.Exists(p.PackageIdentity, _sourceCache, logger, CancellationToken.None)) { ++PackagesAlreadyPublishedCount; } else { ctx.Debug($"Package {p.PackageId} must be published to remote feed '{Name}'."); _packagesToPublish.Add(p); } } ctx.Debug($" ==> {_packagesToPublish.Count} package(s) must be published to remote feed '{Name}'."); }
private static async Task <bool> IsAlreadyUploadedAsync(MetadataResource resource, PackageIdentity packageId) { if (resource == null) { // If we couldn't locate the v3 feed, republish the packages return(false); } try { return(await resource.Exists(packageId, NullLogger.Instance, default(CancellationToken))); } catch (Exception ex) { // If we can't read feed info, republish the packages var exceptionMessage = (ex?.InnerException ?? ex.GetBaseException()).Message; Log.WriteInformation($"Failed to read package existence {Environment.NewLine}{exceptionMessage}."); return(false); } }
/// <summary> /// Creates a list of push entries from a set of local artifacts into this feed. /// </summary> /// <param name="artifacts">Local artifacts.</param> /// <returns>The set of push into this feed.</returns> public override async Task <IEnumerable <ArtifactPush> > CreatePushListAsync(IEnumerable <ILocalArtifact> artifacts) { List <ArtifactPush> result = new List <ArtifactPush>(); ILogger logger = InitializeAndGetLogger(Cake); MetadataResource meta = await _sourceRepository.GetResourceAsync <MetadataResource>(); foreach (ILocalArtifact p in artifacts) { PackageIdentity pId = new PackageIdentity(p.ArtifactInstance.Artifact.Name, new NuGetVersion(p.ArtifactInstance.Version.ToNormalizedString())); if (await meta.Exists(pId, _sourceCache, logger, CancellationToken.None)) { Cake.Debug($" ==> Feed '{Name}' already contains {p.ArtifactInstance}."); } else { Cake.Debug($"Package {p.ArtifactInstance} must be published to remote feed '{Name}'."); result.Add(new ArtifactPush(p, this)); } } return(result); }
public async Task <bool> PackageExistsAsync(PackageIdentity identity, CancellationToken token) { return(await _metadataResource.Exists(identity, _logger, token)); }