Skip to content

Commit 349f9d9

Browse files
feat: Allowed to indicate the source of nuget package and whether it is a pre-release version. (#1659)
1 parent e1c8cb8 commit 349f9d9

File tree

3 files changed

+40
-15
lines changed

3 files changed

+40
-15
lines changed

src/BenchmarkDotNet/Jobs/JobExtensions.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -329,25 +329,25 @@ public static Job WithEnvironmentVariable(this Job job, [NotNull] string key, [N
329329
/// </summary>
330330
/// <param name="job"></param>
331331
/// <param name="packageName">The NuGet package name</param>
332-
/// <param name="packageVersion">The NuGet package version</param>
332+
/// <param name="packageVersion">(optional)The NuGet package version</param>
333+
/// <param name="source">(optional)Indicate the URI of the NuGet package source to use during the restore operation.</param>
334+
/// <param name="prerelease">(optional)Allows prerelease packages to be installed.</param>
333335
/// <returns></returns>
334-
public static Job WithNuGet(this Job job, string packageName, string packageVersion) => job.WithCore(j => j.Infrastructure.NuGetReferences = new NuGetReferenceList(j.Infrastructure.NuGetReferences ?? Array.Empty<NuGetReference>()) { new NuGetReference(packageName, packageVersion) });
335-
336-
/// <summary>
337-
/// Runs the job with a specific NuGet dependency which will be resolved during the Job build process
338-
/// </summary>
339-
/// <param name="job"></param>
340-
/// <param name="packageName">The NuGet package name, the latest version will be resolved</param>
341-
/// <returns></returns>
342-
public static Job WithNuGet(this Job job, string packageName) => job.WithNuGet(packageName, string.Empty);
336+
public static Job WithNuGet(this Job job, string packageName, string packageVersion = null, Uri source = null, bool prerelease = false) =>
337+
job.WithCore(j => j.Infrastructure.NuGetReferences =
338+
new NuGetReferenceList(j.Infrastructure.NuGetReferences ?? Array.Empty<NuGetReference>())
339+
{
340+
new NuGetReference(packageName, packageVersion, source, prerelease)
341+
});
343342

344343
/// <summary>
345344
/// Runs the job with a specific NuGet dependencies which will be resolved during the Job build process
346345
/// </summary>
347346
/// <param name="job"></param>
348347
/// <param name="nuGetReferences">A collection of NuGet dependencies</param>
349348
/// <returns></returns>
350-
public static Job WithNuGet(this Job job, NuGetReferenceList nuGetReferences) => job.WithCore(j => j.Infrastructure.NuGetReferences = nuGetReferences);
349+
public static Job WithNuGet(this Job job, NuGetReferenceList nuGetReferences) =>
350+
job.WithCore(j => j.Infrastructure.NuGetReferences = nuGetReferences);
351351

352352
// Accuracy
353353
/// <summary>

src/BenchmarkDotNet/Jobs/NugetReference.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace BenchmarkDotNet.Jobs
66
{
77
public class NuGetReference : IEquatable<NuGetReference>
88
{
9-
public NuGetReference(string packageName, string packageVersion)
9+
public NuGetReference(string packageName, string packageVersion, Uri source = null, bool prerelease = false)
1010
{
1111
if (string.IsNullOrWhiteSpace(packageName))
1212
throw new ArgumentException("message", nameof(packageName));
@@ -16,12 +16,15 @@ public NuGetReference(string packageName, string packageVersion)
1616
if (!string.IsNullOrWhiteSpace(PackageVersion) && !IsValidVersion(packageVersion))
1717
throw new InvalidOperationException($"Invalid version specified: {packageVersion}");
1818

19-
PackageVersion = packageVersion;
20-
19+
PackageVersion = packageVersion ?? string.Empty;
20+
PackageSource = source;
21+
Prerelease = prerelease;
2122
}
2223

2324
public string PackageName { get; }
2425
public string PackageVersion { get; }
26+
public bool Prerelease { get; }
27+
public Uri PackageSource { get; }
2528

2629
public override bool Equals(object obj)
2730
{

src/BenchmarkDotNet/Toolchains/DotNetCli/DotNetCliCommand.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ private static IEnumerable<string> GetNuGetAddPackageCommands(BenchmarkCase benc
179179

180180
var nuGetRefs = benchmarkCase.Job.ResolveValue(InfrastructureMode.NuGetReferencesCharacteristic, resolver);
181181

182-
return nuGetRefs.Select(x => $"add package {x.PackageName}{(string.IsNullOrWhiteSpace(x.PackageVersion) ? string.Empty : " -v " + x.PackageVersion)}");
182+
return nuGetRefs.Select(BuildAddPackageCommand);
183183
}
184184

185185
private static string GetMandatoryMsBuildSettings(string buildConfiguration)
@@ -196,5 +196,27 @@ private static string GetMandatoryMsBuildSettings(string buildConfiguration)
196196

197197
return $"{NoMsBuildZombieProcesses} {EnforceOptimizations}";
198198
}
199+
200+
private static string BuildAddPackageCommand(NuGetReference reference)
201+
{
202+
var commandBuilder = new StringBuilder();
203+
commandBuilder.Append("add package ");
204+
commandBuilder.Append(reference.PackageName);
205+
if (!string.IsNullOrWhiteSpace(reference.PackageVersion))
206+
{
207+
commandBuilder.Append(" -v ");
208+
commandBuilder.Append(reference.PackageVersion);
209+
}
210+
if (reference.PackageSource != null)
211+
{
212+
commandBuilder.Append(" -s ");
213+
commandBuilder.Append(reference.PackageSource);
214+
}
215+
if (reference.Prerelease)
216+
{
217+
commandBuilder.Append(" --prerelease");
218+
}
219+
return commandBuilder.ToString();
220+
}
199221
}
200222
}

0 commit comments

Comments
 (0)