parse-options: don't emit "ambiguous option" for aliases
Change the option parsing machinery so that e.g. "clone --recurs ..." doesn't error out because "clone" understands both "--recursive" and "--recurse-submodules" to mean the same thing. Initially "clone" just understood --recursive until the --recurses-submodules alias was added inccdd3da652
("clone: Add the --recurse-submodules option as alias for --recursive", 2010-11-04). Sincebb62e0a99f
("clone: teach --recurse-submodules to optionally take a pathspec", 2017-03-17) the longer form has been promoted to the default. But due to the way the options parsing machinery works this resulted in the rather absurd situation of: $ git clone --recurs [...] error: ambiguous option: recurs (could be --recursive or --recurse-submodules) Add OPT_ALIAS() to express this link between two or more options and use it in git-clone. Multiple aliases of an option could be written as OPT_ALIAS(0, "alias1", "original-name"), OPT_ALIAS(0, "alias2", "original-name"), ... The current implementation is not exactly optimal in this case. But we can optimize it when it becomes a problem. So far we don't even have two aliases of any option. A big chunk of code is actually from Junio C Hamano. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
83232e3864
commit
5c387428f1
@ -149,6 +149,9 @@ int cmd__parse_options(int argc, const char **argv)
|
||||
OPT_CALLBACK(0, "expect", &expect, "string",
|
||||
"expected output in the variable dump",
|
||||
collect_expect),
|
||||
OPT_GROUP("Alias"),
|
||||
OPT_STRING('A', "alias-source", &string, "string", "get a string"),
|
||||
OPT_ALIAS('Z', "alias-target", "alias-source"),
|
||||
OPT_END(),
|
||||
};
|
||||
int i;
|
||||
|
Reference in New Issue
Block a user