If git is ran with a relative path, try building an absolute exec_path from it
PATCH 1/1 If git is ran with a relative path, try building an absolute exec_path from it
--- git.c | 35 +++++++++++++++++++++++++++++++++-- 1 files changed, 33 insertions(+), 2 deletions(-)
git.c +33 -2
@@ -28,6 +28,35 @@ static void prepend_to_path(const char *dir, int len)free (path); } +static char *rel_to_abs_exec_path (const char *cmd) { +int len, rc; +char *exec_path =xmalloc (PATH_MAX +1 ); + +if (!getcwd (exec_path,PATH_MAX )) { +fprintf (stderr,"git: cannot determine current directory: %s\n" , +strerror (errno)); +free (exec_path); +return NULL ; + } + len =strlen (exec_path); + +/* Trivial cleanup */ +while (!prefixcmp (cmd,"./" )) { + cmd +=2 ; +while (*cmd =='/' ) + cmd++; + } + + rc =snprintf (exec_path + len,PATH_MAX - len,"/%s" , cmd); +if (rc <0 || rc >=PATH_MAX - len) { +fprintf (stderr,"git: command name given is too long.\n" ); +free (exec_path); +return NULL ; + } + +return exec_path; +} +static int handle_options (const char *** argv,int * argc,int * envchanged) {int handled =0 ;
@@ -409,13 +438,15 @@ int main(int argc, const char **argv)/* * Take the basename of argv[0] as the command * name, and the dirname as the default exec_path -* if it's an absolute path and we don't have -* anything better. +* if we don't have anything better. */ if (slash) { *slash++ =0 ;if (*cmd =='/' ) exec_path = cmd; +else + exec_path =rel_to_abs_exec_path (cmd); + cmd = slash; }
Signature · 1 line
1.5.3.GIT
PATCH 1/1 Deduce exec_path also from calls to git with a relative path
There is already logic in the git wrapper to deduce the exec_path from argv[0], when the git wrapper was called with an absolute path. Extend that logic to handle relative paths as well.
For example, when you call "../../hello/world/git", it will not turn "../../hello/world" into an absolute path, and use that.
Initial implementation by Scott R Parish.
---
On Fri, 19 Oct 2007, Scott R Parish wrote:
> Signed-off-by: Scott R Parish <[email protected]>
That is a little short for a commit message ;-)
> git.c | 35 +++++++++++++++++++++++++++++++++--
> 1 files changed, 33 insertions(+), 2 deletions(-)
I had commented on this before. Probably I did a very bad job at explaining things, so hopefully this is better:
git.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
git.c +3 -2
@@ -414,13 +414,14 @@ int main(int argc, const char **argv)/* * Take the basename of argv[0] as the command * name, and the dirname as the default exec_path -* if it's an absolute path and we don't have -* anything better. +* if we don't have anything better. */ if (slash) { *slash++ =0 ;if (*cmd =='/' ) exec_path = cmd; +else + exec_path =xstrdup (make_absolute_path (cmd)); cmd = slash; }
Signature · 1 line
1.5.3.4.1287.g8b31e
Re: [PATCH] Deduce exec_path also from calls to git with a relative path
Quoted 2 lines · Johannes Schindelin
For example, when you call "../../hello/world/git", it will not turn "../../hello/world" into an absolute path, and use that.
Did you mean "it will turn..."?
David
Re: [PATCH] Deduce exec_path also from calls to git with a relative path
Hi,
Quoted 6 lines · David Brown
Quoted 2 lines · Johannes Schindelin
For example, when you call "../../hello/world/git", it will not turn "../../hello/world" into an absolute path, and use that.
Did you mean "it will turn..."?
Yes, I meant that. I was in a hurry, since a car was waiting outside the door, taking me to the highlands.
Ciao,
Dscho