[PATCH 2/2] repo-config: learn the flag "--no-local"

Subsystems: the rest

STALE3715d

10 messages, 6 authors, 2016-06-15 · open the first message on its own page

[PATCH 2/2] repo-config: learn the flag "--no-local"

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:28

Since there is a global config now, we need a way to access it
conveniently. Now you can say

	git repo-config --no-local alias.l "log --stat -M ORIG_HEAD.."

to set the alias globally (it will be stored in ~/.gitconfig).

Signed-off-by: Johannes Schindelin <redacted>
---
 cache.h       |    1 +
 config.c      |   23 ++++++++++++++++++-----
 repo-config.c |    5 ++++-
 3 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/cache.h b/cache.h
index d5d7fe4..14fe5c8 100644
--- a/cache.h
+++ b/cache.h
@@ -348,6 +348,7 @@ extern void packed_object_info_detail(st
 /* Dumb servers support */
 extern int update_server_info(int);
 
+extern int git_ignore_local_config;
 typedef int (*config_fn_t)(const char *, const char *);
 extern int git_default_config(const char *, const char *);
 extern int git_config_from_file(config_fn_t fn, const char *);
diff --git a/config.c b/config.c
index 0987943..33f9109 100644
--- a/config.c
+++ b/config.c
@@ -10,6 +10,7 @@ #include <regex.h>
 
 #define MAXNAME (256)
 
+int git_ignore_local_config = 0;
 static FILE *config_file;
 static const char *config_file_name;
 static int config_linenr;
@@ -327,7 +328,8 @@ int git_config(config_fn_t fn)
 			ret = 0;
 	}
 
-	ret += git_config_from_file(fn, git_path("config"));
+	if (!git_ignore_local_config)
+		ret += git_config_from_file(fn, git_path("config"));
 	return ret;
 }
 
@@ -501,10 +503,20 @@ int git_config_set_multivar(const char* 
 	int i, dot;
 	int fd = -1, in_fd;
 	int ret;
-	char* config_filename = strdup(git_path("config"));
-	char* lock_file = strdup(git_path("config.lock"));
+	char *config_filename, *lock_file;
 	const char* last_dot = strrchr(key, '.');
 
+	if (git_ignore_local_config) {
+		const char *home = getenv("HOME");
+		if (!home)
+			die("No home?");
+		config_filename = strdup(mkpath("%s/.gitconfig", home));
+		lock_file = strdup(mkpath("%s/.gitconfig.lock", home));
+	} else {
+		config_filename = strdup(git_path("config"));
+		lock_file = strdup(git_path("config.lock"));
+	}
+
 	/*
 	 * Since "key" actually contains the section name and the real
 	 * key name separated by a dot, we have to know where the dot is.
@@ -611,8 +623,9 @@ int git_config_set_multivar(const char* 
 		 * As a side effect, we make sure to transform only a valid
 		 * existing config file.
 		 */
-		if (git_config(store_aux)) {
-			fprintf(stderr, "invalid config file\n");
+		if (git_config_from_file(store_aux, config_filename)) {
+			fprintf(stderr, "invalid config file: %s\n",
+					config_filename);
 			free(store.key);
 			if (store.value_regex != NULL) {
 				regfree(store.value_regex);
diff --git a/repo-config.c b/repo-config.c
index 59c2bfb..8c0bb20 100644
--- a/repo-config.c
+++ b/repo-config.c
@@ -97,7 +97,8 @@ static int get_value(const char* key_, c
 
 	if (do_all && global)
 		git_config_from_file(show_config, global);
-	git_config_from_file(show_config, git_path("config"));
+	if (!git_ignore_local_config)
+		git_config_from_file(show_config, git_path("config"));
 	if (!do_all && !seen)
 		git_config_from_file(show_config, global);
 
@@ -125,6 +126,8 @@ int main(int argc, const char **argv)
 			type = T_BOOL;
 		else if (!strcmp(argv[1], "--list") || !strcmp(argv[1], "-l"))
 			return git_config(show_all_config);
+		else if (!strcmp(argv[1], "--no-local"))
+			git_ignore_local_config = 1;
 		else
 			break;
 		argc--;
-- 
1.4.0.rc1.g2f47-dirty

Re: [PATCH 2/2] repo-config: learn the flag "--no-local"

From: Lukas Sandström <hidden>
Date: 2016-06-15 22:42:28

Johannes Schindelin wrote:
Since there is a global config now, we need a way to access it
conveniently. Now you can say

	git repo-config --no-local alias.l "log --stat -M ORIG_HEAD.."

to set the alias globally (it will be stored in ~/.gitconfig).
Wouldn't it make more sense to call the flag --global ?

/Lukas

Re: [PATCH 2/2] repo-config: learn the flag "--no-local"

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:28

Hi,

On Thu, 8 Jun 2006, Lukas Sandström wrote:
Johannes Schindelin wrote:
quoted
Since there is a global config now, we need a way to access it
conveniently. Now you can say

	git repo-config --no-local alias.l "log --stat -M ORIG_HEAD.."

to set the alias globally (it will be stored in ~/.gitconfig).
Wouldn't it make more sense to call the flag --global ?
Sure, why not? Other opinions? (I will not add a test case until this is 
resolved! ;-)

Ciao,
Dscho

Re: [PATCH 2/2] repo-config: learn the flag "--no-local"

From: Karl Hasselström <hidden>
Date: 2016-06-15 22:42:28

On 2006-06-08 13:41:04 +0200, Johannes Schindelin wrote:
On Thu, 8 Jun 2006, Lukas Sandström wrote:
quoted
Johannes Schindelin wrote:
quoted
Since there is a global config now, we need a way to access it
conveniently. Now you can say

  git repo-config --no-local alias.l "log --stat -M ORIG_HEAD.."

to set the alias globally (it will be stored in ~/.gitconfig).
Wouldn't it make more sense to call the flag --global ?
Sure, why not? Other opinions? (I will not add a test case until
this is resolved! ;-)
My vote goes to --no-local, but only if we also get a --no-no-local
flag with the opposite meaning. Otherwise, I'd prefer --global. :-)

-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle

Re: [PATCH 2/2] repo-config: learn the flag "--no-local"

From: Alex Riesen <hidden>
Date: 2016-06-15 22:42:28

quoted
Wouldn't it make more sense to call the flag --global ?
Sure, why not? Other opinions? (I will not add a test case until this is
resolved! ;-)
"--no-gitconfig" (as "--norc" in bash).

Re: [PATCH 2/2] repo-config: learn the flag "--no-local"

From: Aneesh Kumar K.V <hidden>
Date: 2016-06-15 22:42:28

On Thu, Jun 08, 2006 at 01:31:46PM +0200, Johannes Schindelin wrote:
Since there is a global config now, we need a way to access it
conveniently. Now you can say

	git repo-config --no-local alias.l "log --stat -M ORIG_HEAD.."

to set the alias globally (it will be stored in ~/.gitconfig).
how about  making the above 

   git config --repo alias.l "log --stat -M ORIG_HEAD.."

-aneesh

Re: [PATCH 2/2] repo-config: learn the flag "--no-local"

From: Aneesh Kumar K.V <hidden>
Date: 2016-06-15 22:42:28

On Thu, Jun 08, 2006 at 03:37:47PM +0200, Karl Hasselstr?m wrote:
On 2006-06-08 13:41:04 +0200, Johannes Schindelin wrote:

My vote goes to --no-local, but only if we also get a --no-no-local
flag with the opposite meaning. Otherwise, I'd prefer --global. :-)

I guess it makes much sense to rename the command to git-config and say 

git config  alias.l  -> for golbal config 
git config --repo alias.l -> for repo specific config 

-aneesh

Re: [PATCH 2/2] repo-config: learn the flag "--no-local"

From: Jakub Narebski <hidden>
Date: 2016-06-15 22:42:29

Aneesh Kumar K.V wrote:
On Thu, Jun 08, 2006 at 03:37:47PM +0200, Karl Hasselstr?m wrote:
quoted
On 2006-06-08 13:41:04 +0200, Johannes Schindelin wrote:

My vote goes to --no-local, but only if we also get a --no-no-local
flag with the opposite meaning. Otherwise, I'd prefer --global. :-)

I guess it makes much sense to rename the command to git-config and say 

git config  alias.l  -> for golbal config 
git config --repo alias.l -> for repo specific config 
And legacy "git repo-config" as equivalent of "git config --repo", perhaps
implemented via alias mechanism (if there woul be system-wide coniguration
file, otherwise in skeleton/template).

-- 
Jakub Narebski
Warsaw, Poland

Re: [PATCH 2/2] repo-config: learn the flag "--no-local"

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:29

Hi,

On Thu, 8 Jun 2006, Jakub Narebski wrote:
And legacy "git repo-config" as equivalent of "git config --repo", perhaps
implemented via alias mechanism (if there woul be system-wide coniguration
file, otherwise in skeleton/template).
Why use the alias mechanism? I, for one, never install git. So, this 
solution is rather fragile. But there are better ways: the builtin 
mechanism for one.

Ciao,
Dscho

Re: [PATCH 2/2] repo-config: learn the flag "--no-local"

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:29

Hi,

On Thu, 8 Jun 2006, Aneesh Kumar K.V wrote:
On Thu, Jun 08, 2006 at 01:31:46PM +0200, Johannes Schindelin wrote:
quoted
Since there is a global config now, we need a way to access it
conveniently. Now you can say

	git repo-config --no-local alias.l "log --stat -M ORIG_HEAD.."

to set the alias globally (it will be stored in ~/.gitconfig).
how about  making the above 

   git config --repo alias.l "log --stat -M ORIG_HEAD.."
IMHO it would be a sane thing to make this default. Most config variables 
are repository dependent.

Ciao,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help