init: refactor the template directory discovery into its own function
We will need to call this function from `hook.c` to be able to prevent hooks from running that were written as part of a `clone` but did not originate from the template directory. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>seen
parent
48c171d927
commit
df93e407f0
|
@ -11,10 +11,6 @@
|
||||||
#include "parse-options.h"
|
#include "parse-options.h"
|
||||||
#include "worktree.h"
|
#include "worktree.h"
|
||||||
|
|
||||||
#ifndef DEFAULT_GIT_TEMPLATE_DIR
|
|
||||||
#define DEFAULT_GIT_TEMPLATE_DIR "/usr/share/git-core/templates"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef NO_TRUSTABLE_FILEMODE
|
#ifdef NO_TRUSTABLE_FILEMODE
|
||||||
#define TEST_FILEMODE 0
|
#define TEST_FILEMODE 0
|
||||||
#else
|
#else
|
||||||
|
@ -93,8 +89,9 @@ static void copy_templates_1(struct strbuf *path, struct strbuf *template_path,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void copy_templates(const char *template_dir, const char *init_template_dir)
|
static void copy_templates(const char *option_template)
|
||||||
{
|
{
|
||||||
|
const char *template_dir = get_template_dir(option_template);
|
||||||
struct strbuf path = STRBUF_INIT;
|
struct strbuf path = STRBUF_INIT;
|
||||||
struct strbuf template_path = STRBUF_INIT;
|
struct strbuf template_path = STRBUF_INIT;
|
||||||
size_t template_len;
|
size_t template_len;
|
||||||
|
@ -103,16 +100,8 @@ static void copy_templates(const char *template_dir, const char *init_template_d
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
char *to_free = NULL;
|
char *to_free = NULL;
|
||||||
|
|
||||||
if (!template_dir)
|
if (!template_dir || !*template_dir)
|
||||||
template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
|
|
||||||
if (!template_dir)
|
|
||||||
template_dir = init_template_dir;
|
|
||||||
if (!template_dir)
|
|
||||||
template_dir = to_free = system_path(DEFAULT_GIT_TEMPLATE_DIR);
|
|
||||||
if (!template_dir[0]) {
|
|
||||||
free(to_free);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
strbuf_addstr(&template_path, template_dir);
|
strbuf_addstr(&template_path, template_dir);
|
||||||
strbuf_complete(&template_path, '/');
|
strbuf_complete(&template_path, '/');
|
||||||
|
@ -200,7 +189,6 @@ static int create_default_files(const char *template_path,
|
||||||
int reinit;
|
int reinit;
|
||||||
int filemode;
|
int filemode;
|
||||||
struct strbuf err = STRBUF_INIT;
|
struct strbuf err = STRBUF_INIT;
|
||||||
const char *init_template_dir = NULL;
|
|
||||||
const char *work_tree = get_git_work_tree();
|
const char *work_tree = get_git_work_tree();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -212,9 +200,7 @@ static int create_default_files(const char *template_path,
|
||||||
* values (since we've just potentially changed what's available on
|
* values (since we've just potentially changed what's available on
|
||||||
* disk).
|
* disk).
|
||||||
*/
|
*/
|
||||||
git_config_get_pathname("init.templatedir", &init_template_dir);
|
copy_templates(template_path);
|
||||||
copy_templates(template_path, init_template_dir);
|
|
||||||
free((char *)init_template_dir);
|
|
||||||
git_config_clear();
|
git_config_clear();
|
||||||
reset_shared_repository();
|
reset_shared_repository();
|
||||||
git_config(git_default_config, NULL);
|
git_config(git_default_config, NULL);
|
||||||
|
|
1
cache.h
1
cache.h
|
@ -656,6 +656,7 @@ int path_inside_repo(const char *prefix, const char *path);
|
||||||
#define INIT_DB_QUIET 0x0001
|
#define INIT_DB_QUIET 0x0001
|
||||||
#define INIT_DB_EXIST_OK 0x0002
|
#define INIT_DB_EXIST_OK 0x0002
|
||||||
|
|
||||||
|
const char *get_template_dir(const char *option_template);
|
||||||
int init_db(const char *git_dir, const char *real_git_dir,
|
int init_db(const char *git_dir, const char *real_git_dir,
|
||||||
const char *template_dir, int hash_algo,
|
const char *template_dir, int hash_algo,
|
||||||
const char *initial_branch, unsigned int flags);
|
const char *initial_branch, unsigned int flags);
|
||||||
|
|
32
setup.c
32
setup.c
|
@ -6,6 +6,7 @@
|
||||||
#include "chdir-notify.h"
|
#include "chdir-notify.h"
|
||||||
#include "promisor-remote.h"
|
#include "promisor-remote.h"
|
||||||
#include "quote.h"
|
#include "quote.h"
|
||||||
|
#include "exec-cmd.h"
|
||||||
|
|
||||||
static int inside_git_dir = -1;
|
static int inside_git_dir = -1;
|
||||||
static int inside_work_tree = -1;
|
static int inside_work_tree = -1;
|
||||||
|
@ -1720,3 +1721,34 @@ int daemonize(void)
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef DEFAULT_GIT_TEMPLATE_DIR
|
||||||
|
#define DEFAULT_GIT_TEMPLATE_DIR "/usr/share/git-core/templates"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const char *get_template_dir(const char *option_template)
|
||||||
|
{
|
||||||
|
const char *template_dir = option_template;
|
||||||
|
|
||||||
|
if (!template_dir)
|
||||||
|
template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
|
||||||
|
if (!template_dir) {
|
||||||
|
static const char *init_template_dir;
|
||||||
|
static int initialized;
|
||||||
|
|
||||||
|
if (!initialized) {
|
||||||
|
git_config_get_pathname("init.templatedir",
|
||||||
|
&init_template_dir);
|
||||||
|
initialized = 1;
|
||||||
|
}
|
||||||
|
template_dir = init_template_dir;
|
||||||
|
}
|
||||||
|
if (!template_dir) {
|
||||||
|
static char *dir;
|
||||||
|
|
||||||
|
if (!dir)
|
||||||
|
dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);
|
||||||
|
template_dir = dir;
|
||||||
|
}
|
||||||
|
return template_dir;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue