[PATCHv5 1/5] Refactor list of of repo-local env vars
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>
---
cache.h | 8 ++++++++
connect.c | 14 ++------------
environment.c | 15 +++++++++++++++
3 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/cache.h b/cache.h
index d454b7e..0832ee9 100644
--- a/cache.h
+++ b/cache.h
@@ -388,6 +388,14 @@ 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 stored in the following define
+ to simplify preallocation of arrays that need to extend it */
+#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);
diff --git a/connect.c b/connect.c
index 9f39038..323a771 100644
--- a/connect.c
+++ b/connect.c
@@ -582,18 +582,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;
diff --git a/environment.c b/environment.c
index 739ec27..b3e9e8c 100644
--- a/environment.c
+++ b/environment.c
@@ -63,6 +63,21 @@ 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);
--
1.7.0.212.g5b851b.dirty