Skip to content

Commit a60358c

Browse files
AOT Compatible: Add overrideVersion to enforce -Version precedence (#7133)
1 parent 880b5bd commit a60358c

5 files changed

Lines changed: 51 additions & 12 deletions

File tree

src/NuGet.Core/NuGet.Commands/CommandRunners/PackCommandRunner.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,8 @@ private PackageBuilder CreatePackageBuilderFromNuspec(string path)
453453
_packArgs.GetPropertyValue,
454454
!_packArgs.ExcludeEmptyDirectories,
455455
_packArgs.Deterministic,
456-
_packArgs.Logger);
456+
_packArgs.Logger,
457+
_packArgs.Version);
457458
}
458459

459460
return new PackageBuilder(
@@ -462,7 +463,8 @@ private PackageBuilder CreatePackageBuilderFromNuspec(string path)
462463
_packArgs.GetPropertyValue,
463464
!_packArgs.ExcludeEmptyDirectories,
464465
_packArgs.Deterministic,
465-
_packArgs.Logger);
466+
_packArgs.Logger,
467+
_packArgs.Version);
466468
}
467469

468470
private bool BuildFromProjectFile(string path)

src/NuGet.Core/NuGet.Packaging/PackageCreation/Authoring/Manifest.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ public static Manifest ReadFrom(Stream stream, bool validateSchema)
116116
}
117117

118118
public static Manifest ReadFrom(Stream stream, Func<string, string> propertyProvider, bool validateSchema)
119+
{
120+
return ReadFrom(stream, propertyProvider, validateSchema, overrideVersion: null);
121+
}
122+
123+
public static Manifest ReadFrom(Stream stream, Func<string, string> propertyProvider, bool validateSchema, NuGetVersion overrideVersion)
119124
{
120125
XDocument document;
121126
if (propertyProvider == null)
@@ -147,14 +152,9 @@ public static Manifest ReadFrom(Stream stream, Func<string, string> propertyProv
147152
// Deserialize it
148153
var manifest = ManifestReader.ReadManifest(document);
149154

150-
// Update manifest metadata version if version was provided by the CLI command
151-
if (propertyProvider is not null && propertyProvider.Target.GetType().Name.Equals("PackArgs"))
155+
if (overrideVersion != null)
152156
{
153-
var versionProperty = propertyProvider.Target.GetType().GetProperty("Version");
154-
if (versionProperty?.GetValue(propertyProvider.Target) is string version)
155-
{
156-
manifest.Metadata.Version = NuGetVersion.Parse(version);
157-
}
157+
manifest.Metadata.Version = overrideVersion;
158158
}
159159

160160
// Validate before returning

src/NuGet.Core/NuGet.Packaging/PackageCreation/Authoring/PackageBuilder.cs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class PackageBuilder : IPackageMetadata
3535
private readonly bool _includeEmptyDirectories;
3636
private readonly bool _deterministic;
3737
private readonly ILogger _logger;
38+
private readonly string _versionOverride;
3839

3940
/// <summary>
4041
/// Maximum Icon file size: 1 megabyte
@@ -52,7 +53,12 @@ public PackageBuilder(string path, Func<string, string> propertyProvider, bool i
5253
}
5354

5455
public PackageBuilder(string path, Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, ILogger logger)
55-
: this(path, Path.GetDirectoryName(path), propertyProvider, includeEmptyDirectories, deterministic, logger)
56+
: this(path, Path.GetDirectoryName(path), propertyProvider, includeEmptyDirectories, deterministic, logger, versionOverride: "")
57+
{
58+
}
59+
60+
public PackageBuilder(string path, Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, ILogger logger, string versionOverride)
61+
: this(path, Path.GetDirectoryName(path), propertyProvider, includeEmptyDirectories, deterministic, logger, versionOverride)
5662
{
5763
}
5864

@@ -62,12 +68,21 @@ public PackageBuilder(string path, string basePath, Func<string, string> propert
6268
}
6369

6470
public PackageBuilder(string path, string basePath, Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, ILogger logger)
65-
: this(path, basePath, propertyProvider, includeEmptyDirectories, deterministic)
71+
: this(path, basePath, propertyProvider, includeEmptyDirectories, deterministic, logger, versionOverride: "")
72+
{
73+
}
74+
public PackageBuilder(string path, string basePath, Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, ILogger logger, string versionOverride)
75+
: this(path, basePath, propertyProvider, includeEmptyDirectories, deterministic, versionOverride)
6676
{
6777
_logger = logger;
6878
}
6979

7080
public PackageBuilder(string path, string basePath, Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic)
81+
: this(path, basePath, propertyProvider, includeEmptyDirectories, deterministic, versionOverride: "")
82+
{
83+
84+
}
85+
public PackageBuilder(string path, string basePath, Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, string versionOverride)
7186
: this(includeEmptyDirectories, deterministic)
7287
{
7388
if (!File.Exists(path))
@@ -77,6 +92,8 @@ public PackageBuilder(string path, string basePath, Func<string, string> propert
7792
string.Format(CultureInfo.CurrentCulture, Strings.ErrorManifestFileNotFound, path ?? "null"));
7893
}
7994

95+
_versionOverride = versionOverride;
96+
8097
using (Stream stream = File.OpenRead(path))
8198
{
8299
ReadManifest(stream, basePath, propertyProvider);
@@ -89,8 +106,14 @@ public PackageBuilder(Stream stream, string basePath)
89106
}
90107

91108
public PackageBuilder(Stream stream, string basePath, Func<string, string> propertyProvider)
109+
: this(stream, basePath, propertyProvider, "")
110+
{
111+
}
112+
113+
public PackageBuilder(Stream stream, string basePath, Func<string, string> propertyProvider, string versionOverride)
92114
: this()
93115
{
116+
_versionOverride = versionOverride;
94117
ReadManifest(stream, basePath, propertyProvider);
95118
}
96119

@@ -921,7 +944,11 @@ private void ValidateReadmeFile(IEnumerable<IPackageFile> files, string readmePa
921944
private void ReadManifest(Stream stream, string basePath, Func<string, string> propertyProvider)
922945
{
923946
// Deserialize the document and extract the metadata
924-
Manifest manifest = Manifest.ReadFrom(stream, propertyProvider, validateSchema: true);
947+
Manifest manifest = Manifest.ReadFrom(
948+
stream,
949+
propertyProvider,
950+
validateSchema: true,
951+
overrideVersion: !(string.IsNullOrEmpty(_versionOverride)) ? NuGetVersion.Parse(_versionOverride) : null);
925952

926953
Populate(manifest.Metadata);
927954

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
11
#nullable enable
2+
~NuGet.Packaging.PackageBuilder.PackageBuilder(string path, string basePath, System.Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, NuGet.Common.ILogger logger, string versionOverride) -> void
3+
~NuGet.Packaging.PackageBuilder.PackageBuilder(string path, string basePath, System.Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, string versionOverride) -> void
4+
~NuGet.Packaging.PackageBuilder.PackageBuilder(string path, System.Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, NuGet.Common.ILogger logger, string versionOverride) -> void
5+
~NuGet.Packaging.PackageBuilder.PackageBuilder(System.IO.Stream stream, string basePath, System.Func<string, string> propertyProvider, string versionOverride) -> void
6+
~static NuGet.Packaging.Manifest.ReadFrom(System.IO.Stream stream, System.Func<string, string> propertyProvider, bool validateSchema, NuGet.Versioning.NuGetVersion overrideVersion) -> NuGet.Packaging.Manifest
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
11
#nullable enable
2+
~NuGet.Packaging.PackageBuilder.PackageBuilder(string path, string basePath, System.Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, NuGet.Common.ILogger logger, string versionOverride) -> void
3+
~NuGet.Packaging.PackageBuilder.PackageBuilder(string path, string basePath, System.Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, string versionOverride) -> void
4+
~NuGet.Packaging.PackageBuilder.PackageBuilder(string path, System.Func<string, string> propertyProvider, bool includeEmptyDirectories, bool deterministic, NuGet.Common.ILogger logger, string versionOverride) -> void
5+
~NuGet.Packaging.PackageBuilder.PackageBuilder(System.IO.Stream stream, string basePath, System.Func<string, string> propertyProvider, string versionOverride) -> void
6+
~static NuGet.Packaging.Manifest.ReadFrom(System.IO.Stream stream, System.Func<string, string> propertyProvider, bool validateSchema, NuGet.Versioning.NuGetVersion overrideVersion) -> NuGet.Packaging.Manifest

0 commit comments

Comments
 (0)