Skip to content

Commit c9821c2

Browse files
Nenad Vicenticarturcic
Nenad Vicentic
authored andcommitted
Support configuring multiple /overrideconfig options by adding multiple instances of /overrideconfig (eg. /overrideconfig tag-prefix=custom /overrideconfig assembly-versioning-scheme=MajorMinor)
1 parent cf8f98e commit c9821c2

File tree

4 files changed

+17
-18
lines changed

4 files changed

+17
-18
lines changed

docs/input/docs/usage/cli/arguments.md

+7-4
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,15 @@ gitversion init Configuration utility for gitversion
9999

100100
## Override config
101101

102-
`/overrideconfig [key=value]` will override appropriate key from 'GitVersion.yml'.
102+
`/overrideconfig [key=value]` will override appropriate `key` from 'GitVersion.yml'.
103103

104-
Multiple options are separated by semicolon: `key1=value1;key2=value2`.
104+
To specify multiple options add multiple `/overrideconfig [key=value]` entries:
105+
`/overrideconfig key1=value1 /overrideconfig key2=value2`.
105106

106107
To have **space characters** as a part of `value`, `value` has be enclosed with double quotes - `key="My value"`.
107108

108109
Double quote character inside of the double quoted `value` has to be be escaped with a backslash '\\' - `key="My \"escaped-quotes\""`.
109110

110-
If closing double-qoute character is missing, it will be implicitily added at the very end of the command line argument - `key="My Value;key2=2(")`.
111-
112111
Following options are supported:
113112
1. `assembly-file-versioning-format`
114113
1. `assembly-file-versioning-scheme`
@@ -152,6 +151,10 @@ Will pickup up environment variable `BUILD_NUMBER` or fallback to zero for assem
152151

153152
Will use only major and minor version numbers for assembly version. Assembly build and revision numbers will be 0 (e.g. `1.2.0.0`)
154153

154+
### Example: How to override multiple configuration options
155+
156+
`GitVersion.exe /output json /overrideconfig tag-prefix=custom /overrideconfig assembly-versioning-scheme=MajorMinor`
157+
155158
### Example: How to override configuration option 'update-build-number'
156159

157160
`GitVersion.exe /output json /overrideconfig update-build-number=true`

src/GitVersion.App.Tests/ArgumentParserTests.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -559,30 +559,30 @@ private static IEnumerable<TestCaseData> OverrideconfigWithSingleOptionTestData(
559559
[TestCaseSource(nameof(OverrideconfigWithMultipleOptionsTestData))]
560560
public void OverrideconfigWithMultipleOptions(string options, Config expected)
561561
{
562-
var arguments = argumentParser.ParseArguments($"/overrideconfig {options}");
562+
var arguments = argumentParser.ParseArguments(options);
563563
arguments.OverrideConfig.ShouldBeEquivalentTo(expected);
564564
}
565565

566566
private static IEnumerable<TestCaseData> OverrideconfigWithMultipleOptionsTestData()
567567
{
568568
yield return new TestCaseData(
569-
"tag-prefix=sample;assembly-versioning-scheme=MajorMinor",
569+
"/overrideconfig tag-prefix=sample /overrideconfig assembly-versioning-scheme=MajorMinor",
570570
new Config
571571
{
572572
TagPrefix = "sample",
573573
AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinor,
574574
}
575-
);
575+
);
576576
yield return new TestCaseData(
577-
"tag-prefix=sample;assembly-versioning-format=\"{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}\"",
577+
"/overrideconfig tag-prefix=sample /overrideconfig assembly-versioning-format=\"{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}\"",
578578
new Config
579579
{
580580
TagPrefix = "sample",
581581
AssemblyVersioningFormat = "{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}"
582582
}
583583
);
584584
yield return new TestCaseData(
585-
"tag-prefix=sample;assembly-versioning-format=\"{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}\";update-build-number=true;assembly-versioning-scheme=MajorMinorPatchTag;mode=ContinuousDelivery;tag-pre-release-weight=4",
585+
"/overrideconfig tag-prefix=sample /overrideconfig assembly-versioning-format=\"{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}\" /overrideconfig update-build-number=true /overrideconfig assembly-versioning-scheme=MajorMinorPatchTag /overrideconfig mode=ContinuousDelivery /overrideconfig tag-pre-release-weight=4",
586586
new Config
587587
{
588588
TagPrefix = "sample",

src/GitVersion.App.Tests/QuotedStringHelpersTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ private static IEnumerable<TestCaseData> RemoveEmptyEntriesTestData()
110110
}
111111

112112
[TestCaseSource(nameof(UnquoteTextTestData))]
113-
public string UnquoteTextTextTests(string input)
113+
public string UnquoteTextTests(string input)
114114
{
115115
return QuotedStringHelpers.UnquoteText(input);
116116
}

src/GitVersion.App/ArgumentParser.cs

+4-8
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ private static bool ParseConfigArguments(Arguments arguments, string name, strin
298298

299299
if (name.IsSwitch("overrideconfig"))
300300
{
301-
ParseOverrideConfig(arguments, value);
301+
ParseOverrideConfig(arguments, values);
302302
return true;
303303
}
304304

@@ -422,19 +422,15 @@ private static void ParseVerbosity(Arguments arguments, string value)
422422
}
423423
}
424424

425-
private static void ParseOverrideConfig(Arguments arguments, string value)
425+
private static void ParseOverrideConfig(Arguments arguments, string[] values)
426426
{
427-
// TODO: Split valu with regex so that double quotes are taken in consideration as well as escaped double quotes.
428-
var keyValueOptions = QuotedStringHelpers.SplitUnquoted(value, ';');
429-
if (keyValueOptions.Length == 0)
430-
{
427+
if (values == null || values.Length == 0)
431428
return;
432-
}
433429

434430
var parser = new OverrideConfigOptionParser();
435431

436432
// key=value
437-
foreach (var keyValueOption in keyValueOptions)
433+
foreach (var keyValueOption in values)
438434
{
439435
var keyAndValue = QuotedStringHelpers.SplitUnquoted(keyValueOption, '=');
440436
if (keyAndValue.Length != 2)

0 commit comments

Comments
 (0)