diff --git a/Makefile b/Makefile
index c9c15b5..ffd2a68 100644
--- a/Makefile
+++ b/Makefile
@@ -437,6 +437,13 @@ init-db.o: init-db.c
$(CC) -c $(ALL_CFLAGS) \
-DDEFAULT_GIT_TEMPLATE_DIR=$(call shellquote,"$(template_dir)") $*.c
+# Recompile environment.o if GIT_EXEC_PATH changes
+.environment.GIT_EXEC_PATH:
+ @(test -e $@ && grep -h -e '^$(bindir)$$' $@) || echo $(bindir) > $@
+environment.o: .environment.GIT_EXEC_PATH
+environment.o: CFLAGS+= -DGIT_EXEC_PATH=\"$(bindir)\"
+
+
$(LIB_OBJS): $(LIB_H)
$(patsubst git-%$X,%.o,$(PROGRAMS)): $(LIB_H)
$(DIFF_OBJS): diffcore.h
diff --git a/cache.h b/cache.h
index 29c9e81..d73071e 100644
--- a/cache.h
+++ b/cache.h
@@ -244,6 +244,7 @@ unsigned long approxidate(const char *);
extern int setup_ident(void);
extern const char *git_author_info(void);
extern const char *git_committer_info(void);
+extern void git_setup_exec_path(void);
struct checkout {
const char *base_dir;diff --git a/environment.c b/environment.c
index 0596fc6..4dc0249 100644
--- a/environment.c
+++ b/environment.c
@@ -9,6 +9,10 @@
*/
#include "cache.h"
+#ifndef GIT_EXEC_PATH
+#define GIT_EXEC_PATH NULL
+#endif
+
char git_default_email[MAX_GITNAME];
char git_default_name[MAX_GITNAME];
int trust_executable_bit = 1;
@@ -16,6 +20,7 @@ int only_use_symrefs = 0;
int repository_format_version = 0;
char git_commit_encoding[MAX_ENCODING_LENGTH] = "utf-8";
int shared_repository = 0;
+char *git_exec_path = GIT_EXEC_PATH;
static char *git_dir, *git_object_dir, *git_index_file, *git_refs_dir,
*git_graft_file;
@@ -76,4 +81,28 @@ char *get_graft_file(void)
return git_graft_file;
}
+void git_setup_exec_path(void)
+{
+ char *path, *old_path = getenv("PATH");
+ int path_len, len, old_len;
+ char *exec_path = getenv("GIT_EXEC_PATH");
+
+ if (!exec_path)
+ exec_path = git_exec_path;
+
+ len = strlen(exec_path);
+
+ if (!old_path)
+ old_path = "/usr/local/bin:/usr/bin:/bin";
+ old_len = strlen(old_path);
+ path_len = len + old_len + 1;
+
+ path = malloc(path_len + 1);
+
+ memcpy(path, old_path, old_len);
+ path[old_len] = ':';
+ memcpy(path + old_len + 1, exec_path, len);
+
+ setenv("PATH", path, 1);
+}--
0.99.9m-g02ad