/// <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);
            }
        }
示例#3
0
                /// <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));
 }