From a4317b1d22fab5f7e1e84034353afd7a8d207fef Mon Sep 17 00:00:00 2001 From: Naomi Zheng Date: Wed, 1 Apr 2026 20:57:27 -0400 Subject: [PATCH 1/2] propogate exceptions for terrapin --- src/Shared/PackageManagers/MavenProjectManager.cs | 2 +- src/Shared/PackageManagers/NPMProjectManager.cs | 2 +- src/Shared/PackageManagers/NuGetProjectManager.cs | 10 ++++++++-- src/Shared/PackageManagers/PyPIProjectManager.cs | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Shared/PackageManagers/MavenProjectManager.cs b/src/Shared/PackageManagers/MavenProjectManager.cs index d5974af7..5cf1cac1 100644 --- a/src/Shared/PackageManagers/MavenProjectManager.cs +++ b/src/Shared/PackageManagers/MavenProjectManager.cs @@ -274,7 +274,7 @@ public override async Task PackageVersionExistsAsync(PackageURL purl, bool var baseUrl = $"{feedUrl.EnsureTrailingSlash()}{packageNamespace}/{packageName}/{purl.Version}/{packageName}-{purl.Version}.pom"; return await GetHttpStringCache(httpClient, baseUrl, useCache); } - catch (Exception ex) + catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { Logger.Warn(ex, $"Error fetching Maven metadata: {ex.Message}"); return null; diff --git a/src/Shared/PackageManagers/NPMProjectManager.cs b/src/Shared/PackageManagers/NPMProjectManager.cs index c8fb0369..c16304d7 100644 --- a/src/Shared/PackageManagers/NPMProjectManager.cs +++ b/src/Shared/PackageManagers/NPMProjectManager.cs @@ -269,7 +269,7 @@ public override async Task> EnumerateVersionsAsync(PackageUR string? content = await GetHttpStringCache(httpClient, $"{ENV_NPM_API_ENDPOINT}/{packageName}", useCache); return content; } - catch (Exception ex) + catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { Logger.Debug(ex, $"Error fetching NPM metadata: {ex.Message}"); return null; diff --git a/src/Shared/PackageManagers/NuGetProjectManager.cs b/src/Shared/PackageManagers/NuGetProjectManager.cs index 1c28aa7b..16cb5921 100644 --- a/src/Shared/PackageManagers/NuGetProjectManager.cs +++ b/src/Shared/PackageManagers/NuGetProjectManager.cs @@ -16,6 +16,7 @@ namespace Microsoft.CST.OpenSource.PackageManagers using System.Collections.Generic; using System.IO; using System.Linq; + using System.Net; using System.Net.Http; using System.Text.Json; using System.Threading.Tasks; @@ -154,13 +155,18 @@ private async Task GetRegistrationEndpointAsync() } // Construct a new PackageURL that's guaranteed to have a version. PackageURL purlWithVersion = new (purl.Type, purl.Namespace, packageName, packageVersion, purl.Qualifiers, purl.Subpath); - + NuGetPackageVersionMetadata? packageVersionMetadata = await Actions.GetMetadataAsync(purlWithVersion, useCache: useCache); return JsonSerializer.Serialize(packageVersionMetadata); } - catch (Exception ex) + catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound) + { + Logger.Debug(ex, $"Error fetching NuGet metadata: {ex.Message}"); + return null; + } + catch (InvalidOperationException ex) when (purl.Version == null) { Logger.Debug(ex, $"Error fetching NuGet metadata: {ex.Message}"); return null; diff --git a/src/Shared/PackageManagers/PyPIProjectManager.cs b/src/Shared/PackageManagers/PyPIProjectManager.cs index 4178b447..07867234 100644 --- a/src/Shared/PackageManagers/PyPIProjectManager.cs +++ b/src/Shared/PackageManagers/PyPIProjectManager.cs @@ -289,7 +289,7 @@ public override async Task> EnumerateVersionsAsync(PackageUR return await GetHttpStringCache(httpClient, $"{ENV_PYPI_ENDPOINT}/pypi/{purl.Name}/json", useCache); } - catch (Exception ex) + catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { Logger.Debug(ex, "Error fetching PyPI metadata: {0}", ex.Message); return null; From 0381edad1c06485e9f287ffb60f4d1b38269fe41 Mon Sep 17 00:00:00 2001 From: Naomi Zheng Date: Wed, 1 Apr 2026 21:02:53 -0400 Subject: [PATCH 2/2] propogate exceptions for terrapin --- src/Shared/PackageManagers/CargoProjectManager.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/Shared/PackageManagers/CargoProjectManager.cs b/src/Shared/PackageManagers/CargoProjectManager.cs index faa4575f..e7890a7a 100644 --- a/src/Shared/PackageManagers/CargoProjectManager.cs +++ b/src/Shared/PackageManagers/CargoProjectManager.cs @@ -357,14 +357,9 @@ public override Uri GetPackageAbsoluteUri(PackageURL purl) return null; } - catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.InternalServerError) - { - Logger.Debug($"Unable to get published timestamp for package: {purl}, error: {ex.Message}"); - return null; - } - catch (Exception ex) + catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { - Logger.Debug(ex, "Error fetching PublishedTimeStamp: {0}", ex.Message); + Logger.Debug($"RSS feed not found for package: {purl}, error: {ex.Message}"); return null; } }