git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date
Feb 24, 2010, 23:34 UTC
Message-ID
<1267054458-11877-2-git-send-email-giuseppe.bilotta@gmail.com>
In-Reply-To
<1267054458-11877-1-git-send-email-giuseppe.bilotta@gmail.com>

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
Previous: Giuseppe BilottaNext: Giuseppe Bilotta
Message 2 of 7 in “[PATCHv5 0/5] repo-local env vars handling”
  1. Giuseppe BilottaFeb 24, 2010
  2. 1/5 Refactor list of of repo-local env varsGiuseppe Bilotta, Feb 24, 2010
  3. 2/5 rev-parse: --local-env-vars optionGiuseppe Bilotta, Feb 24, 2010
  4. Heiko VoigtFeb 27, 2010
  5. 3/5 shell setup: clear_local_git_env() functionGiuseppe Bilotta, Feb 24, 2010
  6. 4/5 submodules: ensure clean environment when operating in a submoduleGiuseppe Bilotta, Feb 24, 2010
  7. 5/5 is_submodule_modified(): clear environment properlyGiuseppe Bilotta, Feb 24, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.