Introduce is_bare_repository() and core.bare configuration variable
authorJunio C Hamano <junkio@cox.net>
Sun, 7 Jan 2007 10:00:28 +0000 (02:00 -0800)
committerJunio C Hamano <junkio@cox.net>
Mon, 8 Jan 2007 05:36:35 +0000 (21:36 -0800)
This removes the old is_bare_git_dir(const char *) to ask if a
directory, if it is a GIT_DIR, is a bare repository, and
replaces it with is_bare_repository(void *). The function looks
at core.bare configuration variable if exists but uses the old
heuristics: if it is ".git" or ends with "/.git", then it does
not look like a bare repository, otherwise it does.

Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-init-db.c
cache.h
config.c
environment.c
refs.c
index bbef820e478dd91cfe63431adf3cecc30e437416..22729f01ad5370974718995325de1d86df016a41 100644 (file)
@@ -252,9 +252,13 @@ static int create_default_files(const char *git_dir, const char *template_path)
        }
        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;
 }
 
        return reinit;
 }
 
diff --git a/cache.h b/cache.h
index 36be64e3868456b11bc9a6024be5e955074241b2..cff25690f1861fd947b036e17cbefea783a7fbfc 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -127,7 +127,8 @@ extern int cache_errno;
 #define CONFIG_LOCAL_ENVIRONMENT "GIT_CONFIG_LOCAL"
 #define EXEC_PATH_ENVIRONMENT "GIT_EXEC_PATH"
 
 #define CONFIG_LOCAL_ENVIRONMENT "GIT_CONFIG_LOCAL"
 #define EXEC_PATH_ENVIRONMENT "GIT_EXEC_PATH"
 
-extern int is_bare_git_dir(const char *dir);
+extern int is_bare_repository_cfg;
+extern int is_bare_repository(void);
 extern const char *get_git_dir(void);
 extern char *get_object_directory(void);
 extern char *get_refs_directory(void);
 extern const char *get_git_dir(void);
 extern char *get_object_directory(void);
 extern char *get_refs_directory(void);
index 5cbd130be2664258b488d8b4ca914550e10906a0..20e6ecc361325447f5784aba421f7f1588be184c 100644 (file)
--- a/config.c
+++ b/config.c
@@ -269,6 +269,11 @@ int git_default_config(const char *var, const char *value)
                return 0;
        }
 
                return 0;
        }
 
+       if (!strcmp(var, "core.bare")) {
+               is_bare_repository_cfg = git_config_bool(var, value);
+               return 0;
+       }
+
        if (!strcmp(var, "core.ignorestat")) {
                assume_unchanged = git_config_bool(var, value);
                return 0;
        if (!strcmp(var, "core.ignorestat")) {
                assume_unchanged = git_config_bool(var, value);
                return 0;
index 64245e77a95d5adb4f9c4967380c7825776b4ba7..54c22f8248cc04647829c8a7558f2bb24515f30f 100644 (file)
@@ -15,6 +15,7 @@ int use_legacy_headers = 1;
 int trust_executable_bit = 1;
 int assume_unchanged;
 int prefer_symlink_refs;
 int trust_executable_bit = 1;
 int assume_unchanged;
 int prefer_symlink_refs;
+int is_bare_repository_cfg = -1; /* unspecified */
 int log_all_ref_updates = -1; /* unspecified */
 int warn_ambiguous_refs = 1;
 int repository_format_version;
 int log_all_ref_updates = -1; /* unspecified */
 int warn_ambiguous_refs = 1;
 int repository_format_version;
@@ -53,9 +54,13 @@ static void setup_git_env(void)
                git_graft_file = xstrdup(git_path("info/grafts"));
 }
 
                git_graft_file = xstrdup(git_path("info/grafts"));
 }
 
-int is_bare_git_dir(const char *dir)
+int is_bare_repository(void)
 {
 {
-       const char *s;
+       const char *dir, *s;
+       if (0 <= is_bare_repository_cfg)
+               return is_bare_repository_cfg;
+
+       dir = get_git_dir();
        if (!strcmp(dir, DEFAULT_GIT_DIR_ENVIRONMENT))
                return 0;
        s = strrchr(dir, '/');
        if (!strcmp(dir, DEFAULT_GIT_DIR_ENVIRONMENT))
                return 0;
        s = strrchr(dir, '/');
diff --git a/refs.c b/refs.c
index b5eee11bd54d269602c246ef4ba6120d499d55a3..499086ba6145fd988ba980ce35d47ff06d0bf69e 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -924,7 +924,7 @@ static int log_ref_write(struct ref_lock *lock,
        const char *committer;
 
        if (log_all_ref_updates < 0)
        const char *committer;
 
        if (log_all_ref_updates < 0)
-               log_all_ref_updates = !is_bare_git_dir(get_git_dir());
+               log_all_ref_updates = !is_bare_repository();
 
        if (log_all_ref_updates &&
            (!strncmp(lock->ref_name, "refs/heads/", 11) ||
 
        if (log_all_ref_updates &&
            (!strncmp(lock->ref_name, "refs/heads/", 11) ||