Skip to content

Commit 5bc0385

Browse files
committed
More cleanups.
1 parent ef25eb5 commit 5bc0385

File tree

6 files changed

+81
-17
lines changed

6 files changed

+81
-17
lines changed

src/PostSharp.Engineering.BuildTools/Build/Model/BuildInfo.cs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,51 @@ namespace PostSharp.Engineering.BuildTools.Build.Model
1010
/// <summary>
1111
/// Information about a build, required to format a <see cref="ParametricString"/>.
1212
/// </summary>
13-
/// <param name="PackageVersion">Full NuGet package version.</param>
14-
/// <param name="Configuration">Configuration name.</param>
15-
/// <param name="MSBuildConfiguration">MSBuild configuration name.</param>
16-
public record BuildInfo( string? PackageVersion, string Configuration, string MSBuildConfiguration, string? PackagePreviewVersion )
13+
public record BuildInfo
1714
{
18-
public BuildInfo( string? packageVersion, BuildConfiguration configuration, Product product, string? packagePreviewVersion ) : this(
15+
internal BuildInfo( string? packageVersion, BuildConfiguration configuration, Product product, string? packagePreviewVersion ) : this(
1916
packageVersion,
2017
configuration,
2118
product.DependencyDefinition,
2219
packagePreviewVersion ) { }
2320

24-
public BuildInfo( string? packageVersion, BuildConfiguration configuration, DependencyDefinition dependencyDefinition, string? packagePreviewVersion ) : this(
21+
internal BuildInfo(
22+
string? packageVersion,
23+
BuildConfiguration configuration,
24+
DependencyDefinition dependencyDefinition,
25+
string? packagePreviewVersion ) : this(
2526
packageVersion,
2627
configuration.ToString(),
2728
dependencyDefinition.MSBuildConfiguration[configuration],
2829
packagePreviewVersion ) { }
2930

31+
internal BuildInfo( string? packageVersion, string configuration, string msBuildConfiguration, string? packagePreviewVersion )
32+
{
33+
this.PackageVersion = packageVersion;
34+
this.Configuration = configuration;
35+
this.MSBuildConfiguration = msBuildConfiguration;
36+
this.PackagePreviewVersion = packagePreviewVersion;
37+
}
38+
3039
public bool IsPrerelease => this.PackageVersion?.Contains( "-", StringComparison.Ordinal ) ?? throw new InvalidOperationException();
40+
41+
/// <summary>Full NuGet package version.</summary>
42+
public string? PackageVersion { get; init; }
43+
44+
/// <summary>Configuration name.</summary>
45+
public string Configuration { get; init; }
46+
47+
/// <summary>MSBuild configuration name.</summary>
48+
public string MSBuildConfiguration { get; init; }
49+
50+
public string? PackagePreviewVersion { get; init; }
51+
52+
public void Deconstruct( out string? PackageVersion, out string Configuration, out string MSBuildConfiguration, out string? PackagePreviewVersion )
53+
{
54+
PackageVersion = this.PackageVersion;
55+
Configuration = this.Configuration;
56+
MSBuildConfiguration = this.MSBuildConfiguration;
57+
PackagePreviewVersion = this.PackagePreviewVersion;
58+
}
3159
}
3260
}

src/PostSharp.Engineering.BuildTools/Build/Model/ParametricString.cs

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,65 @@
11
// Copyright (c) SharpCrafters s.r.o. See the LICENSE.md file in the root directory of this repository root for details.
22

3+
using JetBrains.Annotations;
34
using System;
45

56
namespace PostSharp.Engineering.BuildTools.Build.Model
67
{
78
/// <summary>
8-
/// A string that can contain the following parameters: <c>$(PackageVersion)</c>, <c>$(Configuration)</c> or <c>$(MSSBuildConfiguration)</c>.
9+
/// A string that can contain the following parameters: <c>$(PackageVersion)</c>, <c>$(Configuration)</c> or <c>$(MSBuildConfiguration)</c>.
910
/// </summary>
11+
[PublicAPI]
1012
public readonly struct ParametricString
1113
{
1214
private readonly string? _value;
1315

14-
private ParametricString( string value )
16+
public ParametricString( string value )
1517
{
1618
this._value = value;
1719
}
1820

1921
public override string ToString() => this._value ?? "<null>";
2022

2123
public string ToString( BuildInfo parameters )
22-
=> this._value?
23-
.Replace( "$(PackageVersion)", parameters.PackageVersion, StringComparison.OrdinalIgnoreCase )
24-
.Replace( "$(PackagePreviewVersion)", parameters.PackagePreviewVersion, StringComparison.OrdinalIgnoreCase )
25-
.Replace( "$(Configuration)", parameters.Configuration, StringComparison.OrdinalIgnoreCase )
26-
.Replace( "$(MSSBuildConfiguration)", parameters.MSBuildConfiguration, StringComparison.OrdinalIgnoreCase ) ?? "";
24+
{
25+
var value = this._value;
26+
27+
if ( value == null )
28+
{
29+
throw new ArgumentNullException();
30+
}
31+
32+
Replace( ref value, "PackageVersion", parameters.PackageVersion );
33+
Replace( ref value, "PackagePreviewVersion", parameters.PackagePreviewVersion );
34+
Replace( ref value, "Configuration", parameters.Configuration );
35+
Replace( ref value, "MSBuildConfiguration", parameters.MSBuildConfiguration );
36+
37+
// Historic typo.
38+
Replace( ref value, "MSSBuildConfiguration", parameters.MSBuildConfiguration );
39+
40+
if ( value.Contains( "$(", StringComparison.Ordinal ) )
41+
{
42+
throw new InvalidOperationException( $"The {nameof(ParametricString)} contains an unresolved parameter." );
43+
}
44+
45+
return value;
46+
}
47+
48+
private static void Replace( ref string s, string parameterName, string? value )
49+
{
50+
var placeholder = $"$({parameterName})";
51+
52+
if ( s.Contains( placeholder, StringComparison.OrdinalIgnoreCase ) )
53+
{
54+
if ( value == null )
55+
{
56+
throw new InvalidOperationException(
57+
$"The parametric string contains a reference to the '{parameterName}' parameter, but it was not supplied." );
58+
}
59+
60+
s = s.Replace( placeholder, value, StringComparison.OrdinalIgnoreCase );
61+
}
62+
}
2763

2864
public static implicit operator ParametricString( string value ) => new( value );
2965
}

src/PostSharp.Engineering.BuildTools/Dependencies/Definitions/MetalamaDependencies.V2025_0.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public MetalamaDependencyDefinition(
8383
MetalamaGitHubOrganization.Metalama )
8484
{
8585
EngineeringDirectory = "eng-Metalama",
86-
PrivateArtifactsDirectory = Path.Combine( "artifacts", "packages", "$(MSSBuildConfiguration)", "Shipping" )
86+
PrivateArtifactsDirectory = Path.Combine( "artifacts", "packages", "$(MSBuildConfiguration)", "Shipping" )
8787
};
8888

8989
public static DependencyDefinition MetalamaFrameworkRunTime { get; } =

src/PostSharp.Engineering.BuildTools/Dependencies/Definitions/MetalamaDependencies.V2025_1.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public MetalamaDependencyDefinition(
7676
MetalamaGitHubOrganization.Metalama )
7777
{
7878
EngineeringDirectory = "eng-Metalama",
79-
PrivateArtifactsDirectory = Path.Combine( "artifacts", "packages", "$(MSSBuildConfiguration)", "Shipping" )
79+
PrivateArtifactsDirectory = Path.Combine( "artifacts", "packages", "$(MSBuildConfiguration)", "Shipping" )
8080
};
8181

8282
public static DependencyDefinition Metalama { get; } =

src/PostSharp.Engineering.BuildTools/Dependencies/Definitions/MetalamaDependencies.V2025_2.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public MetalamaDependencyDefinition(
7676
MetalamaGitHubOrganization.Metalama )
7777
{
7878
EngineeringDirectory = "eng-Metalama",
79-
PrivateArtifactsDirectory = Path.Combine( "artifacts", "packages", "$(MSSBuildConfiguration)", "Shipping" )
79+
PrivateArtifactsDirectory = Path.Combine( "artifacts", "packages", "$(MSBuildConfiguration)", "Shipping" )
8080
};
8181

8282
public static DependencyDefinition Metalama { get; } =

src/PostSharp.Engineering.BuildTools/Dependencies/Definitions/MetalamaDependencies.V2026_0.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public MetalamaDependencyDefinition(
7777
MetalamaGitHubOrganization.Metalama )
7878
{
7979
EngineeringDirectory = "eng-Metalama",
80-
PrivateArtifactsDirectory = Path.Combine( "artifacts", "packages", "$(MSSBuildConfiguration)", "Shipping" )
80+
PrivateArtifactsDirectory = Path.Combine( "artifacts", "packages", "$(MSBuildConfiguration)", "Shipping" )
8181
};
8282

8383
public static DependencyDefinition Metalama { get; } =

0 commit comments

Comments
 (0)