chr
2026-04-05 fe750b791d5b517cc4e9bc8e99a9a75139a0cfba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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();
    }
}