From 6e3aad06f93ec0928ac12b4f539fcf9c053d6a3b Mon Sep 17 00:00:00 2001 From: Ahmed ElSayed Date: Wed, 24 May 2017 14:14:18 -0700 Subject: [PATCH] Add a --no-interactive switch to func run command. Closes #93 --- .../Actions/LocalActions/RunFunctionAction.cs | 14 ++++++++++++-- src/Azure.Functions.Cli/FunctionsLocalServer.cs | 14 +++++++------- .../Interfaces/IFunctionsLocalServer.cs | 2 +- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Azure.Functions.Cli/Actions/LocalActions/RunFunctionAction.cs b/src/Azure.Functions.Cli/Actions/LocalActions/RunFunctionAction.cs index ea79c8b9ee..aa80cd98c5 100644 --- a/src/Azure.Functions.Cli/Actions/LocalActions/RunFunctionAction.cs +++ b/src/Azure.Functions.Cli/Actions/LocalActions/RunFunctionAction.cs @@ -31,6 +31,7 @@ class RunFunctionAction : BaseAction public string Content { get; set; } public string FileName { get; set; } public bool Debug { get; set; } + public bool NoInteractive { get; set; } public RunFunctionAction(IFunctionsLocalServer scriptServer) { @@ -56,6 +57,11 @@ public override ICommandLineParserResult ParseArgs(string[] args) .WithDescription("Attach a debugger to the host process before running the function") .Callback(d => Debug = d); + Parser + .Setup("no-interactive") + .WithDescription("Don't prompt or expect any stdin.") + .Callback(f => NoInteractive = f); + if (args.Any()) { FunctionName = args @@ -76,7 +82,7 @@ public override ICommandLineParserResult ParseArgs(string[] args) public override async Task RunAsync() { - using (var client = await _scriptServer.ConnectAsync(Timeout)) + using (var client = await _scriptServer.ConnectAsync(Timeout, NoInteractive)) { var hostStatusResponse = await client.GetAsync("admin/host/status"); var functionStatusResponse = await client.GetAsync($"admin/functions/{FunctionName}/status"); @@ -152,10 +158,14 @@ public override async Task RunAsync() .WriteLine(ErrorColor("Unable to configure node debugger. Check your launch.json.")); return; } + else if (!NoInteractive) + { + ColoredConsole.WriteLine("launch.json configured."); + } else { ColoredConsole - .Write("launch.json configured. Setup your break points, launch debugger (F5), and press any key to continue..."); + .Write("launch.json configured. Setup your break points, launch debugger (F5), and press any key to continue..."); Console.ReadKey(); } } diff --git a/src/Azure.Functions.Cli/FunctionsLocalServer.cs b/src/Azure.Functions.Cli/FunctionsLocalServer.cs index e505c2a583..9820ddefa9 100644 --- a/src/Azure.Functions.Cli/FunctionsLocalServer.cs +++ b/src/Azure.Functions.Cli/FunctionsLocalServer.cs @@ -31,9 +31,9 @@ public FunctionsLocalServer(IProcessManager processManager, ISettings settings, _secretsManager = secretesManager; } - public async Task ConnectAsync(TimeSpan timeout) + public async Task ConnectAsync(TimeSpan timeout, bool noInteractive) { - var server = await DiscoverServer(); + var server = await DiscoverServer(noInteractive); var startTime = DateTime.UtcNow; while (!await server.IsServerRunningAsync() && startTime.Add(timeout) > DateTime.UtcNow) @@ -43,7 +43,7 @@ public async Task ConnectAsync(TimeSpan timeout) return new HttpClient() { BaseAddress = server, Timeout = timeout }; } - private async Task DiscoverServer() + private async Task DiscoverServer(bool noInteractive) { var hostSettings = _secretsManager.GetHostStartSettings(); if (hostSettings.LocalHttpPort != default(int)) @@ -55,17 +55,17 @@ private async Task DiscoverServer() } } - return await RecursiveDiscoverServer(0); + return await RecursiveDiscoverServer(0, noInteractive); } - private async Task RecursiveDiscoverServer(int iteration = 0) + private async Task RecursiveDiscoverServer(int iteration, bool noInteractive) { var server = new Uri($"http://localhost:{Port + iteration}"); if (!await server.IsServerRunningAsync()) { // create the server - if (_settings.DisplayLaunchingRunServerWarning) + if (_settings.DisplayLaunchingRunServerWarning && !noInteractive) { ColoredConsole .WriteLine() @@ -107,7 +107,7 @@ private async Task RecursiveDiscoverServer(int iteration = 0) } else { - return await RecursiveDiscoverServer(iteration + 1); + return await RecursiveDiscoverServer(iteration + 1, noInteractive); } } } diff --git a/src/Azure.Functions.Cli/Interfaces/IFunctionsLocalServer.cs b/src/Azure.Functions.Cli/Interfaces/IFunctionsLocalServer.cs index 4a72ee6515..b4e5062f40 100644 --- a/src/Azure.Functions.Cli/Interfaces/IFunctionsLocalServer.cs +++ b/src/Azure.Functions.Cli/Interfaces/IFunctionsLocalServer.cs @@ -6,6 +6,6 @@ namespace Azure.Functions.Cli.Interfaces { internal interface IFunctionsLocalServer { - Task ConnectAsync(TimeSpan timeout); + Task ConnectAsync(TimeSpan timeout, bool noInteractive); } } \ No newline at end of file