From 9965e3fe436f4ab01b4a1428cfe8a27e379052fe Mon Sep 17 00:00:00 2001
From: Gleb Kashkin <g.kashkin@tarantool.org>
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 0000000000..5b9ac62282
--- /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 d3a265eb8c..ee132ca493 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 0000000000..c578d28699
--- /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
-- 
GitLab