Code

Refactor list of of repo-local env vars
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Wed, 24 Feb 2010 23:34:14 +0000 (00:34 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 25 Feb 2010 00:24:25 +0000 (16:24 -0800)
Move the list of GIT_* environment variables that are local to a
repository into a static list in environment.c, as it is also
useful elsewhere. Also add the missing GIT_CONFIG variable to the
list.

Make it easy to use the list both by NULL-termination and by size;
the latter (excluding the terminating NULL) is stored in the
local_repo_env_size define.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
cache.h
connect.c
environment.c

diff --git a/cache.h b/cache.h
index d478eff1f323f25a474cf019e0de2254c5ff0360..58209adbd6f0c7e72b1e29c36af31c82e842c9ac 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -388,6 +388,15 @@ static inline enum object_type object_type(unsigned int mode)
 #define GIT_NOTES_REF_ENVIRONMENT "GIT_NOTES_REF"
 #define GIT_NOTES_DEFAULT_REF "refs/notes/commits"
 
+/*
+ * Repository-local GIT_* environment variables
+ * The array is NULL-terminated to simplify its usage in contexts such
+ * environment creation or simple walk of the list.
+ * The number of non-NULL entries is available as a macro.
+ */
+#define LOCAL_REPO_ENV_SIZE 8
+extern const char *const local_repo_env[LOCAL_REPO_ENV_SIZE + 1];
+
 extern int is_bare_repository_cfg;
 extern int is_bare_repository(void);
 extern int is_inside_git_dir(void);
index 20054e4d0fd4cf94288593726be179d07d19271c..24ce2fc70edd1945b5e7b51a9a02afba668eb9ff 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -607,18 +607,8 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
                *arg++ = host;
        }
        else {
-               /* remove these from the environment */
-               const char *env[] = {
-                       ALTERNATE_DB_ENVIRONMENT,
-                       DB_ENVIRONMENT,
-                       GIT_DIR_ENVIRONMENT,
-                       GIT_WORK_TREE_ENVIRONMENT,
-                       GRAFT_ENVIRONMENT,
-                       INDEX_ENVIRONMENT,
-                       NO_REPLACE_OBJECTS_ENVIRONMENT,
-                       NULL
-               };
-               conn->env = env;
+               /* remove repo-local variables from the environment */
+               conn->env = local_repo_env;
                conn->use_shell = 1;
        }
        *arg++ = cmd.buf;
index 739ec2704031f0dd9d4a380e07f001c09742a7be..876c5e53410250b5f2744671e39907c234771af3 100644 (file)
@@ -63,6 +63,23 @@ static char *work_tree;
 static const char *git_dir;
 static char *git_object_dir, *git_index_file, *git_refs_dir, *git_graft_file;
 
+/*
+ * Repository-local GIT_* environment variables
+ * Remember to update local_repo_env_size in cache.h when
+ * the size of the list changes
+ */
+const char * const local_repo_env[LOCAL_REPO_ENV_SIZE + 1] = {
+       ALTERNATE_DB_ENVIRONMENT,
+       CONFIG_ENVIRONMENT,
+       DB_ENVIRONMENT,
+       GIT_DIR_ENVIRONMENT,
+       GIT_WORK_TREE_ENVIRONMENT,
+       GRAFT_ENVIRONMENT,
+       INDEX_ENVIRONMENT,
+       NO_REPLACE_OBJECTS_ENVIRONMENT,
+       NULL
+};
+
 static void setup_git_env(void)
 {
        git_dir = getenv(GIT_DIR_ENVIRONMENT);