Signed-off-by: Felipe Contreras <felipe.contre...@gmail.com>
---
 run-command.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/run-command.c b/run-command.c
index 75abc47..8e188f6 100644
--- a/run-command.c
+++ b/run-command.c
@@ -765,12 +765,29 @@ int run_hook_ve(const char *const *env, const char *name, 
va_list args)
        struct child_process hook;
        struct argv_array argv = ARGV_ARRAY_INIT;
        const char *p;
-       int ret;
+       const char **mod_env = NULL;
+       int ret, i = 0;
+       struct strbuf buf = STRBUF_INIT;
 
        p = find_hook(name);
        if (!p)
                return 0;
 
+       if (!getenv(GIT_DIR_ENVIRONMENT)) {
+               if (env)
+                       for (i = 0; env[i]; i++);
+
+               mod_env = xcalloc(i + 2, sizeof(*mod_env));
+
+               if (env)
+                       for (i = 0; env[i]; i++)
+                               mod_env[i] = env[i];
+
+               strbuf_addf(&buf, "GIT_DIR=%s", get_git_dir());
+               mod_env[i++] = buf.buf;
+               mod_env[i++] = NULL;
+       }
+
        argv_array_push(&argv, p);
 
        while ((p = va_arg(args, const char *)))
@@ -778,12 +795,15 @@ int run_hook_ve(const char *const *env, const char *name, 
va_list args)
 
        memset(&hook, 0, sizeof(hook));
        hook.argv = argv.argv;
-       hook.env = env;
+       hook.env = mod_env ? mod_env : env;
        hook.no_stdin = 1;
        hook.stdout_to_stderr = 1;
 
        ret = run_command(&hook);
        argv_array_clear(&argv);
+       strbuf_release(&buf);
+       free(mod_env);
+
        return ret;
 }
 
-- 
1.9.2+fc1.1.g5c924db

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to