git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Michal Ostrowski <mostrows@watson.ibm.com>
To: git@vger.kernel.org
Subject: [PATCH 1/2] Remember and use GIT_EXEC_PATH on exec()'s
Date: Mon, 09 Jan 2006 18:35:53 -0500	[thread overview]
Message-ID: <1136849754.11717.517.camel@brick.watson.ibm.com> (raw)
In-Reply-To: <1136849678.11717.514.camel@brick.watson.ibm.com>

If git-upload-pack is invoked by ssh, it may have been invoked because
ssh was explicitly told which program to execute on the remote end
(i.e. --exec had been used with git-clone-pack).  In this case, the
git suite may not be in the PATH, and so subsequent exec's by
git-upload-pack (i.e. git-rev-list, git-pack-objects) will fail.

These changes provide for ${bindir} to be stored at compile time in
environment.c. git_setup_exec_path() is implemented; this function
will append GIT_EXEC_PATH or the saved ${bindir} to PATH.

Signed-off-by: Michal Ostrowski <mostrows@watson.ibm.com>

---

 Makefile      |    7 +++++++
 cache.h       |    1 +
 environment.c |   29 +++++++++++++++++++++++++++++
 3 files changed, 37 insertions(+), 0 deletions(-)

b24fde016c2d7382016b80bc0b9a011db3413bb3
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

  reply	other threads:[~2006-01-09 23:34 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-01-09 23:34 [PATCH 0/2] Remember and use GIT_EXEC_PATH on exec()'s Michal Ostrowski
2006-01-09 23:35 ` Michal Ostrowski [this message]
2006-01-10  2:53   ` [PATCH 1/2] " Junio C Hamano
2006-01-09 23:36 ` [PATCH 2/2] " Michal Ostrowski
2006-01-10  2:52   ` Junio C Hamano
2006-01-10 13:36     ` Michal Ostrowski
2006-01-10 15:01       ` Andreas Ericsson
2006-01-10 16:26         ` Michal Ostrowski
2006-01-10 19:13           ` Andreas Ericsson
2006-01-10 20:15             ` Alex Riesen
2006-01-10 20:32               ` Michal Ostrowski
     [not found]             ` <7vu0cb6f1n.fsf@assigned-by-dhcp.cox.net>
2006-01-10 20:29               ` Michal Ostrowski
2006-01-11  0:06                 ` Andreas Ericsson
2006-01-11  0:42                 ` Junio C Hamano
2006-01-11  2:09                   ` Michal Ostrowski
2006-01-11  2:12                   ` [PATCH] Exec git programs without using PATH Michal Ostrowski
2006-01-11  6:13                     ` Junio C Hamano
2006-01-11 17:05                       ` [PATCH] (Updated) " Michal Ostrowski
2006-01-11 20:33                         ` Junio C Hamano
2006-01-11 20:42                           ` Linus Torvalds
2006-01-11 21:26                             ` Michal Ostrowski
2006-01-11 21:32                               ` Junio C Hamano
2006-01-12  0:11                                 ` Andreas Ericsson
2006-01-12  5:38                                   ` H. Peter Anvin
2006-01-10 19:47           ` [PATCH 2/2] Remember and use GIT_EXEC_PATH on exec()'s Junio C Hamano
2006-01-10 19:55             ` Johannes Schindelin
2006-01-10 20:31               ` Michal Ostrowski
2006-01-10 21:03                 ` Johannes Schindelin
2006-01-11  0:10                   ` Andreas Ericsson
2006-01-11  0:57                     ` Junio C Hamano
2006-01-11 11:57                       ` Andreas Ericsson
2006-01-11 17:11                         ` Jon Loeliger
2006-01-10 21:09               ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1136849754.11717.517.camel@brick.watson.ibm.com \
    --to=mostrows@watson.ibm.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).