Merge branch 'mg/alias-expose-prefix'
* mg/alias-expose-prefix: handle_alias: provide GIT_PREFIX to !alias t1020: test !alias in subdirectory
This commit is contained in:
commit
76f4f74a44
@ -587,6 +587,8 @@ it will be treated as a shell command. For example, defining
|
|||||||
"gitk --all --not ORIG_HEAD". Note that shell commands will be
|
"gitk --all --not ORIG_HEAD". Note that shell commands will be
|
||||||
executed from the top-level directory of a repository, which may
|
executed from the top-level directory of a repository, which may
|
||||||
not necessarily be the current directory.
|
not necessarily be the current directory.
|
||||||
|
'GIT_PREFIX' is set as returned by running 'git rev-parse --show-prefix'
|
||||||
|
from the original current directory. See linkgit:git-rev-parse[1].
|
||||||
|
|
||||||
am.keepcr::
|
am.keepcr::
|
||||||
If true, git-am will call git-mailsplit for patches in mbox format
|
If true, git-am will call git-mailsplit for patches in mbox format
|
||||||
|
10
git.c
10
git.c
@ -179,6 +179,8 @@ static int handle_alias(int *argcp, const char ***argv)
|
|||||||
if (alias_string[0] == '!') {
|
if (alias_string[0] == '!') {
|
||||||
const char **alias_argv;
|
const char **alias_argv;
|
||||||
int argc = *argcp, i;
|
int argc = *argcp, i;
|
||||||
|
struct strbuf sb = STRBUF_INIT;
|
||||||
|
const char *env[2];
|
||||||
|
|
||||||
commit_pager_choice();
|
commit_pager_choice();
|
||||||
|
|
||||||
@ -189,7 +191,13 @@ static int handle_alias(int *argcp, const char ***argv)
|
|||||||
alias_argv[i] = (*argv)[i];
|
alias_argv[i] = (*argv)[i];
|
||||||
alias_argv[argc] = NULL;
|
alias_argv[argc] = NULL;
|
||||||
|
|
||||||
ret = run_command_v_opt(alias_argv, RUN_USING_SHELL);
|
strbuf_addstr(&sb, "GIT_PREFIX=");
|
||||||
|
if (subdir)
|
||||||
|
strbuf_addstr(&sb, subdir);
|
||||||
|
env[0] = sb.buf;
|
||||||
|
env[1] = NULL;
|
||||||
|
ret = run_command_v_opt_cd_env(alias_argv, RUN_USING_SHELL, NULL, env);
|
||||||
|
strbuf_release(&sb);
|
||||||
if (ret >= 0) /* normal exit */
|
if (ret >= 0) /* normal exit */
|
||||||
exit(ret);
|
exit(ret);
|
||||||
|
|
||||||
|
@ -118,6 +118,27 @@ test_expect_success 'alias expansion' '
|
|||||||
git ss
|
git ss
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '!alias expansion' '
|
||||||
|
pwd >expect &&
|
||||||
|
(
|
||||||
|
git config alias.test !pwd &&
|
||||||
|
cd dir &&
|
||||||
|
git test >../actual
|
||||||
|
) &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'GIT_PREFIX for !alias' '
|
||||||
|
printf "dir/" >expect &&
|
||||||
|
(
|
||||||
|
git config alias.test "!sh -c \"printf \$GIT_PREFIX\"" &&
|
||||||
|
cd dir &&
|
||||||
|
git test >../actual
|
||||||
|
) &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'no file/rev ambiguity check inside .git' '
|
test_expect_success 'no file/rev ambiguity check inside .git' '
|
||||||
git commit -a -m 1 &&
|
git commit -a -m 1 &&
|
||||||
(
|
(
|
||||||
|
Loading…
Reference in New Issue
Block a user