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>
extern char **environ;
static const char *argv_exec_path;
extern char **environ;
static const char *argv_exec_path;
+static const char *argv0_path;
static const char *builtin_exec_path(void)
{
static const char *builtin_exec_path(void)
{
+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;
void git_set_argv_exec_path(const char *exec_path)
{
argv_exec_path = exec_path;
-void setup_path(const char *cmd_path)
{
const char *old_path = getenv("PATH");
struct strbuf new_path;
{
const char *old_path = getenv("PATH");
struct strbuf new_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, 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);
if (old_path)
strbuf_addstr(&new_path, old_path);
#define GIT_EXEC_CMD_H
extern void git_set_argv_exec_path(const char *exec_path);
#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 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);
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);
{
const char *cmd = argv[0] && *argv[0] ? argv[0] : "git-help";
char *slash = (char *)cmd + strlen(cmd);
{
const char *cmd = argv[0] && *argv[0] ? argv[0] : "git-help";
char *slash = (char *)cmd + strlen(cmd);
- const char *cmd_path = NULL;
while (cmd <= slash && !is_dir_sep(*slash));
if (cmd <= slash) {
*slash++ = 0;
while (cmd <= slash && !is_dir_sep(*slash));
if (cmd <= slash) {
*slash++ = 0;
+ git_set_argv0_path(cmd);
* environment, and the $(gitexecdir) from the Makefile at build
* time.
*/
* environment, and the $(gitexecdir) from the Makefile at build
* time.
*/
while (1) {
/* See if it's an internal command */
while (1) {
/* See if it's an internal command */
if (!dir)
usage(receive_pack_usage);
if (!dir)
usage(receive_pack_usage);
if (!enter_repo(dir, 0))
die("'%s': unable to chdir or not a git archive", dir);
if (!enter_repo(dir, 0))
die("'%s': unable to chdir or not a git archive", dir);
{
const char *my_argv[4];
{
const char *my_argv[4];
if (!arg || !(arg = sq_dequote(arg)))
die("bad argument");
if (prefixcmp(me, "git-"))
if (!arg || !(arg = sq_dequote(arg)))
die("bad argument");
if (prefixcmp(me, "git-"))
if (!arg || strcmp(arg, "server"))
die("git-cvsserver only handles server: %s", arg);
if (!arg || strcmp(arg, "server"))
die("git-cvsserver only handles server: %s", arg);
return execv_git_cmd(cvsserver_argv);
}
return execv_git_cmd(cvsserver_argv);
}
if (i != argc-1)
usage(upload_pack_usage);
if (i != argc-1)
usage(upload_pack_usage);