• Binbin's avatar
    Initialize help when using redis-cli help or redis-cli ? (#10382) · 1797330e
    Binbin authored
    The following usage will output an empty newline:
    ```
    > redis-cli help set
    empty line
    ```
    
    The reason is that in interactive mode, we have called
    `cliInitHelp`, which initializes help.
    
    When using `redis-cli help xxx` or `redis-cli help ? xxx`,
    we can't match the command due to empty `helpEntries`,
    so we output an empty newline.
    
    In this commit, we will call `cliInitHelp` to init the help.
    Note that in this case, we need to call `cliInitHelp` (COMMAND DOCS)
    every time, which i think is acceptable.
    
    So now the output will look like:
    ```
    [redis]# src/redis-cli help get
    
      GET key
      summary: Get the value of a key
      since: 1.0.0
      group: string
    
    [redis]#
    ```
    
    Fixes #10378
    
    This PR also fix a redis-cli crash when using `--ldb --eval`:
    ```
    [root]# src/redis-cli --ldb --eval test.lua test 1
    Lua debugging session started, please use:
    quit    -- End the session.
    restart -- Restart the script in debug mode again.
    help    -- Show Lua script debugging commands.
    
    * Stopped at 1, stop reason = step over
    -> 1   local num = redis.call('GET', KEYS[1]);
    redis-cli: redis-cli.c:718: cliCountCommands: Assertion
    `commandTable->element[i]->type == 1' failed.
    Aborted
    ```
    Because in ldb mode, `COMMAND DOCS` or `COMMAND` will
    return an array, only with one element, and the type
    is `REDIS_REPLY_STATUS`, the result is `<error> Unknown
    Redis Lua debugger command or wrong number of arguments`.
    
    So if we are in the ldb mode, and init the Redis HELP, we
    will get the wrong response and crash the redis-cli.
    In ldb mode we don't initialize HELP, help is only initialized
    after the lua debugging session ends.
    
    It was broken in #10043
    1797330e
redis-cli.c 336 KB