X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=builtin-init-db.c;h=186548938193ac125d9d9f89080cec640d0a46e0;hb=936db184f0b51c07aba5e6a8f79352045f887632;hp=01f366ad0bf5860aaf9123ef5d5653c612871a9f;hpb=e035ce939d7e26afee4936ed32f1db9428ac026e;p=git.git diff --git a/builtin-init-db.c b/builtin-init-db.c index 01f366ad0..186548938 100644 --- a/builtin-init-db.c +++ b/builtin-init-db.c @@ -10,6 +10,12 @@ #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) { @@ -50,7 +56,7 @@ static void copy_templates_1(char *path, int baselen, /* 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. @@ -175,6 +181,7 @@ static int create_default_files(const char *git_dir, const char *template_path) struct stat st1; char repo_version_string[10]; int reinit; + int filemode; if (len > sizeof(path)-50) die("insane git directory %s", git_dir); @@ -236,23 +243,29 @@ static int create_default_files(const char *git_dir, const char *template_path) strcpy(path + len, "config"); /* Check filemode trustability */ - if (!lstat(path, &st1)) { + filemode = TEST_FILEMODE; + if (TEST_FILEMODE && !lstat(path, &st1)) { 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); - 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)) - git_config_set("core.logallrefupdates", "true"); + if (is_bare_repository()) { + git_config_set("core.bare", "true"); + } + else { + git_config_set("core.bare", "false"); + /* allow template config file to override the default */ + if (log_all_ref_updates == -1) + git_config_set("core.logallrefupdates", "true"); + } return reinit; } static const char init_db_usage[] = -"git-init-db [--template=] [--shared]"; +"git-init [--template=] [--shared]"; /* * If you want to, you can share the DB area with any number of branches.