git alias: try alias last.
This disables alias "foo" from being used for git-foo, and when we do use alias we check the built-in and then existing command names first and then alias as the fallback. This avoids the problem of common commands used in scripts getting clobbered by user specific aliases. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
2b11e3170e
commit
a025463bc0
14
git.c
14
git.c
@ -202,6 +202,7 @@ int main(int argc, const char **argv, char **envp)
|
|||||||
char *slash = strrchr(cmd, '/');
|
char *slash = strrchr(cmd, '/');
|
||||||
char git_command[PATH_MAX + 1];
|
char git_command[PATH_MAX + 1];
|
||||||
const char *exec_path = NULL;
|
const char *exec_path = NULL;
|
||||||
|
int done_alias = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Take the basename of argv[0] as the command
|
* Take the basename of argv[0] as the command
|
||||||
@ -229,7 +230,6 @@ int main(int argc, const char **argv, char **envp)
|
|||||||
if (!strncmp(cmd, "git-", 4)) {
|
if (!strncmp(cmd, "git-", 4)) {
|
||||||
cmd += 4;
|
cmd += 4;
|
||||||
argv[0] = cmd;
|
argv[0] = cmd;
|
||||||
handle_alias(&argc, &argv);
|
|
||||||
handle_internal_command(argc, argv, envp);
|
handle_internal_command(argc, argv, envp);
|
||||||
die("cannot handle %s internally", cmd);
|
die("cannot handle %s internally", cmd);
|
||||||
}
|
}
|
||||||
@ -287,14 +287,22 @@ int main(int argc, const char **argv, char **envp)
|
|||||||
exec_path = git_exec_path();
|
exec_path = git_exec_path();
|
||||||
prepend_to_path(exec_path, strlen(exec_path));
|
prepend_to_path(exec_path, strlen(exec_path));
|
||||||
|
|
||||||
handle_alias(&argc, &argv);
|
while (1) {
|
||||||
|
|
||||||
/* See if it's an internal command */
|
/* See if it's an internal command */
|
||||||
handle_internal_command(argc, argv, envp);
|
handle_internal_command(argc, argv, envp);
|
||||||
|
|
||||||
/* .. then try the external ones */
|
/* .. then try the external ones */
|
||||||
execv_git_cmd(argv);
|
execv_git_cmd(argv);
|
||||||
|
|
||||||
|
/* It could be an alias -- this works around the insanity
|
||||||
|
* of overriding "git log" with "git show" by having
|
||||||
|
* alias.log = show
|
||||||
|
*/
|
||||||
|
if (done_alias || !handle_alias(&argc, &argv))
|
||||||
|
break;
|
||||||
|
done_alias = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (errno == ENOENT)
|
if (errno == ENOENT)
|
||||||
cmd_usage(0, exec_path, "'%s' is not a git-command", cmd);
|
cmd_usage(0, exec_path, "'%s' is not a git-command", cmd);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user