Skip to content

Commit

Permalink
Move code interpreting path relative to exec-dir to new function syst…
Browse files Browse the repository at this point in the history
…em_path()

Expanding system paths relative to git_exec_path can be used for
creating an installation that can be moved to a different directory
without re-compiling.  We use this approach for template_dir and the
system wide gitconfig.  The Windows installer (msysgit) is an example
for such a setup.

This commit moves common code to a new function system_path().  System
paths that are to be interpreted relative to git_exec_path are passed to
system_path() and the return value is used instead of the original path.
system_path() prefixes a relative path with git_exec_path and leaves
absolute paths unmodified.  For example, we now write

    template_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);

[j6t: moved from path.c to exec_cmd.c]

Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
sprohaska authored and gitster committed Jul 13, 2008
1 parent a9a3e82 commit 2de9de5
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 22 deletions.
14 changes: 2 additions & 12 deletions builtin-init-db.c
Expand Up @@ -115,18 +115,8 @@ static void copy_templates(const char *template_dir)

if (!template_dir)
template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
if (!template_dir) {
/*
* if the hard-coded template is relative, it is
* interpreted relative to the exec_dir
*/
template_dir = DEFAULT_GIT_TEMPLATE_DIR;
if (!is_absolute_path(template_dir)) {
struct strbuf d = STRBUF_INIT;
strbuf_addf(&d, "%s/%s", git_exec_path(), template_dir);
template_dir = strbuf_detach(&d, NULL);
}
}
if (!template_dir)
template_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);
strcpy(template_path, template_dir);
template_len = strlen(template_path);
if (template_path[template_len-1] != '/') {
Expand Down
11 changes: 2 additions & 9 deletions config.c
Expand Up @@ -581,15 +581,8 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data)
const char *git_etc_gitconfig(void)
{
static const char *system_wide;
if (!system_wide) {
system_wide = ETC_GITCONFIG;
if (!is_absolute_path(system_wide)) {
/* interpret path relative to exec-dir */
struct strbuf d = STRBUF_INIT;
strbuf_addf(&d, "%s/%s", git_exec_path(), system_wide);
system_wide = strbuf_detach(&d, NULL);
}
}
if (!system_wide)
system_wide = system_path(ETC_GITCONFIG);
return system_wide;
}

Expand Down
10 changes: 10 additions & 0 deletions exec_cmd.c
Expand Up @@ -40,6 +40,16 @@ static const char *builtin_exec_path(void)
#endif
}

const char *system_path(const char *path)
{
if (!is_absolute_path(path)) {
struct strbuf d = STRBUF_INIT;
strbuf_addf(&d, "%s/%s", git_exec_path(), path);
path = strbuf_detach(&d, NULL);
}
return path;
}

void git_set_argv_exec_path(const char *exec_path)
{
argv_exec_path = exec_path;
Expand Down
2 changes: 1 addition & 1 deletion exec_cmd.h
Expand Up @@ -6,6 +6,6 @@ extern const char* git_exec_path(void);
extern void setup_path(const char *);
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);

#endif /* GIT_EXEC_CMD_H */

0 comments on commit 2de9de5

Please sign in to comment.