Skip to content

Commit

Permalink
console: fix -i being overruled by !isatty()
Browse files Browse the repository at this point in the history
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 tarantool#5064

NO_DOC=bugfix
  • Loading branch information
Lord-KA committed Jul 20, 2022
1 parent b4af7ec commit 2b51b80
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
3 changes: 3 additions & 0 deletions 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).
3 changes: 2 additions & 1 deletion src/lua/init.c
Expand Up @@ -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;
Expand Down
@@ -0,0 +1,20 @@
local t = require('luatest')
local g = t.group()

local result_str = [[tarantool> 42
---
- 42
...
tarantool> ]]

g.test_console_ignores_i_flag_without_tty = function()
local cmd = [[printf '42\n' | tarantool -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

0 comments on commit 2b51b80

Please sign in to comment.