mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
completion: add and use --list-cmds=alias
By providing aliases via --list-cmds=, we could simplify command collection code in the script. We only issue one git command. Before this patch that is "git config", after it's "git --list-cmds=". In "git help" completion case we actually reduce one "git" process (for getting guides) but that call was added in this series so it does not really count. A couple of bash functions are removed because they are not needed anymore. __git_compute_all_commands() and $__git_all_commands stay because they are still needed for completing pager.* config and without "alias" group, the result is still cacheable. There is a slight (good) change in _git_help() with this patch: before "git help <tab>" shows external commands (as in _not_ part of git) as well as part of $__git_all_commands. We have finer control over command listing now and can exclude that because we can't provide a man page for external commands anyway. 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
e11dca10cf
commit
3301d36b29
21
alias.c
21
alias.c
@@ -1,10 +1,12 @@
|
||||
#include "cache.h"
|
||||
#include "alias.h"
|
||||
#include "config.h"
|
||||
#include "string-list.h"
|
||||
|
||||
struct config_alias_data {
|
||||
const char *alias;
|
||||
char *v;
|
||||
struct string_list *list;
|
||||
};
|
||||
|
||||
static int config_alias_cb(const char *key, const char *value, void *d)
|
||||
@@ -12,8 +14,16 @@ static int config_alias_cb(const char *key, const char *value, void *d)
|
||||
struct config_alias_data *data = d;
|
||||
const char *p;
|
||||
|
||||
if (skip_prefix(key, "alias.", &p) && !strcasecmp(p, data->alias))
|
||||
return git_config_string((const char **)&data->v, key, value);
|
||||
if (!skip_prefix(key, "alias.", &p))
|
||||
return 0;
|
||||
|
||||
if (data->alias) {
|
||||
if (!strcasecmp(p, data->alias))
|
||||
return git_config_string((const char **)&data->v,
|
||||
key, value);
|
||||
} else if (data->list) {
|
||||
string_list_append(data->list, p);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -27,6 +37,13 @@ char *alias_lookup(const char *alias)
|
||||
return data.v;
|
||||
}
|
||||
|
||||
void list_aliases(struct string_list *list)
|
||||
{
|
||||
struct config_alias_data data = { NULL, NULL, list };
|
||||
|
||||
read_early_config(config_alias_cb, &data);
|
||||
}
|
||||
|
||||
#define SPLIT_CMDLINE_BAD_ENDING 1
|
||||
#define SPLIT_CMDLINE_UNCLOSED_QUOTE 2
|
||||
static const char *split_cmdline_errors[] = {
|
||||
|
||||
Reference in New Issue
Block a user