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@xxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html