diff --git a/src/BaGet.Core/Mirror/MirrorService.cs b/src/BaGet.Core/Mirror/MirrorService.cs index 82ba631d..1b8d3e1e 100644 --- a/src/BaGet.Core/Mirror/MirrorService.cs +++ b/src/BaGet.Core/Mirror/MirrorService.cs @@ -36,8 +36,12 @@ public async Task> FindPackageVersionsOrNullAsync( string id, CancellationToken cancellationToken) { - var upstreamVersions = await _upstreamClient.ListPackageVersionsAsync(id, includeUnlisted: true, cancellationToken); - if (!upstreamVersions.Any()) + var upstreamVersions = await RunOrNull( + id, + "versions", + () => _upstreamClient.ListPackageVersionsAsync(id, includeUnlisted: true, cancellationToken)); + + if (upstreamVersions == null || !upstreamVersions.Any()) { return null; } @@ -51,8 +55,12 @@ public async Task> FindPackageVersionsOrNullAsync( public async Task> FindPackagesOrNullAsync(string id, CancellationToken cancellationToken) { - var items = await _upstreamClient.GetPackageMetadataAsync(id, cancellationToken); - if (!items.Any()) + var items = await RunOrNull( + id, + "metadata", + () => _upstreamClient.GetPackageMetadataAsync(id, cancellationToken)); + + if (items == null || !items.Any()) { return null; } @@ -168,6 +176,20 @@ private IEnumerable FindDependenciesFromDependencyGroup(Depen }); } + private async Task RunOrNull(string id, string data, Func> x) + where T : class + { + try + { + return await x(); + } + catch (Exception e) + { + _logger.LogError(e, "Unable to mirror package {Package}'s upstream {Data}", id, data); + return null; + } + } + private async Task IndexFromSourceAsync(string id, NuGetVersion version, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested();