Skip to content

Commit

Permalink
(NuGet#9) Add overload for ResolvePackages method
Browse files Browse the repository at this point in the history
This overload includes an additional parameter for includePrerelease,
to determine whether prerelease packages should be returned or not. For
Chocolatey, prerelease packages should only be included if the --pre
argument is used.

This commit addresses an issue when installing Chocolatey GUI, where
the dotnetfx dependency is resolved to be the prerelease version, when
it shouldn't be.
  • Loading branch information
gep13 committed Feb 19, 2023
1 parent ba314fc commit 45fcb12
Show file tree
Hide file tree
Showing 9 changed files with 294 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,44 @@ public override async Task<IEnumerable<SourcePackageDependencyInfo>> ResolvePack
}
}

//////////////////////////////////////////////////////////
// Start - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
public override async Task<IEnumerable<SourcePackageDependencyInfo>> ResolvePackages(
string packageId,
bool includePrerelease,
NuGetFramework projectFramework,
SourceCacheContext sourceCacheContext,
ILogger log,
CancellationToken token)
{
token.ThrowIfCancellationRequested();

try
{
var packages = await _feedParser.FindPackagesByIdAsync(packageId, true, includePrerelease, sourceCacheContext, log, token);

var results = new List<SourcePackageDependencyInfo>();

foreach (var package in packages)
{
results.Add(CreateDependencyInfo(package, projectFramework));
}
return results;
}
catch (Exception ex)
{
// Wrap exceptions coming from the server with a user friendly message
var error = String.Format(CultureInfo.CurrentCulture, Strings.Protocol_PackageMetadataError, packageId, _source);

throw new FatalProtocolException(error, ex);
}
}

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

/// <summary>
/// Convert a V2 feed package into a V3 PackageDependencyInfo
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,75 @@ public override Task<IEnumerable<SourcePackageDependencyInfo>> ResolvePackages(
return Task.FromResult<IEnumerable<SourcePackageDependencyInfo>>(results);
}

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

/// <summary>
/// Retrieve dependency info for a single package.
/// </summary>
/// <param name="packageId">package id</param>
/// <param name="includePrerelease">Should prerelease packages be resolved?</param>
/// <param name="projectFramework">project target framework. This is used for finding the dependency group</param>
/// <param name="token">cancellation token</param>
public override Task<IEnumerable<SourcePackageDependencyInfo>> ResolvePackages(
string packageId,
bool includePrerelease,
NuGetFramework projectFramework,
SourceCacheContext sourceCacheContext,
ILogger log,
CancellationToken token)
{
if (packageId == null)
{
throw new ArgumentNullException(nameof(packageId));
}

if (projectFramework == null)
{
throw new ArgumentNullException(nameof(projectFramework));
}

var results = new List<SourcePackageDependencyInfo>();

try
{
// Retrieve all packages
foreach (var package in _localResource.FindPackagesById(packageId, log, token))
{
// Filter based on whether or not prerelease packages are included
if (package.Identity.Version.IsPrerelease && !includePrerelease)
{
continue;
}

// Convert to dependency info type
results.Add(CreateDependencyInfo(package, projectFramework));
}
}
catch (NuGetProtocolException)
{
throw;
}
catch (Exception ex)
{
// Wrap exceptions coming from the server with a user friendly message
var error = string.Format(
CultureInfo.CurrentCulture,
Strings.Protocol_PackageMetadataError,
packageId,
_localResource.Root);

throw new FatalProtocolException(error, ex);
}

return Task.FromResult<IEnumerable<SourcePackageDependencyInfo>>(results);
}

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

/// <summary>
/// Convert a package into a PackageDependencyInfo
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -290,13 +290,18 @@ NuGet.Protocol.V2FeedParser.SearchCountAsync(string searchTerm, NuGet.Protocol.C
NuGet.Protocol.V2FeedQueryBuilder.BuildSearchUri(string searchTerm, NuGet.Protocol.Core.Types.SearchFilter filters, int skip, int take, bool isCount) -> string
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.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>
override NuGet.Protocol.DependencyInfoResourceV2Feed.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.DependencyInfoResourceV2Feed.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>>
override NuGet.Protocol.DependencyInfoResourceV3.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>
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.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>>
override NuGet.Protocol.LocalPackageSearchResource.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.PackageSearchResourceV2Feed.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.PackageSearchResourceV3.SearchCountAsync(string searchTerm, NuGet.Protocol.Core.Types.SearchFilter filters, NuGet.Common.ILogger log, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<int>
Expand All @@ -316,5 +321,6 @@ override NuGet.Protocol.ChocolateyProgressStream.Write(byte[] buffer, int offset
static NuGet.Protocol.ChocolateyProgressInfo.ShouldDisplayDownloadProgress.get -> bool
static NuGet.Protocol.ChocolateyProgressInfo.ShouldDisplayDownloadProgress.set -> void
static NuGet.Protocol.GlobalPackagesFolderUtility.AddPackageAsync(string source, NuGet.Packaging.Core.PackageIdentity packageIdentity, System.IO.Stream packageStream, string globalPackagesFolder, System.Guid parentId, NuGet.Packaging.Signing.ClientPolicyContext clientPolicyContext, NuGet.Common.ILogger logger, System.Threading.CancellationToken token, NuGet.Protocol.ChocolateyProgressInfo progressInfo) -> System.Threading.Tasks.Task<NuGet.Protocol.Core.Types.DownloadResourceResult>
virtual NuGet.Protocol.Core.Types.DependencyInfoResource.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>>
virtual NuGet.Protocol.HttpSource.ProcessHttpStreamAsync<T>(NuGet.Protocol.HttpSourceRequest request, System.Func<System.Net.Http.HttpResponseMessage, System.Threading.Tasks.Task<T>> processAsync, NuGet.Common.ILogger log, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<T>
virtual NuGet.Protocol.HttpSource.ProcessStreamAsync<T>(NuGet.Protocol.HttpSourceRequest request, System.Func<System.IO.Stream, NuGet.Protocol.ChocolateyProgressInfo, System.Threading.Tasks.Task<T>> processAsync, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger log, NuGet.Protocol.ChocolateyProgressInfo progressInfo, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<T>
Loading

0 comments on commit 45fcb12

Please sign in to comment.