Skip to content

Commit

Permalink
(NuGet#9) Update capabilities to check for FindPackagesById
Browse files Browse the repository at this point in the history
This commit updates the legacy capabilities resource to
store whether the feed has the endpoint FindPackagesById available
or not.

There are some feeds we are aware of that does not include
this endpoint, and we need to be able to support calls to
these feeds. As such we need to store the capabilities
available for the endpoint.
  • Loading branch information
AdmiringWorm authored and gep13 committed Mar 14, 2023
1 parent 958247b commit 79857ea
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/NuGet.Core/NuGet.Protocol/ILegacyFeedCapabilityResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,15 @@ public interface ILegacyFeedCapabilityResource
{
Task<bool> SupportsIsAbsoluteLatestVersionAsync(ILogger log, CancellationToken token);
Task<bool> SupportsSearchAsync(ILogger log, CancellationToken token);

//////////////////////////////////////////////////////////
// Start - Chocolatey Specific Modification
//////////////////////////////////////////////////////////

Task<bool> SupportsFindPackagesByIdAsync(ILogger log, CancellationToken token);

//////////////////////////////////////////////////////////
// End - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,21 @@ public override async Task<bool> SupportsSearchAsync(ILogger log, CancellationTo
return capabilities.SupportsSearch;
}

//////////////////////////////////////////////////////////
// Start - Chocolatey Specific Modification
//////////////////////////////////////////////////////////

public override async Task<bool> SupportsFindPackagesByIdAsync(ILogger log, CancellationToken token)
{
var capabilities = await GetCachedCapabilitiesAsync(log, token);

return capabilities.SupportsFindPackageById;
}

//////////////////////////////////////////////////////////
// End - Chocolatey Specific Modification
//////////////////////////////////////////////////////////

private async Task<Capabilities> GetCachedCapabilitiesAsync(ILogger log, CancellationToken token)
{
var task = CachedCapabilities.GetOrAdd(
Expand Down Expand Up @@ -87,6 +102,22 @@ private async Task<Capabilities> GetCapabilitiesAsync(string metadataUri, ILogge
capabilities.SupportsSearch = metadata
.SupportedMethodNames
.Contains("Search");

//////////////////////////////////////////////////////////
// Start - Chocolatey Specific Modification
//////////////////////////////////////////////////////////

capabilities.SupportsFindPackageById = metadata
.SupportedMethodNames
.Contains("FindPackagesById");

capabilities.SupportsGetUpdates = metadata
.SupportedMethodNames
.Contains("GetUpdates");

//////////////////////////////////////////////////////////
// End - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
}
catch
{
Expand Down Expand Up @@ -114,6 +145,18 @@ private async Task<Capabilities> GetCapabilitiesAsync(string metadataUri, ILogge
private class Capabilities
{
public string MetadataUri { get; set; }

//////////////////////////////////////////////////////////
// Start - Chocolatey Specific Modification
//////////////////////////////////////////////////////////

public bool SupportsFindPackageById { get; set; }
public bool SupportsGetUpdates { get; set; }

//////////////////////////////////////////////////////////
// End - Chocolatey Specific Modification
//////////////////////////////////////////////////////////

public bool SupportsIsAbsoluteLatestVersion { get; set; }
public bool SupportsSearch { get; set; }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ NuGet.Protocol.ChocolateyProgressStream
NuGet.Protocol.ChocolateyProgressStream.ChocolateyProgressStream(System.IO.Stream s) -> void
NuGet.Protocol.ChocolateyProgressStream.ReadProgress -> NuGet.Protocol.StreamUpdate
NuGet.Protocol.ChocolateyProgressStream.WriteProgress -> NuGet.Protocol.StreamUpdate
NuGet.Protocol.Core.Types.ILegacyFeedCapabilityResource.SupportsFindPackagesByIdAsync(NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<bool>
NuGet.Protocol.Core.Types.IPackageSearchMetadata.BugTrackerUrl.get -> System.Uri
NuGet.Protocol.Core.Types.IPackageSearchMetadata.DocsUrl.get -> System.Uri
NuGet.Protocol.Core.Types.IPackageSearchMetadata.DownloadCache.get -> System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.DownloadCache>
Expand Down Expand Up @@ -295,6 +296,7 @@ NuGet.Protocol.V2FeedQueryBuilder.BuildSearchUri(string searchTerm, NuGet.Protoc
abstract NuGet.Protocol.Core.Types.DependencyInfoResource.ResolvePackage(NuGet.Packaging.Core.PackageIdentity package, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>
abstract NuGet.Protocol.Core.Types.DependencyInfoResource.ResolvePackages(string packageId, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
abstract NuGet.Protocol.Core.Types.DependencyInfoResource.ResolvePackages(string packageId, bool includePrerelease, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
abstract NuGet.Protocol.Core.Types.LegacyFeedCapabilityResource.SupportsFindPackagesByIdAsync(NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<bool>
abstract NuGet.Protocol.Core.Types.ListResource.PackageAsync(string searchTerm, bool prerelease, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<NuGet.Protocol.Core.Types.IPackageSearchMetadata>
abstract NuGet.Protocol.Core.Types.PackageSearchResource.SearchCountAsync(string searchTerm, NuGet.Protocol.Core.Types.SearchFilter filters, NuGet.Common.ILogger log, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<int>
override NuGet.Protocol.DependencyInfoResourceV2Feed.ResolvePackage(NuGet.Packaging.Core.PackageIdentity package, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext sourceCacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>
Expand All @@ -304,6 +306,7 @@ override NuGet.Protocol.DependencyInfoResourceV3.ResolvePackage(NuGet.Packaging.
override NuGet.Protocol.DependencyInfoResourceV3.ResolvePackages(string packageId, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
override NuGet.Protocol.DependencyInfoResourceV3.ResolvePackages(string packageId, bool includePrerelease, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
override NuGet.Protocol.DependencyInfoResourceV3.ResolvePackages(string packageId, bool includePrerelease, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.RemoteSourceDependencyInfo>>
override NuGet.Protocol.LegacyFeedCapabilityResourceV2Feed.SupportsFindPackagesByIdAsync(NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<bool>
override NuGet.Protocol.LocalDependencyInfoResource.ResolvePackage(NuGet.Packaging.Core.PackageIdentity package, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext sourceCacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>
override NuGet.Protocol.LocalDependencyInfoResource.ResolvePackages(string packageId, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext sourceCacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
override NuGet.Protocol.LocalDependencyInfoResource.ResolvePackages(string packageId, bool includePrerelease, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext sourceCacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ NuGet.Protocol.ChocolateyProgressStream
NuGet.Protocol.ChocolateyProgressStream.ChocolateyProgressStream(System.IO.Stream s) -> void
NuGet.Protocol.ChocolateyProgressStream.ReadProgress -> NuGet.Protocol.StreamUpdate
NuGet.Protocol.ChocolateyProgressStream.WriteProgress -> NuGet.Protocol.StreamUpdate
NuGet.Protocol.Core.Types.ILegacyFeedCapabilityResource.SupportsFindPackagesByIdAsync(NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<bool>
NuGet.Protocol.Core.Types.IPackageSearchMetadata.BugTrackerUrl.get -> System.Uri
NuGet.Protocol.Core.Types.IPackageSearchMetadata.DocsUrl.get -> System.Uri
NuGet.Protocol.Core.Types.IPackageSearchMetadata.DownloadCache.get -> System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.DownloadCache>
Expand Down Expand Up @@ -295,6 +296,7 @@ NuGet.Protocol.V2FeedQueryBuilder.BuildSearchUri(string searchTerm, NuGet.Protoc
abstract NuGet.Protocol.Core.Types.DependencyInfoResource.ResolvePackage(NuGet.Packaging.Core.PackageIdentity package, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>
abstract NuGet.Protocol.Core.Types.DependencyInfoResource.ResolvePackages(string packageId, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
abstract NuGet.Protocol.Core.Types.DependencyInfoResource.ResolvePackages(string packageId, bool includePrerelease, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
abstract NuGet.Protocol.Core.Types.LegacyFeedCapabilityResource.SupportsFindPackagesByIdAsync(NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<bool>
abstract NuGet.Protocol.Core.Types.ListResource.PackageAsync(string searchTerm, bool prerelease, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<NuGet.Protocol.Core.Types.IPackageSearchMetadata>
abstract NuGet.Protocol.Core.Types.PackageSearchResource.SearchCountAsync(string searchTerm, NuGet.Protocol.Core.Types.SearchFilter filters, NuGet.Common.ILogger log, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<int>
override NuGet.Protocol.DependencyInfoResourceV2Feed.ResolvePackage(NuGet.Packaging.Core.PackageIdentity package, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext sourceCacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>
Expand All @@ -304,6 +306,7 @@ override NuGet.Protocol.DependencyInfoResourceV3.ResolvePackage(NuGet.Packaging.
override NuGet.Protocol.DependencyInfoResourceV3.ResolvePackages(string packageId, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
override NuGet.Protocol.DependencyInfoResourceV3.ResolvePackages(string packageId, bool includePrerelease, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
override NuGet.Protocol.DependencyInfoResourceV3.ResolvePackages(string packageId, bool includePrerelease, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.RemoteSourceDependencyInfo>>
override NuGet.Protocol.LegacyFeedCapabilityResourceV2Feed.SupportsFindPackagesByIdAsync(NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<bool>
override NuGet.Protocol.LocalDependencyInfoResource.ResolvePackage(NuGet.Packaging.Core.PackageIdentity package, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext sourceCacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>
override NuGet.Protocol.LocalDependencyInfoResource.ResolvePackages(string packageId, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext sourceCacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
override NuGet.Protocol.LocalDependencyInfoResource.ResolvePackages(string packageId, bool includePrerelease, Chocolatey.NuGet.Frameworks.NuGetFramework projectFramework, NuGet.Protocol.Core.Types.SourceCacheContext sourceCacheContext, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<NuGet.Protocol.Core.Types.SourcePackageDependencyInfo>>
Expand Down
Loading

0 comments on commit 79857ea

Please sign in to comment.