using System;
|
using System.IO;
|
using System.Linq;
|
using System.Reflection;
|
|
namespace OpenTap.Cli;
|
|
internal class TapEntry
|
{
|
private static bool IsColor()
|
{
|
string[] arguments = Environment.GetCommandLineArgs();
|
if (arguments.Contains("--color") || arguments.Contains("-c"))
|
return true;
|
var envvar = Environment.GetEnvironmentVariable("OPENTAP_COLOR");
|
if (envvar == null)
|
return false;
|
if (envvar == "always")
|
return true;
|
else if (envvar == "auto")
|
return !(Console.IsErrorRedirected || Console.IsOutputRedirected);
|
else if (envvar != "never")
|
Console.WriteLine("Unknown value of variable OPENTAP_COLOR, valid values are always, auto or never.");
|
return false;
|
}
|
|
public static void Go()
|
{
|
var args = Environment.GetCommandLineArgs();
|
|
bool installCommand = args.Contains("install");
|
bool uninstallCommand = args.Contains("uninstall");
|
bool packageManagerCommand = args.Contains("packagemanager");
|
|
// "--no-isolation" can be useful for debugging package install related issues,
|
// e.g when deploying an image with "tap image install ..."
|
bool noIsolation = args.Contains("--no-isolation");
|
|
if ((installCommand || uninstallCommand || packageManagerCommand) && !noIsolation)
|
{
|
// "trick" applications into thinking we are running isolated. This is
|
// for compatibility reasons. OpenTAP no longer starts isolated child
|
// processes since it is no longer necessary, but older versions of
|
// e.g. PackageManager will not work correctly when this is not set.
|
Environment.SetEnvironmentVariable(ExecutorSubProcess.EnvVarNames.ParentProcessExeDir, Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));
|
}
|
|
ConsoleTraceListener.SetStartupTime(DateTime.Now);
|
|
bool isVerbose = args.Contains("--verbose") || args.Contains("-v");
|
bool isQuiet = args.Contains("--quiet") || args.Contains("-q"); ;
|
bool isColor = IsColor();
|
var cliTraceListener = new ConsoleTraceListener(isVerbose, isQuiet, isColor);
|
Log.AddListener(cliTraceListener);
|
AppDomain.CurrentDomain.ProcessExit += (s, e) => cliTraceListener.Flush();
|
|
PluginManager.Search();
|
DebuggerAttacher.TryAttach();
|
CliActionExecutor.Execute();
|
}
|
}
|