]> xenbits.xensource.com Git - libvirt.git/commitdiff
vsh: Don't put VSH_OT_ALIAS onto list of completions
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 2 Feb 2021 13:55:28 +0000 (14:55 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 10 Feb 2021 10:51:59 +0000 (11:51 +0100)
We've invented VSH_OT_ALIAS type for --option so that we can
rewrite some --options (e.g. fix spelling). For instance
blkdeviotune command uses this feature heavily:
--options-with-dash are preferred over old
--options_with_underscore. Both versions are supported but only
the new ones (not aliased) are documented and reported in --help.

Except for options completer, which happily put also aliased
versions in front of user's eyes.

Note, there is a second (gross) way we use aliases: to rewrite
options from --oldoption to --newoption=value (for instance
--shareable option of attach-disk is an alias of
--mode=shareable). And just like with the previous group - don't
generate them into the list of possible options.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
tools/vsh.c

index 289ed82dbed04372c1ed25a318d827e4a3e4e203..3771ad50e9625f72f472a6f15c3b389f73dafffd 100644 (file)
@@ -2614,7 +2614,6 @@ vshReadlineOptionsGenerator(const char *text,
 {
     size_t list_index = 0;
     size_t len = strlen(text);
-    const char *name;
     size_t ret_size = 0;
     char **ret = NULL;
 
@@ -2624,12 +2623,15 @@ vshReadlineOptionsGenerator(const char *text,
     if (!cmd->opts)
         return NULL;
 
-    while ((name = cmd->opts[list_index].name)) {
+    for (list_index = 0; cmd->opts[list_index].name; list_index++) {
+        const char *name = cmd->opts[list_index].name;
         bool exists = false;
         vshCmdOpt *opt =  last->opts;
         size_t name_len;
 
-        list_index++;
+        /* Skip aliases, we do not report them in help output either. */
+        if (cmd->opts[list_index].type == VSH_OT_ALIAS)
+            continue;
 
         if (len > 2) {
             /* provide auto-complete only when the text starts with -- */