Esempio n. 1
0
 private static void PrintOptionsList(TextWriter @out, Options options)
 {
     GetOptParser.GetOptions(options)
     .Where(_ => !_.IsOperands)
     .Where(IncludeInHelp)
     .Select(_ => new { indent, _.Syntax, _.Description })
     .ToTable(header: false)
     .Write(@out);
 }
Esempio n. 2
0
        public void TestLongSingleInt()
        {
            var name     = "num";
            var expected = 12;
            var input    = $"--{name} {expected}";

            var parser   = new GetOptParser();
            var provider = parser.Parse(input);

            Assert.AreEqual(expected, provider.Get <int>(name));
        }
Esempio n. 3
0
        public void TestMultipleParameters()
        {
            var input    = "-x 640 -y 480 --num 100 -vdi --no-commit";
            var parser   = new GetOptParser();
            var provider = parser.Parse(input);

            Assert.AreEqual(640, provider.Get <int>("x"));
            Assert.AreEqual(480, provider.Get <int>("y"));
            Assert.AreEqual(100, provider.Get <int>("num"));
            Assert.AreEqual(true, provider.Get <bool>("v"));
            Assert.AreEqual(true, provider.Get <bool>("d"));
            Assert.AreEqual(true, provider.Get <bool>("i"));
            Assert.AreEqual(true, provider.Get <bool>("no-commit"));
        }
Esempio n. 4
0
        /// <summary>
        /// Extract the target to be called and its arguments from command line arguments
        /// </summary>
        /// <param name="arguments">all command line arguments (required for error display)</param>
        /// <param name="options">parsed options</param>
        /// <returns></returns>
        static (MethodInfo target, string[] arguments) ParseCommandLineTarget(string[] arguments, Options options)
        {
            var targetAndArguments = options.TargetAndArguments;
            var targets            = options.Targets;

            if (targetAndArguments.Length == 0)
            {
                try
                {
                    return(GetDefaultTarget(targets), new string[] { });
                }
                catch (Exception e)
                {
                    throw new ParseException(arguments, -1, e);
                }
            }

            var candidates = HelpText.PublicTargets(targets.GetType());

            var targetName      = targetAndArguments[0];
            var targetArguments = targetAndArguments.Skip(1).ToArray();

            try
            {
                var target = candidates.FindByName(
                    _ => GetOptParser.GetLongOptionNameForMember(_.Name),
                    targetName,
                    "targets"
                    );
                return(target, targetArguments);
            }
            catch (ArgumentOutOfRangeException e)
            {
                throw new ParseException(arguments, Array.IndexOf(arguments, targetName), e);
            }
        }
Esempio n. 5
0
 private static string Syntax(MethodInfo method)
 {
     return(new[] { GetOptParser.GetLongOptionNameForMember(method.Name), }
            .Concat(method.GetParameters().Select(_ => $"<{_.Name}>"))
            .Join(" "));
 }
Esempio n. 6
0
        public ExitCode Run()
        {
            try
            {
                Logger = Log.Logger = new LoggerConfiguration()
                                      .WriteTo.Console(SerilogLogEventLevel(Verbosity.Detailed))
                                      .CreateLogger();

                var builder         = new DefaultProxyBuilder();
                var generator       = new ProxyGenerator(builder);
                var onceInterceptor = new OnceInterceptor();
                var onceProxy       = generator.CreateClassProxy(targetsType, new ProxyGenerationOptions
                {
                    Hook = new OnceHook()
                },
                                                                 onceInterceptor);

                var options = new Options(onceProxy);

                GetOptParser.Parse(commandLineArguments, options);

                if (rebuildCheck)
                {
                    if (IsOutOfDate() && !options.IgnoreClean)
                    {
                        return(RequireRebuild());
                    }
                }

                Logger = Log.Logger = new LoggerConfiguration()
                                      .WriteTo.Console(SerilogLogEventLevel(options.Verbosity),
                                                       outputTemplate: "{Timestamp:o}|{Level:u3}|{Message:lj}{NewLine}{Exception}")
                                      .CreateLogger();

                if (options.Edit)
                {
                    var cmd         = new Tool("cmd").WithArguments("/c", "start");
                    var buildCsProj = sourceDir.Glob("*.csproj").First();
                    cmd.Run(buildCsProj).Wait();
                    return(ExitCode.HelpDisplayed);
                }

                if ((options.Clean && !options.IgnoreClean))
                {
                    return(RequireRebuild());
                }

                if (options.Help)
                {
                    HelpText.Print(Console.Out, options);
                    return(ExitCode.HelpDisplayed);
                }

                var(target, targetArguments) = ParseCommandLineTarget(commandLineArguments, options);

                var amgBuildAssembly = Assembly.GetExecutingAssembly();
                Logger.Information("Amg.Build: {assembly} {build}", amgBuildAssembly.Location, amgBuildAssembly.GetCustomAttribute <AssemblyInformationalVersionAttribute>().InformationalVersion);

                var startup = GetStartupInvocation();
                IEnumerable <InvocationInfo> invocations = new[] { startup };

                try
                {
                    RunTarget(options.Targets, target, targetArguments);
                }
                catch (InvocationFailed)
                {
                    invocations = invocations.Concat(onceInterceptor.Invocations);
                    if (options.Verbosity > Verbosity.Quiet)
                    {
                        Console.WriteLine(Summary.Print(invocations));
                    }
                    Console.Error.WriteLine(Summary.Error(invocations));
                    return(ExitCode.TargetFailed);
                }

                invocations = invocations.Concat(onceInterceptor.Invocations);
                if (options.Verbosity > Verbosity.Quiet)
                {
                    Console.WriteLine(Summary.Print(invocations));
                }
                return(ExitCode.Success);
            }
            catch (ParseException ex)
            {
                Console.Error.WriteLine(ex.Message);
                Console.Error.WriteLine();
                Console.Error.WriteLine("Run with --help to get help.");
                return(ExitCode.CommandLineError);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
                return(ExitCode.UnknownError);
            }
        }
Esempio n. 7
0
 private static void RunTarget(object targets, MethodInfo target, string[] arguments)
 {
     Logger.Information("Run {target}({arguments})", target, arguments);
     var result = Wait(GetOptParser.Invoke(targets, target, arguments));
 }