Skip to content

Commit 4d49d16

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents 5606bf1 + 3e74e07 commit 4d49d16

File tree

4 files changed

+65
-1
lines changed

4 files changed

+65
-1
lines changed

src/GitVersion.App.Tests/ArgumentParserTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,13 @@ private static IEnumerable<TestCaseData> OverrideConfigWithSingleOptionTestData(
533533
UpdateBuildNumber = true
534534
}
535535
);
536+
yield return new TestCaseData(
537+
"strategies=[\"None\",\"Mainline\"]",
538+
new GitVersionConfiguration
539+
{
540+
VersionStrategies = [VersionStrategies.None, VersionStrategies.Mainline]
541+
}
542+
);
536543
}
537544

538545
[TestCaseSource(nameof(OverrideConfigWithMultipleOptionsTestData))]

src/GitVersion.App/OverrideConfigurationOptionParser.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using GitVersion.Configuration;
2+
using GitVersion.VersionCalculation;
23

34
namespace GitVersion;
45

@@ -45,7 +46,8 @@ private static bool IsSupportedPropertyType(Type propertyType)
4546
return unwrappedType == typeof(string)
4647
|| unwrappedType.IsEnum
4748
|| unwrappedType == typeof(int)
48-
|| unwrappedType == typeof(bool);
49+
|| unwrappedType == typeof(bool)
50+
|| unwrappedType == typeof(VersionStrategies[]);
4951
}
5052

5153
internal void SetValue(string key, string value) => overrideConfiguration[key] = QuotedStringHelpers.UnquoteText(value);

src/GitVersion.Configuration/ConfigurationSerializer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ internal class ConfigurationSerializer : IConfigurationSerializer
88
{
99
private static IDeserializer Deserializer => new DeserializerBuilder()
1010
.WithNamingConvention(HyphenatedNamingConvention.Instance)
11+
.WithTypeConverter(VersionStrategiesConverter.Instance)
1112
.WithTypeInspector(inspector => new JsonPropertyNameInspector(inspector))
1213
.Build();
1314

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using GitVersion.VersionCalculation;
2+
using YamlDotNet.Core;
3+
using YamlDotNet.Core.Events;
4+
using YamlDotNet.Serialization;
5+
using YamlDotNet.Serialization.NamingConventions;
6+
7+
namespace GitVersion.Configuration;
8+
9+
internal class VersionStrategiesConverter : IYamlTypeConverter
10+
{
11+
public static readonly IYamlTypeConverter Instance = new VersionStrategiesConverter();
12+
13+
public bool Accepts(Type type) => type == typeof(VersionStrategies[]);
14+
15+
public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
16+
{
17+
List<VersionStrategies> strategies = new();
18+
19+
if (parser.TryConsume<SequenceStart>(out var _))
20+
{
21+
while (!parser.TryConsume<SequenceEnd>(out var _))
22+
{
23+
string data = parser.Consume<Scalar>().Value;
24+
25+
var strategy = Enum.Parse<VersionStrategies>(data);
26+
strategies.Add(strategy);
27+
}
28+
}
29+
else
30+
{
31+
string data = parser.Consume<Scalar>().Value;
32+
33+
var deserializer = new DeserializerBuilder()
34+
.WithNamingConvention(UnderscoredNamingConvention.Instance)
35+
.Build();
36+
37+
strategies = deserializer.Deserialize<List<VersionStrategies>>(data);
38+
}
39+
40+
return strategies.ToArray();
41+
}
42+
43+
public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer)
44+
{
45+
VersionStrategies[] strategies = (VersionStrategies[])value!;
46+
47+
var s = new SerializerBuilder()
48+
.JsonCompatible()
49+
.Build();
50+
var data = s.Serialize(strategies);
51+
52+
emitter.Emit(new Scalar(data));
53+
}
54+
}

0 commit comments

Comments
 (0)