Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
ArgumentParser cleanup
  • Loading branch information
arturcic committed Oct 18, 2019
commit 39f4d0621bd24c21c33b53aaeb48b4fef4834047
5 changes: 2 additions & 3 deletions src/GitVersionExe.Tests/ArgumentParserTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using GitVersion;
using NUnit.Framework;
using Shouldly;
Expand Down Expand Up @@ -66,7 +65,7 @@ public void Exec()
[Test]
public void Exec_with_args()
{
var arguments = argumentParser.ParseArguments(new List<string>
var arguments = argumentParser.ParseArguments(new []
{
"-exec",
"rake",
Expand All @@ -87,7 +86,7 @@ public void Msbuild()
[Test]
public void Msbuild_with_args()
{
var arguments = argumentParser.ParseArguments(new List<string>
var arguments = argumentParser.ParseArguments(new []
{
"-proj",
"msbuild.proj",
Expand Down
47 changes: 11 additions & 36 deletions src/GitVersionExe/ArgumentParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,41 +13,18 @@ namespace GitVersion
{
public class ArgumentParser : IArgumentParser
{
public Arguments ParseArguments()
{
var argumentsWithoutExeName = GetArgumentsWithoutExeName();

Arguments arguments = null;
try
{
arguments = ParseArguments(argumentsWithoutExeName);
}
catch (Exception exception)
{
Console.WriteLine("Failed to parse arguments: {0}", string.Join(" ", argumentsWithoutExeName));
if (!string.IsNullOrWhiteSpace(exception.Message))
{
Console.WriteLine(exception.Message);
}

return arguments;
}

return arguments;
}

public Arguments ParseArguments(string commandLineArguments)
{
var arguments = commandLineArguments
.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.ToList();
.ToArray();

return ParseArguments(arguments);
}

public Arguments ParseArguments(List<string> commandLineArguments)
public Arguments ParseArguments(string[] commandLineArguments)
{
if (commandLineArguments.Count == 0)
if (commandLineArguments.Length == 0)
{
return new Arguments
{
Expand Down Expand Up @@ -75,6 +52,7 @@ public Arguments ParseArguments(List<string> commandLineArguments)
}

var arguments = new Arguments();

var switchesAndValues = CollectSwitchesAndValuesFromArguments(commandLineArguments, out var firstArgumentIsSwitch);

for (var i = 0; i < switchesAndValues.AllKeys.Length; i++)
Expand Down Expand Up @@ -189,6 +167,7 @@ public Arguments ParseArguments(List<string> commandLineArguments)
{
arguments.Diag = true;
}

continue;
}

Expand Down Expand Up @@ -267,6 +246,7 @@ public Arguments ParseArguments(List<string> commandLineArguments)
{
arguments.ShowConfig = true;
}

continue;
}

Expand Down Expand Up @@ -312,6 +292,7 @@ public Arguments ParseArguments(List<string> commandLineArguments)
{
throw new WarningException("Can't specify multiple assembly info files when using /ensureassemblyinfo switch, either use a single assembly info file or do not specify /ensureassemblyinfo and create assembly info files manually");
}

continue;
}

Expand Down Expand Up @@ -370,6 +351,7 @@ public Arguments ParseArguments(List<string> commandLineArguments)
{
throw new WarningException($"Could not parse Verbosity value '{value}'");
}

continue;
}

Expand Down Expand Up @@ -416,15 +398,15 @@ public Arguments ParseArguments(List<string> commandLineArguments)
return arguments;
}

private void EnsureArgumentValueCount(string[] values, int maxArguments = 1)
private static void EnsureArgumentValueCount(string[] values, int maxArguments = 1)
{
if (values != null && values.Length > maxArguments)
{
throw new WarningException($"Could not parse command line parameter '{values[1]}'.");
}
}

private NameValueCollection CollectSwitchesAndValuesFromArguments(IList<string> namedArguments, out bool firstArgumentIsSwitch)
private static NameValueCollection CollectSwitchesAndValuesFromArguments(IList<string> namedArguments, out bool firstArgumentIsSwitch)
{
firstArgumentIsSwitch = true;
var switchesAndValues = new NameValueCollection();
Expand All @@ -446,7 +428,7 @@ private NameValueCollection CollectSwitchesAndValuesFromArguments(IList<string>
else if (currentKey != null)
{
// And if the current switch does not have a value yet and the value is not itself a switch, set its value to this argument.
if (String.IsNullOrEmpty(switchesAndValues[currentKey]))
if (string.IsNullOrEmpty(switchesAndValues[currentKey]))
{
switchesAndValues[currentKey] = arg;
}
Expand All @@ -467,12 +449,5 @@ private NameValueCollection CollectSwitchesAndValuesFromArguments(IList<string>

return switchesAndValues;
}

private static List<string> GetArgumentsWithoutExeName()
{
return Environment.GetCommandLineArgs()
.Skip(1)
.ToList();
}
}
}
6 changes: 2 additions & 4 deletions src/GitVersionExe/IArgumentParser.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
using System.Collections.Generic;

namespace GitVersion
{
public interface IArgumentParser
{
Arguments ParseArguments(string commandLineArguments);
Arguments ParseArguments(List<string> commandLineArguments);
Arguments ParseArguments(string[] commandLineArguments);
}
}
}
10 changes: 6 additions & 4 deletions src/GitVersionExe/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,23 @@
using GitVersion.Common;
using GitVersion.Configuration;
using GitVersion.Logging;
using Console = System.Console;
using Environment = GitVersion.Common.Environment;

namespace GitVersion
{
class Program
{
static void Main()
static void Main(string[] args)
{
var fileSystem = new FileSystem();
var environment = new Environment();
var argumentParser = new ArgumentParser();
var arguments = argumentParser.ParseArguments();

int exitCode;
if (arguments != null)
try
{
var arguments = argumentParser.ParseArguments(args);
var log = new Log
{
Verbosity = arguments.Verbosity
Expand All @@ -32,8 +33,9 @@ static void Main()

exitCode = app.Run(arguments);
}
else
catch (Exception exception)
{
Console.Error.WriteLine(exception.Message);
exitCode = 1;
}

Expand Down
6 changes: 3 additions & 3 deletions src/GitVersionTask/GitVersionTasks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ namespace GitVersionTask
{
public static class GitVersionTasks
{
private static ILog log;
private static IEnvironment environment;
private static IFileSystem fileSystem;
private static readonly ILog log;
private static readonly IEnvironment environment;
private static readonly IFileSystem fileSystem;

static GitVersionTasks()
{
Expand Down