示例#1
0
        private static void ParseOption(string arg, CakeHostOptions options)
        {
            if (!IsOption(arg))
            {
                throw new FrostingException($"Encountered invalid option '{arg}'");
            }

            string name, value;

            var nameIndex      = arg.StartsWith("--") ? 2 : 1;
            var separatorIndex = arg.IndexOfAny(new[] { '=' });

            if (separatorIndex < 0)
            {
                name  = arg.Substring(nameIndex);
                value = string.Empty;
            }
            else
            {
                name  = arg.Substring(nameIndex, separatorIndex - nameIndex);
                value = arg.Substring(separatorIndex + 1);
            }

            ParseOption(name, value.UnQuote(), options);
        }
示例#2
0
        private static void ParseOption(string name, string value, CakeHostOptions options)
        {
            if (name.Equals("working", StringComparison.OrdinalIgnoreCase) ||
                name.Equals("w", StringComparison.OrdinalIgnoreCase))
            {
                options.WorkingDirectory = new DirectoryPath(value);
            }

            if (name.Equals("verbosity", StringComparison.OrdinalIgnoreCase) ||
                name.Equals("v", StringComparison.OrdinalIgnoreCase))
            {
                Verbosity verbosity;
                if (!VerbosityParser.TryParse(value, out verbosity))
                {
                    throw new CakeException($"The value '{value}' is not a valid verbosity.");
                }
                options.Verbosity = verbosity;
            }

            if (name.Equals("target", StringComparison.OrdinalIgnoreCase) ||
                name.Equals("t", StringComparison.OrdinalIgnoreCase))
            {
                options.Target = value;
            }

            if (name.Equals("help", StringComparison.OrdinalIgnoreCase) ||
                name.Equals("h", StringComparison.OrdinalIgnoreCase))
            {
                if (ParseBooleanValue(value))
                {
                    options.Command = CakeHostCommand.Help;
                }
            }

            if (name.Equals("dryrun", StringComparison.OrdinalIgnoreCase) ||
                name.Equals("d", StringComparison.OrdinalIgnoreCase))
            {
                if (ParseBooleanValue(value))
                {
                    options.Command = CakeHostCommand.DryRun;
                }
            }

            if (name.Equals("version", StringComparison.OrdinalIgnoreCase))
            {
                if (ParseBooleanValue(value))
                {
                    options.Command = CakeHostCommand.Version;
                }
            }

            if (options.Arguments.ContainsKey(name))
            {
                throw new CakeException($"More than one argument called '{name}' was encountered.");
            }

            options.Arguments.Add(name, value);
        }
示例#3
0
 public CakeHostBuilderFixture()
 {
     Builder     = new CakeHostBuilder();
     Environment = FakeEnvironment.CreateUnixEnvironment();
     FileSystem  = new FakeFileSystem(Environment);
     Log         = Substitute.For <ICakeLog>();
     Engine      = new CakeEngine(Log);
     Options     = new CakeHostOptions();
 }
示例#4
0
        public override bool Execute(ICakeEngine engine, CakeHostOptions options)
        {
            var report = engine.RunTarget(_context, _strategy, options.Target);

            if (report != null && !report.IsEmpty)
            {
                _printer.Write(report);
            }

            return(true);
        }
示例#5
0
            public void Should_Set_Verbosity_To_Default_Value()
            {
                // Given
                var options = new CakeHostOptions();

                // When
                var result = options.Verbosity;

                // Then
                Assert.Equal(Verbosity.Normal, result);
            }
示例#6
0
            public void Should_Set_Target_To_Default_Value()
            {
                // Given
                var options = new CakeHostOptions();

                // When
                var result = options.Target;

                // Then
                Assert.Equal("Default", result);
            }
示例#7
0
            public void Should_Set_Command_To_Default_Value()
            {
                // Given
                var options = new CakeHostOptions();

                // When
                var result = options.Command;

                // Then
                Assert.Equal(CakeHostCommand.Run, result);
            }
示例#8
0
            public void Should_Set_Arguments_To_Empty_Dictionary()
            {
                // Given
                var options = new CakeHostOptions();

                // When
                var result = options.Arguments;

                // Then
                Assert.NotNull(result);
            }
示例#9
0
            public void Should_Set_Working_Directory_To_Default_Value()
            {
                // Given
                var options = new CakeHostOptions();

                // When
                var result = options.WorkingDirectory;

                // Then
                Assert.Null(result);
            }
示例#10
0
        public override bool Execute(ICakeEngine engine, CakeHostOptions options)
        {
            _executionSettings.SetTarget(options.Target);
            var report = engine.RunTargetAsync(_context, _strategy, _executionSettings).GetAwaiter().GetResult();

            if (report != null && !report.IsEmpty)
            {
                _printer.Write(report);
            }

            return(true);
        }
示例#11
0
        public override async Task <bool> ExecuteAsync(ICakeEngine engine, CakeHostOptions options)
        {
            _executionSettings.SetTarget(options.Target);
            var report = await engine.RunTargetAsync(_context, _strategy, _executionSettings).ConfigureAwait(false);

            if (report != null && !report.IsEmpty)
            {
                _printer.Write(report);
            }

            return(true);
        }
示例#12
0
 public Configuration(
     CakeConfigurationProvider provider,
     CakeHostOptions options,
     ICakeEnvironment environment,
     IEnumerable <ConfigurationValue> values)
 {
     _provider      = provider;
     _options       = options;
     _environment   = environment;
     _values        = values;
     _lock          = new object();
     _configuration = null;
 }
        public CakeHostBuilderFixture()
        {
            Builder     = new CakeHostBuilder();
            Environment = FakeEnvironment.CreateUnixEnvironment();

            FileSystem = new FakeFileSystem(Environment);
            FileSystem.CreateDirectory("/Working");

            Log       = Substitute.For <ICakeLog>();
            Data      = Substitute.For <ICakeDataService>();
            Engine    = new CakeEngine(Data, Log);
            Installer = Substitute.For <IToolInstaller>();
            Options   = new CakeHostOptions();
        }
示例#14
0
        public override bool Execute(ICakeEngine engine, CakeHostOptions options)
        {
            _log.Information("Performing dry run...");
            _log.Information("Target is: {0}", options.Target);
            _log.Information(string.Empty);

            var strategy = new DryRunExecutionStrategy(_log);

            engine.RunTarget(_context, strategy, options.Target);

            _log.Information(string.Empty);
            _log.Information("This was a dry run.");
            _log.Information("No tasks were actually executed.");

            return(true);
        }
示例#15
0
        public static CakeHostOptions Parse(IEnumerable<string> args)
        {
            if (args == null)
            {
                throw new ArgumentNullException(nameof(args));
            }

            var options = new CakeHostOptions();

            foreach (var argument in args)
            {
                ParseOption(argument.UnQuote(), options);
            }

            return options;
        }
示例#16
0
        public override async Task <bool> ExecuteAsync(ICakeEngine engine, CakeHostOptions options)
        {
            _executionSettings.SetTarget(options.Target);

            _log.Information("Performing dry run...");
            _log.Information("Target is: {0}", options.Target);
            _log.Information(string.Empty);

            var strategy = new DryRunExecutionStrategy(_log);
            await engine.RunTargetAsync(_context, strategy, _executionSettings).ConfigureAwait(false);

            _log.Information(string.Empty);
            _log.Information("This was a dry run.");
            _log.Information("No tasks were actually executed.");

            return(true);
        }
示例#17
0
        public Command GetCommand(CakeHostOptions options)
        {
            switch (options.Command)
            {
            case CakeHostCommand.Help:
                return(_scope.Resolve <HelpCommand>());

            case CakeHostCommand.DryRun:
                return(_scope.Resolve <DryRunCommand>());

            case CakeHostCommand.Version:
                return(_scope.Resolve <VersionCommand>());

            case CakeHostCommand.Run:
                return(_scope.Resolve <RunCommand>());

            default:
                return(new ErrorDecoratorCommand(_scope.Resolve <HelpCommand>()));
            }
        }
示例#18
0
        public static CakeHostOptions Parse(IEnumerable <string> args)
        {
            if (args == null)
            {
                throw new ArgumentNullException(nameof(args));
            }

            var options = new CakeHostOptions
            {
                WorkingDirectory = ".",
                Target           = "Default",
                Verbosity        = Verbosity.Normal
            };

            foreach (var argument in args)
            {
                ParseOption(argument.UnQuote(), options);
            }

            return(options);
        }
示例#19
0
        public override bool Execute(ICakeEngine engine, CakeHostOptions options)
        {
            _console.Write("Cake.Frosting (");
            _console.ForegroundColor = ConsoleColor.Yellow;
            _console.Write(typeof(HelpCommand).GetTypeInfo().Assembly.GetName().Version.ToString(3));
            _console.ResetColor();
            _console.WriteLine(")");

            _console.WriteLine("Usage:");
            _console.WriteLine("  dotnet {0}.dll [options]", typeof(HelpCommand).GetTypeInfo().Assembly.GetName().Name);
            _console.WriteLine();
            _console.WriteLine("Options:");
            _console.WriteLine("  --target|-t <TARGET>          Sets the build target");
            _console.WriteLine("  --working|-w <DIR>            Sets the working directory");
            _console.WriteLine("  --verbosity|-v <VERBOSITY>    Sets the verbosity");
            _console.WriteLine("  --dryrun|-r                   Performs a dry run");
            _console.WriteLine("  --version                     Displays Cake.Frosting version number");
            _console.WriteLine("  --help|-h                     Show help");
            _console.WriteLine();

            return(true);
        }
示例#20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RawArguments" /> class.
 /// </summary>
 /// <param name="options">The options.</param>
 public RawArguments(CakeHostOptions options)
 {
     _arguments = new Dictionary <string, string>(
         (options ?? new CakeHostOptions()).Arguments ?? new Dictionary <string, string>(),
         StringComparer.OrdinalIgnoreCase);
 }
示例#21
0
 public override bool Execute(ICakeEngine engine, CakeHostOptions options)
 {
     _console.Write(typeof(HelpCommand).GetTypeInfo().Assembly.GetName().Version.ToString(3));
     return(true);
 }
示例#22
0
 public override Task <bool> ExecuteAsync(ICakeEngine engine, CakeHostOptions options)
 {
     _console.Write(typeof(HelpCommand).GetTypeInfo().Assembly.GetName().Version.ToString(3));
     return(Task.FromResult(true));
 }
示例#23
0
 public abstract Task <bool> ExecuteAsync(ICakeEngine engine, CakeHostOptions options);
示例#24
0
 public override bool Execute(ICakeEngine engine, CakeHostOptions options)
 {
     _command.Execute(engine, options);
     return(false);
 }
示例#25
0
        public override async Task <bool> ExecuteAsync(ICakeEngine engine, CakeHostOptions options)
        {
            await _command.ExecuteAsync(engine, options).ConfigureAwait(false);

            return(false);
        }
示例#26
0
 public abstract bool Execute(ICakeEngine engine, CakeHostOptions options);