dotnet-installer/src/Microsoft.DotNet.Cli/Program.cs

102 lines
3.2 KiB
C#
Raw Normal View History

2015-10-03 18:34:08 +00:00
using System;
2015-11-02 00:21:10 +00:00
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
2015-11-02 00:21:10 +00:00
using System.Runtime.InteropServices;
using Microsoft.Dnx.Runtime.Common.CommandLine;
using Microsoft.DotNet.Cli.Utils;
2015-10-03 18:34:08 +00:00
namespace Microsoft.DotNet.Cli
{
public class Program
{
2015-11-02 00:21:10 +00:00
private const string HelpText = @".NET Command Line Interface
Usage: dotnet [common-options] [command] [arguments]
Arguments:
[command] The command to execute
[arguments] Arguments to pass to the command
Common Options (passed before the command):
-v|--verbose Enable verbose output
Common Commands:
compile Compiles a .NET project
publish Publishes a .NET project for deployment
run Compiles and immediately executes a .NET project";
2015-10-03 18:34:08 +00:00
public static int Main(string[] args)
{
2015-11-02 00:21:10 +00:00
// CommandLineApplication is a bit restrictive, so we parse things ourselves here. Individual apps should use CLA.
var verbose = false;
var command = string.Empty;
var lastArg = 0;
2015-11-02 00:21:10 +00:00
for (; lastArg < args.Length; lastArg++)
2015-10-08 21:49:39 +00:00
{
2015-11-02 00:21:10 +00:00
if (IsArg(args[lastArg], "v", "verbose"))
2015-10-08 21:49:39 +00:00
{
2015-11-02 00:21:10 +00:00
verbose = true;
}
else if (args[lastArg].StartsWith("-"))
{
PrintHelp($"Unknown option: ${args[lastArg]}");
2015-10-08 21:49:39 +00:00
}
else
{
2015-11-02 00:21:10 +00:00
// It's the command, and we're done!
command = args[lastArg];
break;
2015-10-08 21:49:39 +00:00
}
}
2015-11-02 00:21:10 +00:00
var appArgs = (lastArg + 1) >= args.Length ? Enumerable.Empty<string>() : args.Skip(lastArg + 1).ToArray();
if (string.IsNullOrEmpty(command) || command.Equals("help", StringComparison.OrdinalIgnoreCase))
2015-10-08 21:49:39 +00:00
{
2015-11-02 00:21:10 +00:00
return RunHelpCommand(appArgs);
}
return Command.Create("dotnet-" + command, appArgs)
.EnvironmentVariable(CommandContext.Variables.Verbose, verbose.ToString())
.EnvironmentVariable(CommandContext.Variables.AnsiPassThru, bool.TrueString)
.ForwardStdErr()
.ForwardStdOut()
.Execute()
.ExitCode;
}
private static int RunHelpCommand(IEnumerable<string> appArgs)
{
if (appArgs.Any())
{
return Command.Create("dotnet-" + appArgs.First(), "--help")
2015-10-08 21:49:39 +00:00
.ForwardStdErr()
.ForwardStdOut()
.Execute()
2015-10-08 21:49:39 +00:00
.ExitCode;
}
2015-11-02 00:21:10 +00:00
else
{
PrintHelp();
return 0;
}
}
private static void PrintHelp(string errorMessage = null)
{
if(!string.IsNullOrEmpty(errorMessage))
{
Reporter.Error.WriteLine(errorMessage.Red());
}
Reporter.Output.WriteLine(HelpText);
2015-10-08 21:49:39 +00:00
}
2015-11-02 00:21:10 +00:00
private static bool IsArg(string candidate, string shortName, string longName)
2015-10-08 21:49:39 +00:00
{
2015-11-02 00:21:10 +00:00
return candidate.Equals("-" + shortName) || candidate.Equals("--" + longName);
}
2015-10-03 18:34:08 +00:00
}
}