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

[PATCH A v4 3/5] git_config(): not having a per-repo config file is not an error

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Feb 21, 2009, 00:48 UTC
Message-ID
<1235177337-2532-4-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1235177337-2532-3-git-send-email-felipe.contreras@gmail.com>

Currently git_config() returns an error if there is no repo config file available (cwd is not a git repo); it will correctly parse the system and global config files, but still return an error.

It doesn't affect anything else since almost nobody is checking for the return code (with the exception of 'git remote update').

A reorganization in 'git config' would benefit from being able to properly detect errors in git_config() without the noise generated when cwd is not a git repo.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 config.c |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/config.c b/config.c
index 7dc1b0f..68ce519 100644
--- a/config.c
+++ b/config.c
@@ -649,28 +649,37 @@ int git_config_global(void)
 
 int git_config(config_fn_t fn, void *data)
 {
-	int ret = 0;
+	int ret = 0, found = 0;
 	char *repo_config = NULL;
 	const char *home = NULL;
 
 	/* Setting $GIT_CONFIG makes git read _only_ the given config file. */
 	if (config_exclusive_filename)
 		return git_config_from_file(fn, config_exclusive_filename, data);
-	if (git_config_system() && !access(git_etc_gitconfig(), R_OK))
+	if (git_config_system() && !access(git_etc_gitconfig(), R_OK)) {
 		ret += git_config_from_file(fn, git_etc_gitconfig(),
 					    data);
+		found += 1;
+	}
 
 	home = getenv("HOME");
 	if (git_config_global() && home) {
 		char *user_config = xstrdup(mkpath("%s/.gitconfig", home));
-		if (!access(user_config, R_OK))
+		if (!access(user_config, R_OK)) {
 			ret += git_config_from_file(fn, user_config, data);
+			found += 1;
+		}
 		free(user_config);
 	}
 
 	repo_config = git_pathdup("config");
-	ret += git_config_from_file(fn, repo_config, data);
+	if (!access(repo_config, R_OK)) {
+		ret += git_config_from_file(fn, repo_config, data);
+		found += 1;
+	}
 	free(repo_config);
+	if (found == 0)
+		return -1;
 	return ret;
 }
 
-- 
1.6.1.3
Previous: Felipe ContrerasNext: Felipe Contreras
Message 4 of 6 in “git config: cleanups”
  1. 0/5 git config: cleanupsFelipe Contreras, Feb 21, 2009
  2. 1/5 git config: codestyle cleanupsFelipe Contreras, Feb 21, 2009
  3. 2/5 git config: trivial cleanup for editor actionFelipe Contreras, Feb 21, 2009
  4. 3/5 git_config(): not having a per-repo config file is not an errorFelipe Contreras, Feb 21, 2009
  5. 4/5 git config: trivial rename in preparation for parseoptFelipe Contreras, Feb 21, 2009
  6. 5/5 git config: reorganize get_color*Felipe Contreras, Feb 21, 2009

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.