Skip to content

Commit 292270b

Browse files
(+) Added /output parameter to allow the customization of the output type (json or buildserver)
(-) Removed logging to console
1 parent 623f617 commit 292270b

File tree

5 files changed

+83
-31
lines changed

5 files changed

+83
-31
lines changed

GitVersion/ArgumentParser.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,18 @@ public static Arguments ParseArguments(List<string> commandLineArguments)
9494
continue;
9595
}
9696

97+
if (IsSwitch("output", name))
98+
{
99+
var outputType = OutputType.Json;
100+
if (!Enum.TryParse(value, true, out outputType))
101+
{
102+
throw new ErrorException(string.Format("Value '{0}' cannot be parsed as output type, please use 'json' or 'buildserver'", value));
103+
}
104+
105+
arguments.Output = outputType;
106+
continue;
107+
}
108+
97109
throw new ErrorException(string.Format("Could not parse command line parameter '{0}'.", name));
98110
}
99111
return arguments;
@@ -125,13 +137,10 @@ static void EnsureArgumentsEvenCount(List<string> commandLineArguments, List<str
125137

126138
static bool IsHelp(string singleArgument)
127139
{
128-
return (singleArgument == "?") ||
129-
(singleArgument == "/h") ||
130-
(singleArgument == "/help") ||
131-
(singleArgument == "/?") ||
132-
(singleArgument == "-h") ||
133-
(singleArgument == "-help") ||
134-
(singleArgument == "-?");
140+
return (singleArgument == "?") ||
141+
IsSwitch("h", singleArgument) ||
142+
IsSwitch("help", singleArgument) ||
143+
IsSwitch("?", singleArgument);
135144
}
136145

137146
static string[] VersionParts = {"major", "minor", "patch", "long", "short", "nuget"};

GitVersion/Arguments.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,20 @@ namespace GitVersion
22
{
33
using System;
44

5+
public enum OutputType
6+
{
7+
BuildServer,
8+
9+
Json
10+
}
11+
512
public class Arguments
613
{
714
public Arguments()
815
{
916
Username = Environment.GetEnvironmentVariable("GITVERSION_REMOTE_USERNAME");
1017
Password = Environment.GetEnvironmentVariable("GITVERSION_REMOTE_PASSWORD");
18+
Output = OutputType.Json;
1119
}
1220

1321
public string TargetPath;
@@ -21,5 +29,7 @@ public Arguments()
2129
public bool IsHelp;
2230
public string LogFilePath;
2331
public string VersionPart;
32+
33+
public OutputType Output;
2434
}
2535
}

GitVersion/HelpWriter.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ public static void Write()
1111
1212
GitVersion [path] [/l logFilePath]
1313
14-
path The directory containing .git. If not defined current directory is used.
15-
/url Url to remote git repository.
16-
/b Name of the branch to use on the remote repository, must be used in combination with /url.
17-
/u Username in case authentication is required.
18-
/p Password in case authentication is required.
19-
/l Path to logfile.
14+
path The directory containing .git. If not defined current directory is used.
15+
/url Url to remote git repository.
16+
/b Name of the branch to use on the remote repository, must be used in combination with /url.
17+
/u Username in case authentication is required.
18+
/p Password in case authentication is required.
19+
/output Determines the output to the console. Can be either 'json' or 'buildserver', will default to 'json'.
20+
/l Path to logfile.
2021
";
2122
Console.Write(message);
2223
}

GitVersion/Program.cs

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,26 +40,32 @@ static void Main()
4040

4141
var versionAndBranch = VersionCache.GetVersion(gitDirectory);
4242

43-
foreach (var buildServer in applicableBuildServers)
43+
if (arguments.Output == OutputType.BuildServer)
4444
{
45-
buildServer.WriteIntegration(versionAndBranch, Logger.WriteInfo);
45+
foreach (var buildServer in applicableBuildServers)
46+
{
47+
buildServer.WriteIntegration(versionAndBranch, Logger.WriteInfo);
48+
}
4649
}
4750

48-
var versionAsKeyValue = versionAndBranch.ToKeyValue();
49-
switch (arguments.VersionPart)
51+
if (arguments.Output == OutputType.Json)
5052
{
51-
case null:
52-
Console.WriteLine(JsonOutputFormatter.ToJson(versionAsKeyValue));
53-
break;
54-
55-
default:
56-
string part;
57-
if (!versionAsKeyValue.TryGetValue(arguments.VersionPart, out part))
58-
{
59-
throw new ErrorException(string.Format("Could not extract '{0}' from the available parts.", arguments.VersionPart));
60-
}
61-
Console.WriteLine(part);
62-
break;
53+
var versionAsKeyValue = versionAndBranch.ToKeyValue();
54+
switch (arguments.VersionPart)
55+
{
56+
case null:
57+
Console.WriteLine(JsonOutputFormatter.ToJson(versionAsKeyValue));
58+
break;
59+
60+
default:
61+
string part;
62+
if (!versionAsKeyValue.TryGetValue(arguments.VersionPart, out part))
63+
{
64+
throw new ErrorException(string.Format("Could not extract '{0}' from the available parts.", arguments.VersionPart));
65+
}
66+
Console.WriteLine(part);
67+
break;
68+
}
6369
}
6470

6571
if (gitPreparer.IsDynamicGitRepository)
@@ -108,7 +114,6 @@ static void ConfigureLogging(Arguments arguments)
108114
{
109115
writeAction = x =>
110116
{
111-
Console.WriteLine(x);
112117
};
113118
}
114119
else
@@ -121,7 +126,6 @@ static void ConfigureLogging(Arguments arguments)
121126

122127
writeAction = x =>
123128
{
124-
Console.WriteLine(x);
125129
WriteLogEntry(arguments, x);
126130
};
127131
}

Tests/ArgumentParserTests.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,34 @@ public void Username_and_Password_can_be_parsed()
6161
Assert.IsFalse(arguments.IsHelp);
6262
}
6363

64+
[Test]
65+
public void Unknown_output_should_throw()
66+
{
67+
var exception = Assert.Throws<ErrorException>(() => ArgumentParser.ParseArguments("targetDirectoryPath -output invalid_value"));
68+
Assert.AreEqual("Value 'invalid_value' cannot be parsed as output type, please use 'json' or 'buildserver'", exception.Message);
69+
}
70+
71+
[Test]
72+
public void Output_defaults_to_json()
73+
{
74+
var arguments = ArgumentParser.ParseArguments("targetDirectoryPath");
75+
Assert.AreEqual(OutputType.Json, arguments.Output);
76+
}
77+
78+
[Test]
79+
public void Output_json_can_be_parsed()
80+
{
81+
var arguments = ArgumentParser.ParseArguments("targetDirectoryPath -output json");
82+
Assert.AreEqual(OutputType.Json, arguments.Output);
83+
}
84+
85+
[Test]
86+
public void Output_buildserver_can_be_parsed()
87+
{
88+
var arguments = ArgumentParser.ParseArguments("targetDirectoryPath -output buildserver");
89+
Assert.AreEqual(OutputType.BuildServer, arguments.Output);
90+
}
91+
6492
[Test]
6593
public void Url_and_BranchName_can_be_parsed()
6694
{

0 commit comments

Comments
 (0)