From 9965e3fe436f4ab01b4a1428cfe8a27e379052fe Mon Sep 17 00:00:00 2001 From: Gleb Kashkin Date: Thu, 7 Jul 2022 13:55:48 +0000 Subject: [PATCH] console: fix -i being overruled by !isatty() The interactive mode has been ignored when stdin was not a tty and is no more. Now results of another command can be handled by tarantool. Before the patch: ``` $ echo 42 | tarantool -i LuajitError: stdin:1: unexpected symbol near '42' fatal error, exiting the event loop ``` After the patch: ``` $ echo 42 | tarantool -i Tarantool 2.5.0-130-ge3cf64a6c type 'help' for interactive help tarantool> 42 --- - 42 ... ``` Closes #5064 NO_DOC=bugfix --- .../gh-5064-ignore-i-flag-without-tty.md | 3 +++ src/lua/init.c | 3 ++- ...console_ignore_i_flag_without_tty_test.lua | 22 +++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/gh-5064-ignore-i-flag-without-tty.md create mode 100644 test/app-luatest/gh_5064_console_ignore_i_flag_without_tty_test.lua diff --git a/changelogs/unreleased/gh-5064-ignore-i-flag-without-tty.md b/changelogs/unreleased/gh-5064-ignore-i-flag-without-tty.md new file mode 100644 index 000000000000..5b9ac622821a --- /dev/null +++ b/changelogs/unreleased/gh-5064-ignore-i-flag-without-tty.md @@ -0,0 +1,3 @@ +## bugfix/console + +* Fixed console ignoring `-i` flag in case stdin is not a tty (gh-5064). diff --git a/src/lua/init.c b/src/lua/init.c index d3a265eb8cd2..ee132ca49384 100644 --- a/src/lua/init.c +++ b/src/lua/init.c @@ -936,7 +936,8 @@ run_script_f(va_list ap) goto luajit_error; if (lua_main(L, argc, argv) != 0) goto error; - } else if (!is_a_tty || (path && strcmp(path, "-") == 0)) { + } else if ((!interactive && !is_a_tty) || + (path && strcmp(path, "-") == 0)) { /* Execute stdin */ if (luaL_loadfile(L, NULL) != 0) goto luajit_error; diff --git a/test/app-luatest/gh_5064_console_ignore_i_flag_without_tty_test.lua b/test/app-luatest/gh_5064_console_ignore_i_flag_without_tty_test.lua new file mode 100644 index 000000000000..c578d2869931 --- /dev/null +++ b/test/app-luatest/gh_5064_console_ignore_i_flag_without_tty_test.lua @@ -0,0 +1,22 @@ +local t = require('luatest') +local g = t.group() + +local result_str = [[tarantool> 42 +--- +- 42 +... + +tarantool> ]] + +local TARANTOOL_PATH = arg[-1] + +g.test_console_ignores_i_flag_without_tty = function() + local cmd = [[printf '42\n' | ]] .. TARANTOOL_PATH .. [[ -i 2>/dev/null]] + local fh = io.popen(cmd, 'r') + + -- Readline on CentOS 7 produces \e[?1034h escape sequence before tarantool> prompt, remove it. + local result = fh:read('*a'):gsub('\x1b%[%?1034h', '') + + fh:close() + t.assert_equals(result, result_str) +end