[PATCHv5 1/5] Refactor list of of repo-local env vars

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]