public void TestDetermineBinaryCallerWithUsrBinEnv() { fileSystemMock.Setup((o) => o.Read("foo")) .Returns(() => "#!/usr/bin/env sh".ToStream()); Assert.AreEqual("sh", InstallerBinary.DetermineBinaryCaller("foo", fileSystemMock.Object)); }
/// <summary> /// Execution script command. /// </summary> protected internal virtual void ExecuteScript(string callable, object sender, BucketEventArgs eventArgs) { var args = string.Join(Str.Space, Arr.Map(eventArgs.GetArguments(), ProcessExecutor.Escape)); var exec = callable + (string.IsNullOrEmpty(args) ? string.Empty : (Str.Space + args)); if (io.IsVerbose) { io.WriteError($"> {eventArgs.Name}: {exec}"); } else { io.WriteError($"> {exec}"); } var possibleLocalBinaries = bucket.GetPackage().GetBinaries() ?? Array.Empty <string>(); foreach (var localBinary in possibleLocalBinaries) { if (!Regex.IsMatch(localBinary, $"\\b{Regex.Escape(callable)}$")) { continue; } var caller = InstallerBinary.DetermineBinaryCaller(localBinary, fileSystem); exec = Regex.Replace(exec, $"^{Regex.Escape(callable)}", $"{caller} {localBinary}"); } var exitCode = process.Execute(exec, out string stdout, out string stderr); if (exitCode != ExitCodes.Normal) { io.WriteError($"<error>Script \"{callable}\" handling the \"{eventArgs.Name}\" event returned with error code: {exitCode}</error>", verbosity: Verbosities.Quiet); throw new ScriptExecutionException($"Error Output: {stderr}", exitCode); } if (io.IsDebug) { io.WriteError(stdout); } }
public void TestDetermineBinaryCaller() { Assert.AreEqual("call", InstallerBinary.DetermineBinaryCaller("foo.exe")); Assert.AreEqual("call", InstallerBinary.DetermineBinaryCaller("foo.bat")); Assert.AreEqual("dotnet", InstallerBinary.DetermineBinaryCaller("foo.bar")); }