mirror of
https://github.com/git/git
synced 2024-10-02 14:45:21 +00:00
git.c: allow alias expansion without a git directory
With this, the configuration mechanism can be used to say: [alias] init = init-db --template=/path/to/template Signed-off-by: Matthias Lederhofer <matled@gmx.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
41e95f6990
commit
0347a8c764
72
git.c
72
git.c
|
@ -156,52 +156,48 @@ static int handle_alias(int *argcp, const char ***argv)
|
||||||
{
|
{
|
||||||
int nongit = 0, ret = 0, saved_errno = errno;
|
int nongit = 0, ret = 0, saved_errno = errno;
|
||||||
const char *subdir;
|
const char *subdir;
|
||||||
|
int count, option_count;
|
||||||
|
const char** new_argv;
|
||||||
|
|
||||||
subdir = setup_git_directory_gently(&nongit);
|
subdir = setup_git_directory_gently(&nongit);
|
||||||
if (!nongit) {
|
|
||||||
int count, option_count;
|
|
||||||
const char** new_argv;
|
|
||||||
|
|
||||||
alias_command = (*argv)[0];
|
alias_command = (*argv)[0];
|
||||||
git_config(git_alias_config);
|
git_config(git_alias_config);
|
||||||
if (alias_string) {
|
if (alias_string) {
|
||||||
|
count = split_cmdline(alias_string, &new_argv);
|
||||||
|
option_count = handle_options(&new_argv, &count);
|
||||||
|
memmove(new_argv - option_count, new_argv,
|
||||||
|
count * sizeof(char *));
|
||||||
|
new_argv -= option_count;
|
||||||
|
|
||||||
count = split_cmdline(alias_string, &new_argv);
|
if (count < 1)
|
||||||
option_count = handle_options(&new_argv, &count);
|
die("empty alias for %s", alias_command);
|
||||||
memmove(new_argv - option_count, new_argv,
|
|
||||||
count * sizeof(char *));
|
|
||||||
new_argv -= option_count;
|
|
||||||
|
|
||||||
if (count < 1)
|
if (!strcmp(alias_command, new_argv[0]))
|
||||||
die("empty alias for %s", alias_command);
|
die("recursive alias: %s", alias_command);
|
||||||
|
|
||||||
if (!strcmp(alias_command, new_argv[0]))
|
if (getenv("GIT_TRACE")) {
|
||||||
die("recursive alias: %s", alias_command);
|
int i;
|
||||||
|
fprintf(stderr, "trace: alias expansion: %s =>",
|
||||||
if (getenv("GIT_TRACE")) {
|
alias_command);
|
||||||
int i;
|
for (i = 0; i < count; ++i) {
|
||||||
fprintf(stderr, "trace: alias expansion: %s =>",
|
fputc(' ', stderr);
|
||||||
alias_command);
|
sq_quote_print(stderr, new_argv[i]);
|
||||||
for (i = 0; i < count; ++i) {
|
|
||||||
fputc(' ', stderr);
|
|
||||||
sq_quote_print(stderr, new_argv[i]);
|
|
||||||
}
|
|
||||||
fputc('\n', stderr);
|
|
||||||
fflush(stderr);
|
|
||||||
}
|
}
|
||||||
|
fputc('\n', stderr);
|
||||||
new_argv = realloc(new_argv, sizeof(char*) *
|
fflush(stderr);
|
||||||
(count + *argcp + 1));
|
|
||||||
/* insert after command name */
|
|
||||||
memcpy(new_argv + count, *argv + 1,
|
|
||||||
sizeof(char*) * *argcp);
|
|
||||||
new_argv[count+*argcp] = NULL;
|
|
||||||
|
|
||||||
*argv = new_argv;
|
|
||||||
*argcp += count - 1;
|
|
||||||
|
|
||||||
ret = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new_argv = realloc(new_argv, sizeof(char*) *
|
||||||
|
(count + *argcp + 1));
|
||||||
|
/* insert after command name */
|
||||||
|
memcpy(new_argv + count, *argv + 1, sizeof(char*) * *argcp);
|
||||||
|
new_argv[count+*argcp] = NULL;
|
||||||
|
|
||||||
|
*argv = new_argv;
|
||||||
|
*argcp += count - 1;
|
||||||
|
|
||||||
|
ret = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subdir)
|
if (subdir)
|
||||||
|
|
Loading…
Reference in a new issue