Skip to content

Commit 9e0c7a9

Browse files
authored
Merge pull request #3401 from arturcic/feature/3400-format-argument
#3400 - added format command line switch
2 parents 2d0ca0e + 01c9a07 commit 9e0c7a9

File tree

17 files changed

+184
-4
lines changed

17 files changed

+184
-4
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ GitVersion [path]
3737
/showvariable Used in conjuntion with /output json, will output just a
3838
particular variable. E.g. /output json /showvariable SemVer
3939
- will output `1.2.3+beta.4`
40+
/format Used in conjuntion with /output json, will output a format
41+
containing version variables.
42+
E.g. /output json /format {SemVer} - will output `1.2.3+beta.4`
43+
/output json /format {Major}.{Minor} - will output `1.2`
4044
/l Path to logfile.
4145
/config Path to config file (defaults to GitVersion.yml)
4246
/showconfig Outputs the effective GitVersion config (defaults + custom

src/GitVersion.App.Tests/ArgumentParserTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,4 +726,18 @@ public void ArbitraryArgumentsRemotePasswordDefinedSetsPassword()
726726
var arguments = this.argumentParser.ParseArguments("-nocache");
727727
arguments.Authentication.Password.ShouldBe("value");
728728
}
729+
730+
[Test]
731+
public void EnsureShowVariableIsSet()
732+
{
733+
var arguments = this.argumentParser.ParseArguments("-showvariable SemVer");
734+
arguments.ShowVariable.ShouldBe("SemVer");
735+
}
736+
737+
[Test]
738+
public void EnsureFormatIsSet()
739+
{
740+
var arguments = this.argumentParser.ParseArguments("-format {Major}.{Minor}.{Patch}");
741+
arguments.Format.ShouldBe("{Major}.{Minor}.{Patch}");
742+
}
729743
}

src/GitVersion.App.Tests/GitVersion.App.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
<ItemGroup>
1717
<Compile Include="..\GitVersion.Core.Tests\Helpers\DirectoryHelper.cs" Link="Helpers\DirectoryHelper.cs" />
1818
<Compile Include="..\GitVersion.Core.Tests\Helpers\ExecutableHelper.cs" Link="Helpers\ExecutableHelper.cs" />
19+
<Compile Include="..\GitVersion.Core.Tests\Helpers\TestConsoleAdapter.cs">
20+
<Link>Helpers\TestConsoleAdapter.cs</Link>
21+
</Compile>
1922
<Compile Include="..\GitVersion.Core.Tests\Helpers\TestEffectiveConfiguration.cs" Link="Helpers\TestEffectiveConfiguration.cs" />
2023
<Compile Include="..\GitVersion.Core.Tests\Helpers\TestEnvironment.cs" Link="Helpers\TestEnvironment.cs" />
2124
<Compile Include="..\GitVersion.Core.Tests\Helpers\TestFileSystem.cs" Link="Helpers\TestFileSystem.cs" />

src/GitVersion.App.Tests/HelpWriterTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ public void AllArgsAreInHelp()
3232
{ nameof(Arguments.Verbosity), "/verbosity" },
3333
{ nameof(Arguments.CommitId), "/c" },
3434
{ nameof(Arguments.ShowConfiguration), "/showconfig" },
35-
{ nameof(Arguments.OverrideConfiguration), "/overrideconfig" }
35+
{ nameof(Arguments.OverrideConfiguration), "/overrideconfig" },
36+
{ nameof(Arguments.ShowVariable), "/showvariable" },
37+
{ nameof(Arguments.Format), "/format" }
3638
};
3739
string helpText = string.Empty;
3840

src/GitVersion.App/ArgumentParser.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,12 @@ private static bool ParseSwitches(Arguments arguments, string? name, IReadOnlyLi
236236
return true;
237237
}
238238

239+
if (name.IsSwitch("format"))
240+
{
241+
ParseFormat(arguments, value);
242+
return true;
243+
}
244+
239245
if (name.IsSwitch("output"))
240246
{
241247
ParseOutput(arguments, values);
@@ -371,6 +377,23 @@ private static void ParseShowVariable(Arguments arguments, string? value, string
371377
arguments.ShowVariable = versionVariable;
372378
}
373379

380+
private static void ParseFormat(Arguments arguments, string? value)
381+
{
382+
if (value.IsNullOrWhiteSpace())
383+
{
384+
throw new WarningException("Format requires a valid format string. Available variables are: " + string.Join(", ", VersionVariables.AvailableVariables));
385+
}
386+
387+
var foundVariable = VersionVariables.AvailableVariables.Any(variable => value.Contains(variable, StringComparison.CurrentCultureIgnoreCase));
388+
389+
if (!foundVariable)
390+
{
391+
throw new WarningException("Format requires a valid format string. Available variables are: " + string.Join(", ", VersionVariables.AvailableVariables));
392+
}
393+
394+
arguments.Format = value;
395+
}
396+
374397
private static void ParseEnsureAssemblyInfo(Arguments arguments, string? value)
375398
{
376399
arguments.EnsureAssemblyInfo = true;

src/GitVersion.App/Arguments.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class Arguments
3030

3131
public string? LogFilePath;
3232
public string? ShowVariable;
33+
public string? Format;
3334
public string? OutputFile;
3435
public ISet<OutputType> Output = new HashSet<OutputType>();
3536
public Verbosity Verbosity = Verbosity.Normal;
@@ -92,6 +93,7 @@ public GitVersionOptions ToOptions()
9293

9394
LogFilePath = LogFilePath,
9495
ShowVariable = ShowVariable,
96+
Format = Format,
9597
Verbosity = Verbosity,
9698
Output = Output,
9799
OutputFile = OutputFile

src/GitVersion.App/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ GitVersion.Arguments.CommitId -> string?
1111
GitVersion.Arguments.ConfigurationFile -> string?
1212
GitVersion.Arguments.Diag -> bool
1313
GitVersion.Arguments.EnsureAssemblyInfo -> bool
14+
GitVersion.Arguments.Format -> string?
1415
GitVersion.Arguments.Init -> bool
1516
GitVersion.Arguments.IsHelp -> bool
1617
GitVersion.Arguments.IsVersion -> bool
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[assembly: Parallelizable(ParallelScope.Fixtures)]

src/GitVersion.Core.Tests/GitVersion.Core.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@
2424
</ItemGroup>
2525
<ItemGroup>
2626
<InternalsVisibleTo Include="GitVersion.BuildAgents.Tests" />
27+
<InternalsVisibleTo Include="GitVersion.Output.Tests" />
2728
</ItemGroup>
2829
</Project>

src/GitVersion.App.Tests/Helpers/TestConsoleAdapter.cs renamed to src/GitVersion.Core.Tests/Helpers/TestConsoleAdapter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using GitVersion.Logging;
22

3-
namespace GitVersion.App.Tests;
3+
namespace GitVersion.Core.Tests.Helpers;
44

55
public class TestConsoleAdapter : IConsole
66
{

0 commit comments

Comments
 (0)