From 6ac1aabf1c78c7c852fb25f4684ad1f6cfcd47b4 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Sun, 30 Jun 2019 13:32:53 +0200 Subject: [PATCH] [xaprepare] Use NuGet binary we download (#3308) `NuGetRunner` doesn't properly specify full path to the nuget binary we download as part of the prepare run and, thus, it depends on any random version of the utility in the user's `$PATH` (if at all) which may lead to random errors depending on the nuget version. Fix the issue by passing the full path to the downloaded binary. Additionally, fix `ToolRunner` to properly add arguments when managed runtime (`mono`) is used on Unix. Until now any initial arguments were passed to **mono** in such cases, instead of to the managed executable. Doh. --- .../xaprepare/Application/ProcessRunner.cs | 16 ++++++++++++++++ .../xaprepare/ToolRunners/NuGetRunner.cs | 2 +- .../xaprepare/ToolRunners/ToolRunner.cs | 3 ++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/build-tools/xaprepare/xaprepare/Application/ProcessRunner.cs b/build-tools/xaprepare/xaprepare/Application/ProcessRunner.cs index 21971a61c7c..f1bd2571e42 100644 --- a/build-tools/xaprepare/xaprepare/Application/ProcessRunner.cs +++ b/build-tools/xaprepare/xaprepare/Application/ProcessRunner.cs @@ -87,6 +87,22 @@ public ProcessRunner (string command, bool ignoreEmptyArguments, params string[] throw new ArgumentException ("must not be null or empty", nameof (command)); this.command = command; + AddArgumentsInternal (ignoreEmptyArguments, arguments); + } + + public ProcessRunner AddArguments (params string[] arguments) + { + return AddArguments (true, arguments); + } + + public ProcessRunner AddArguments (bool ignoreEmptyArguments, params string[] arguments) + { + AddArgumentsInternal (ignoreEmptyArguments, arguments); + return this; + } + + void AddArgumentsInternal (bool ignoreEmptyArguments, params string[] arguments) + { if (arguments == null) return; diff --git a/build-tools/xaprepare/xaprepare/ToolRunners/NuGetRunner.cs b/build-tools/xaprepare/xaprepare/ToolRunners/NuGetRunner.cs index c5794397a90..bd2982ccfd4 100644 --- a/build-tools/xaprepare/xaprepare/ToolRunners/NuGetRunner.cs +++ b/build-tools/xaprepare/xaprepare/ToolRunners/NuGetRunner.cs @@ -10,7 +10,7 @@ partial class NuGetRunner : ToolRunner protected override string ToolName => "NuGet"; public NuGetRunner (Context context, Log log = null, string nugetPath = null) - : base (context, log, nugetPath) + : base (context, log, nugetPath ?? Configurables.Paths.LocalNugetPath) {} public async Task Restore (string solutionFilePath) diff --git a/build-tools/xaprepare/xaprepare/ToolRunners/ToolRunner.cs b/build-tools/xaprepare/xaprepare/ToolRunners/ToolRunner.cs index 3c84cf465df..78e46c9bfc9 100644 --- a/build-tools/xaprepare/xaprepare/ToolRunners/ToolRunner.cs +++ b/build-tools/xaprepare/xaprepare/ToolRunners/ToolRunner.cs @@ -87,7 +87,7 @@ protected virtual ProcessRunner CreateProcessRunner (params string[] initialPara if (managedRunner != null) managedRunner = Context.OS.Which (managedRunner); - var runner = new ProcessRunner (managedRunner ?? FullToolPath, initialParams) { + var runner = new ProcessRunner (managedRunner ?? FullToolPath) { ProcessTimeout = ProcessTimeout, EchoCmdAndArguments = EchoCmdAndArguments, EchoStandardError = EchoStandardError, @@ -103,6 +103,7 @@ protected virtual ProcessRunner CreateProcessRunner (params string[] initialPara if (managedRunner != null) runner.AddQuotedArgument (FullToolPath); + runner.AddArguments (initialParams); return runner; }