зеркало из https://github.com/microsoft/git.git
Merge branch 'da/git-prefix-everywhere' into next
* da/git-prefix-everywhere: t/t7503-pre-commit-hook.sh: Add GIT_PREFIX tests git-mergetool--lib: Make vimdiff retain the current directory git: Remove handling for GIT_PREFIX setup: Provide GIT_PREFIX to built-ins
This commit is contained in:
Коммит
4ed54610e5
|
@ -86,6 +86,11 @@ get_merge_tool_cmd () {
|
|||
}
|
||||
|
||||
run_merge_tool () {
|
||||
# If GIT_PREFIX is empty then we cannot use it in tools
|
||||
# that expect to be able to chdir() to its value.
|
||||
GIT_PREFIX=${GIT_PREFIX:-.}
|
||||
export GIT_PREFIX
|
||||
|
||||
merge_tool_path="$(get_merge_tool_path "$1")" || exit
|
||||
base_present="$2"
|
||||
status=0
|
||||
|
@ -188,6 +193,7 @@ run_merge_tool () {
|
|||
check_unchanged
|
||||
else
|
||||
"$merge_tool_path" -R -f -d -c "wincmd l" \
|
||||
-c 'cd $GIT_PREFIX' \
|
||||
"$LOCAL" "$REMOTE"
|
||||
fi
|
||||
;;
|
||||
|
@ -199,6 +205,7 @@ run_merge_tool () {
|
|||
check_unchanged
|
||||
else
|
||||
"$merge_tool_path" -R -f -d -c "wincmd l" \
|
||||
-c 'cd $GIT_PREFIX' \
|
||||
"$LOCAL" "$REMOTE"
|
||||
fi
|
||||
;;
|
||||
|
|
10
git.c
10
git.c
|
@ -183,8 +183,6 @@ static int handle_alias(int *argcp, const char ***argv)
|
|||
if (alias_string[0] == '!') {
|
||||
const char **alias_argv;
|
||||
int argc = *argcp, i;
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
const char *env[2];
|
||||
|
||||
commit_pager_choice();
|
||||
|
||||
|
@ -195,13 +193,7 @@ static int handle_alias(int *argcp, const char ***argv)
|
|||
alias_argv[i] = (*argv)[i];
|
||||
alias_argv[argc] = NULL;
|
||||
|
||||
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);
|
||||
ret = run_command_v_opt(alias_argv, RUN_USING_SHELL);
|
||||
if (ret >= 0) /* normal exit */
|
||||
exit(ret);
|
||||
|
||||
|
|
5
setup.c
5
setup.c
|
@ -710,6 +710,11 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
|||
const char *prefix;
|
||||
|
||||
prefix = setup_git_directory_gently_1(nongit_ok);
|
||||
if (prefix)
|
||||
setenv("GIT_PREFIX", prefix, 1);
|
||||
else
|
||||
setenv("GIT_PREFIX", "", 1);
|
||||
|
||||
if (startup_info) {
|
||||
startup_info->have_repository = !nongit_ok || !*nongit_ok;
|
||||
startup_info->prefix = prefix;
|
||||
|
|
|
@ -140,6 +140,22 @@ test_expect_success 'GIT_PREFIX for !alias' '
|
|||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'GIT_PREFIX for built-ins' '
|
||||
# Use GIT_EXTERNAL_DIFF to test that the "diff" built-in
|
||||
# receives the GIT_PREFIX variable.
|
||||
printf "dir/" >expect &&
|
||||
printf "#!/bin/sh\n" >diff &&
|
||||
printf "printf \"\$GIT_PREFIX\"" >>diff &&
|
||||
chmod +x diff &&
|
||||
(
|
||||
cd dir &&
|
||||
printf "change" >two &&
|
||||
env GIT_EXTERNAL_DIFF=./diff git diff >../actual
|
||||
git checkout -- two
|
||||
) &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'no file/rev ambiguity check inside .git' '
|
||||
git commit -a -m 1 &&
|
||||
(
|
||||
|
|
|
@ -84,5 +84,38 @@ test_expect_success POSIXPERM '--no-verify with non-executable hook' '
|
|||
git commit --no-verify -m "more content"
|
||||
|
||||
'
|
||||
chmod +x "$HOOK"
|
||||
|
||||
# a hook that checks $GIT_PREFIX and succeeds inside the
|
||||
# success/ subdirectory only
|
||||
cat > "$HOOK" <<EOF
|
||||
#!/bin/sh
|
||||
test \$GIT_PREFIX = success/
|
||||
EOF
|
||||
|
||||
test_expect_success 'with hook requiring GIT_PREFIX' '
|
||||
|
||||
echo "more content" >> file &&
|
||||
git add file &&
|
||||
mkdir success &&
|
||||
(
|
||||
cd success &&
|
||||
git commit -m "hook requires GIT_PREFIX = success/"
|
||||
) &&
|
||||
rmdir success
|
||||
'
|
||||
|
||||
test_expect_success 'with failing hook requiring GIT_PREFIX' '
|
||||
|
||||
echo "more content" >> file &&
|
||||
git add file &&
|
||||
mkdir fail &&
|
||||
(
|
||||
cd fail &&
|
||||
test_must_fail git commit -m "hook must fail"
|
||||
) &&
|
||||
rmdir fail &&
|
||||
git checkout -- file
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Загрузка…
Ссылка в новой задаче