diff --git a/builtin-init-db.c b/builtin-init-db.c
index 1d7d15e8d53a7a2817ceff6f5c5e056747688c9e..8e7540b6922696fb8100879eb9c4acf587f004db 100644 (file)
--- a/builtin-init-db.c
+++ b/builtin-init-db.c
#define DEFAULT_GIT_TEMPLATE_DIR "/usr/share/git-core/templates/"
#endif
#define DEFAULT_GIT_TEMPLATE_DIR "/usr/share/git-core/templates/"
#endif
+#ifdef NO_TRUSTABLE_FILEMODE
+#define TEST_FILEMODE 0
+#else
+#define TEST_FILEMODE 1
+#endif
+
static void safe_create_dir(const char *dir, int share)
{
if (mkdir(dir, 0777) < 0) {
static void safe_create_dir(const char *dir, int share)
{
if (mkdir(dir, 0777) < 0) {
/* Note: if ".git/hooks" file exists in the repository being
* re-initialized, /etc/core-git/templates/hooks/update would
/* Note: if ".git/hooks" file exists in the repository being
* re-initialized, /etc/core-git/templates/hooks/update would
- * cause git-init-db to fail here. I think this is sane but
+ * cause git-init to fail here. I think this is sane but
* it means that the set of templates we ship by default, along
* with the way the namespace under .git/ is organized, should
* be really carefully chosen.
* it means that the set of templates we ship by default, along
* with the way the namespace under .git/ is organized, should
* be really carefully chosen.
@@ -124,8 +130,11 @@ static void copy_templates(const char *git_dir, int len, const char *template_di
int template_len;
DIR *dir;
int template_len;
DIR *dir;
- if (!template_dir)
- template_dir = DEFAULT_GIT_TEMPLATE_DIR;
+ if (!template_dir) {
+ template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
+ if (!template_dir)
+ template_dir = DEFAULT_GIT_TEMPLATE_DIR;
+ }
strcpy(template_path, template_dir);
template_len = strlen(template_path);
if (template_path[template_len-1] != '/') {
strcpy(template_path, template_dir);
template_len = strlen(template_path);
if (template_path[template_len-1] != '/') {
struct stat st1;
char repo_version_string[10];
int reinit;
struct stat st1;
char repo_version_string[10];
int reinit;
+ int filemode;
if (len > sizeof(path)-50)
die("insane git directory %s", git_dir);
if (len > sizeof(path)-50)
die("insane git directory %s", git_dir);
@@ -233,23 +243,27 @@ static int create_default_files(const char *git_dir, const char *template_path)
strcpy(path + len, "config");
/* Check filemode trustability */
strcpy(path + len, "config");
/* Check filemode trustability */
- if (!lstat(path, &st1)) {
+ filemode = TEST_FILEMODE;
+ if (TEST_FILEMODE && !lstat(path, &st1)) {
struct stat st2;
struct stat st2;
- int filemode = (!chmod(path, st1.st_mode ^ S_IXUSR) &&
+ filemode = (!chmod(path, st1.st_mode ^ S_IXUSR) &&
!lstat(path, &st2) &&
st1.st_mode != st2.st_mode);
!lstat(path, &st2) &&
st1.st_mode != st2.st_mode);
- git_config_set("core.filemode",
- filemode ? "true" : "false");
}
}
+ git_config_set("core.filemode", filemode ? "true" : "false");
- /* Enable logAllRefUpdates if a working tree is attached */
- if (!is_bare_git_dir(git_dir))
+ if (is_bare_repository()) {
+ git_config_set("core.bare", "true");
+ }
+ else {
+ git_config_set("core.bare", "false");
git_config_set("core.logallrefupdates", "true");
git_config_set("core.logallrefupdates", "true");
+ }
return reinit;
}
static const char init_db_usage[] =
return reinit;
}
static const char init_db_usage[] =
-"git-init-db [--template=<template-directory>] [--shared]";
+"git-init [--template=<template-directory>] [--shared]";
/*
* If you want to, you can share the DB area with any number of branches.
/*
* If you want to, you can share the DB area with any number of branches.