Allow a relative builtin template directory.
In order to make git relocatable (i.e. not have the prefix compiled-in) the template directory must depend on the location where this git instance is found, which is GIT_EXEC_DIR. The exec path is prepended only if the compiled-in default template directory is to be used and that is relative. Any relative directories that are specified via environment variable or the --exec-dir switch are taken as is. Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4723ee992c
commit
a47d181380
@ -5,6 +5,7 @@
|
||||
*/
|
||||
#include "cache.h"
|
||||
#include "builtin.h"
|
||||
#include "exec_cmd.h"
|
||||
|
||||
#ifndef DEFAULT_GIT_TEMPLATE_DIR
|
||||
#define DEFAULT_GIT_TEMPLATE_DIR "/usr/share/git-core/templates"
|
||||
@ -131,10 +132,19 @@ static void copy_templates(const char *git_dir, int len, const char *template_di
|
||||
int template_len;
|
||||
DIR *dir;
|
||||
|
||||
if (!template_dir) {
|
||||
if (!template_dir)
|
||||
template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
|
||||
if (!template_dir)
|
||||
template_dir = DEFAULT_GIT_TEMPLATE_DIR;
|
||||
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)) {
|
||||
const char *exec_path = git_exec_path();
|
||||
template_dir = prefix_path(exec_path, strlen(exec_path),
|
||||
template_dir);
|
||||
}
|
||||
}
|
||||
strcpy(template_path, template_dir);
|
||||
template_len = strlen(template_path);
|
||||
|
Loading…
Reference in New Issue
Block a user