Changes since v1:
- make sure we save/restore env for external commands in 2/3
- fix t0001 test in 3/3
Interdiff:
diff --git b/git.c a/git.c
index 83b6c56..da278c3 100644
--- b/git.c
+++ a/git.c
@@ -229,7 +229,6 @@ static int handle_options(const char ***argv, int *argc,
int *envchanged)
static int handle_alias(int *argcp, const char ***argv)
{
int envchanged = 0, ret = 0, saved_errno = errno;
- const char *subdir;
int count, option_count;
const char **new_argv;
const char *alias_command;
@@ -237,7 +236,7 @@ static int handle_alias(int *argcp, const char ***argv)
int unused_nongit;
save_env_before_alias();
- subdir = setup_git_directory_gently(&unused_nongit);
+ setup_git_directory_gently(&unused_nongit);
alias_command = (*argv)[0];
alias_string = alias_lookup(alias_command);
@@ -296,8 +295,7 @@ static int handle_alias(int *argcp, const char ***argv)
ret = 1;
}
- if (subdir && chdir(subdir))
- die_errno("Cannot change to '%s'", subdir);
+ restore_env(0);
errno = saved_errno;
@@ -534,9 +532,13 @@ static void handle_builtin(int argc, const char **argv)
builtin = get_builtin(cmd);
if (builtin) {
- if (saved_env_before_alias)
- restore_env(0);
- else
+ /*
+ * XXX: if we can figure out cases where it is _safe_
+ * to do, we can avoid spawning a new process when
+ * saved_env_before_alias is true
+ * (i.e. setup_git_dir* has been run once)
+ */
+ if (!saved_env_before_alias)
exit(run_builtin(builtin, argc, argv));
}
}
diff --git b/t/t0001-init.sh a/t/t0001-init.sh
index 19539fc..295aa59 100755
--- b/t/t0001-init.sh
+++ a/t/t0001-init.sh
@@ -88,24 +88,14 @@ test_expect_success 'plain nested in bare through aliased
command' '
'
test_expect_success 'No extra GIT_* on alias scripts' '
- cat <<-\EOF >expected &&
- GIT_ATTR_NOSYSTEM
- GIT_AUTHOR_EMAIL
- GIT_AUTHOR_NAME
- GIT_COMMITTER_EMAIL
- GIT_COMMITTER_NAME
- GIT_CONFIG_NOSYSTEM
- GIT_EXEC_PATH
- GIT_MERGE_AUTOEDIT
- GIT_MERGE_VERBOSITY
- GIT_PREFIX
- GIT_TEMPLATE_DIR
- GIT_TEXTDOMAINDIR
- GIT_TRACE_BARE
- EOF
+ (
+ env | sed -ne "/^GIT_/s/=.*//p" &&
+ echo GIT_PREFIX && # setup.c
+ echo GIT_TEXTDOMAINDIR # wrapper-for-bin.sh
+ ) | sort | uniq >expected &&
cat <<-\EOF >script &&
#!/bin/sh
- env | grep GIT_ | sed "s/=.*//" | sort >actual
+ env | sed -ne "/^GIT_/s/=.*//p" | sort >actual
exit 0
EOF
chmod 755 script &&
Nguyễn Thái Ngọc Duy (3):
git.c: make it clear save_env() is for alias handling only
setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE when ..
git.c: make sure we do not leak GIT_* to alias scripts
environment.c | 2 --
git.c | 41 +++++++++++++++++++++++------------------
t/t0001-init.sh | 17 +++++++++++++++++
t/t5601-clone.sh | 23 +++++++++++++++++++++++
4 files changed, 63 insertions(+), 20 deletions(-)
--
2.3.0.rc1.137.g477eb31
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html