Skip to content

Commit

Permalink
Record the command invocation path early
Browse files Browse the repository at this point in the history
We will need the command invocation path in system_path(). This path was
passed to setup_path(), but  system_path() can be called earlier, for
example via:

    main
      commit_pager_choice
        setup_pager
          git_config
            git_etc_gitconfig
              system_path

Therefore, we introduce git_set_argv0_path() and call it as soon as
possible.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Johannes Sixt authored and gitster committed Jul 26, 2008
1 parent 46beb55 commit e1464ca
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 10 deletions.
10 changes: 8 additions & 2 deletions exec_cmd.c
Expand Up @@ -5,6 +5,7 @@

extern char **environ;
static const char *argv_exec_path;
static const char *argv0_path;

static const char *builtin_exec_path(void)
{
Expand Down Expand Up @@ -50,6 +51,11 @@ const char *system_path(const char *path)
return path;
}

void git_set_argv0_path(const char *path)
{
argv0_path = path;
}

void git_set_argv_exec_path(const char *exec_path)
{
argv_exec_path = exec_path;
Expand Down Expand Up @@ -84,7 +90,7 @@ static void add_path(struct strbuf *out, const char *path)
}
}

void setup_path(const char *cmd_path)
void setup_path(void)
{
const char *old_path = getenv("PATH");
struct strbuf new_path;
Expand All @@ -94,7 +100,7 @@ void setup_path(const char *cmd_path)
add_path(&new_path, argv_exec_path);
add_path(&new_path, getenv(EXEC_PATH_ENVIRONMENT));
add_path(&new_path, builtin_exec_path());
add_path(&new_path, cmd_path);
add_path(&new_path, argv0_path);

if (old_path)
strbuf_addstr(&new_path, old_path);
Expand Down
3 changes: 2 additions & 1 deletion exec_cmd.h
Expand Up @@ -2,8 +2,9 @@
#define GIT_EXEC_CMD_H

extern void git_set_argv_exec_path(const char *exec_path);
extern void git_set_argv0_path(const char *path);
extern const char* git_exec_path(void);
extern void setup_path(const char *);
extern void setup_path(void);
extern int execv_git_cmd(const char **argv); /* NULL terminated */
extern int execl_git_cmd(const char *cmd, ...);
extern const char *system_path(const char *path);
Expand Down
5 changes: 2 additions & 3 deletions git.c
Expand Up @@ -418,7 +418,6 @@ int main(int argc, const char **argv)
{
const char *cmd = argv[0] && *argv[0] ? argv[0] : "git-help";
char *slash = (char *)cmd + strlen(cmd);
const char *cmd_path = NULL;
int done_alias = 0;

/*
Expand All @@ -431,7 +430,7 @@ int main(int argc, const char **argv)
while (cmd <= slash && !is_dir_sep(*slash));
if (cmd <= slash) {
*slash++ = 0;
cmd_path = cmd;
git_set_argv0_path(cmd);
cmd = slash;
}

Expand Down Expand Up @@ -475,7 +474,7 @@ int main(int argc, const char **argv)
* environment, and the $(gitexecdir) from the Makefile at build
* time.
*/
setup_path(cmd_path);
setup_path();

while (1) {
/* See if it's an internal command */
Expand Down
2 changes: 1 addition & 1 deletion receive-pack.c
Expand Up @@ -482,7 +482,7 @@ int main(int argc, char **argv)
if (!dir)
usage(receive_pack_usage);

setup_path(NULL);
setup_path();

if (!enter_repo(dir, 0))
die("'%s': unable to chdir or not a git archive", dir);
Expand Down
4 changes: 2 additions & 2 deletions shell.c
Expand Up @@ -15,7 +15,7 @@ static int do_generic_cmd(const char *me, char *arg)
{
const char *my_argv[4];

setup_path(NULL);
setup_path();
if (!arg || !(arg = sq_dequote(arg)))
die("bad argument");
if (prefixcmp(me, "git-"))
Expand All @@ -37,7 +37,7 @@ static int do_cvs_cmd(const char *me, char *arg)
if (!arg || strcmp(arg, "server"))
die("git-cvsserver only handles server: %s", arg);

setup_path(NULL);
setup_path();
return execv_git_cmd(cvsserver_argv);
}

Expand Down
2 changes: 1 addition & 1 deletion upload-pack.c
Expand Up @@ -638,7 +638,7 @@ int main(int argc, char **argv)
if (i != argc-1)
usage(upload_pack_usage);

setup_path(NULL);
setup_path();

dir = argv[i];

Expand Down

0 comments on commit e1464ca

Please sign in to comment.