* [PATCH A v4 0/5] git config: cleanups
@ 2009-02-21 0:48 Felipe Contreras
2009-02-21 0:48 ` [PATCH A v4 1/5] git config: codestyle cleanups Felipe Contreras
0 siblings, 1 reply; 6+ messages in thread
From: Felipe Contreras @ 2009-02-21 0:48 UTC (permalink / raw)
To: git; +Cc: Johannes Schindelin, Junio C Hamano, Felipe Contreras
This patch series is the first of a two parts reorganization for more
maintainability and user friendliness. Nonetheless stands on its own can be
applied without the second part.
There are essentially no functional changes.
Felipe Contreras (4):
git config: codestyle cleanups
git_config(): not having a per-repo config file is not an error
git config: trivial rename in preparation for parseopt
git config: reorganize get_color*
Johannes Schindelin (1):
git config: trivial cleanup for editor action
builtin-config.c | 108 ++++++++++++++++++++---------------------------------
config.c | 17 ++++++--
2 files changed, 54 insertions(+), 71 deletions(-)
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH A v4 1/5] git config: codestyle cleanups
2009-02-21 0:48 [PATCH A v4 0/5] git config: cleanups Felipe Contreras
@ 2009-02-21 0:48 ` Felipe Contreras
2009-02-21 0:48 ` [PATCH A v4 2/5] git config: trivial cleanup for editor action Felipe Contreras
0 siblings, 1 reply; 6+ messages in thread
From: Felipe Contreras @ 2009-02-21 0:48 UTC (permalink / raw)
To: git; +Cc: Johannes Schindelin, Junio C Hamano, Felipe Contreras
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
builtin-config.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/builtin-config.c b/builtin-config.c
index 6937eaf..afc4393 100644
--- a/builtin-config.c
+++ b/builtin-config.c
@@ -27,7 +27,7 @@ static int show_all_config(const char *key_, const char *value_, void *cb)
return 0;
}
-static int show_config(const char* key_, const char* value_, void *cb)
+static int show_config(const char *key_, const char *value_, void *cb)
{
char value[256];
const char *vptr = value;
@@ -74,7 +74,7 @@ static int show_config(const char* key_, const char* value_, void *cb)
return 0;
}
-static int get_value(const char* key_, const char* regex_)
+static int get_value(const char *key_, const char *regex_)
{
int ret = -1;
char *tl;
@@ -284,7 +284,7 @@ static int get_colorbool(int argc, const char **argv)
int cmd_config(int argc, const char **argv, const char *prefix)
{
int nongit;
- char* value;
+ char *value;
const char *file = setup_git_directory_gently(&nongit);
config_exclusive_filename = getenv(CONFIG_ENVIRONMENT);
--
1.6.1.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH A v4 2/5] git config: trivial cleanup for editor action
2009-02-21 0:48 ` [PATCH A v4 1/5] git config: codestyle cleanups Felipe Contreras
@ 2009-02-21 0:48 ` Felipe Contreras
2009-02-21 0:48 ` [PATCH A v4 3/5] git_config(): not having a per-repo config file is not an error Felipe Contreras
0 siblings, 1 reply; 6+ messages in thread
From: Felipe Contreras @ 2009-02-21 0:48 UTC (permalink / raw)
To: git
Cc: Johannes Schindelin, Junio C Hamano, Johannes Schindelin,
Felipe Contreras
From: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
builtin-config.c | 9 +++------
1 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/builtin-config.c b/builtin-config.c
index afc4393..d52a057 100644
--- a/builtin-config.c
+++ b/builtin-config.c
@@ -363,15 +363,12 @@ int cmd_config(int argc, const char **argv, const char *prefix)
} else if (!strcmp(argv[1], "--get-colorbool")) {
return get_colorbool(argc-2, argv+2);
} else if (!strcmp(argv[1], "--edit") || !strcmp(argv[1], "-e")) {
- const char *config_filename;
if (argc != 2)
usage(git_config_set_usage);
- if (config_exclusive_filename)
- config_filename = config_exclusive_filename;
- else
- config_filename = git_path("config");
git_config(git_default_config, NULL);
- launch_editor(config_filename, NULL, NULL);
+ launch_editor(config_exclusive_filename ?
+ config_exclusive_filename : git_path("config"),
+ NULL, NULL);
return 0;
} else
break;
--
1.6.1.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH A v4 3/5] git_config(): not having a per-repo config file is not an error
2009-02-21 0:48 ` [PATCH A v4 2/5] git config: trivial cleanup for editor action Felipe Contreras
@ 2009-02-21 0:48 ` Felipe Contreras
2009-02-21 0:48 ` [PATCH A v4 4/5] git config: trivial rename in preparation for parseopt Felipe Contreras
0 siblings, 1 reply; 6+ messages in thread
From: Felipe Contreras @ 2009-02-21 0:48 UTC (permalink / raw)
To: git; +Cc: Johannes Schindelin, Junio C Hamano, Felipe Contreras
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
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH A v4 4/5] git config: trivial rename in preparation for parseopt
2009-02-21 0:48 ` [PATCH A v4 3/5] git_config(): not having a per-repo config file is not an error Felipe Contreras
@ 2009-02-21 0:48 ` Felipe Contreras
2009-02-21 0:48 ` [PATCH A v4 5/5] git config: reorganize get_color* Felipe Contreras
0 siblings, 1 reply; 6+ messages in thread
From: Felipe Contreras @ 2009-02-21 0:48 UTC (permalink / raw)
To: git; +Cc: Johannes Schindelin, Junio C Hamano, Felipe Contreras
Essentially this replaces 'file' with 'prefix' in the cases where the
variable is used as a prefix, which is consistent with other git
commands.
When using the --list option general errors where not properly reported,
only errors related with the 'file'. Now they are reported, and 'file'
is irrelevant.
That reduces the rest of 'file' usage to nothing, therefore now only
'prefix' remains.
Suggested by Johannes Schindelin.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
builtin-config.c | 32 ++++++++++++++++++--------------
1 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/builtin-config.c b/builtin-config.c
index d52a057..5074c61 100644
--- a/builtin-config.c
+++ b/builtin-config.c
@@ -178,6 +178,7 @@ static char *normalize_value(const char *key, const char *value)
static int get_color_found;
static const char *get_color_slot;
+static const char *get_colorbool_slot;
static char parsed_color[COLOR_MAXLEN];
static int git_get_color_config(const char *var, const char *value, void *cb)
@@ -231,7 +232,7 @@ static int get_diff_color_found;
static int git_get_colorbool_config(const char *var, const char *value,
void *cb)
{
- if (!strcmp(var, get_color_slot)) {
+ if (!strcmp(var, get_colorbool_slot)) {
get_colorbool_found =
git_config_colorbool(var, value, stdout_is_tty);
}
@@ -263,11 +264,11 @@ static int get_colorbool(int argc, const char **argv)
usage(git_config_set_usage);
get_colorbool_found = -1;
get_diff_color_found = -1;
- get_color_slot = argv[0];
+ get_colorbool_slot = argv[0];
git_config(git_get_colorbool_config, NULL);
if (get_colorbool_found < 0) {
- if (!strcmp(get_color_slot, "color.diff"))
+ if (!strcmp(get_colorbool_slot, "color.diff"))
get_colorbool_found = get_diff_color_found;
if (get_colorbool_found < 0)
get_colorbool_found = git_use_color_default;
@@ -281,11 +282,11 @@ static int get_colorbool(int argc, const char **argv)
}
}
-int cmd_config(int argc, const char **argv, const char *prefix)
+int cmd_config(int argc, const char **argv, const char *unused_prefix)
{
int nongit;
char *value;
- const char *file = setup_git_directory_gently(&nongit);
+ const char *prefix = setup_git_directory_gently(&nongit);
config_exclusive_filename = getenv(CONFIG_ENVIRONMENT);
@@ -299,10 +300,13 @@ int cmd_config(int argc, const char **argv, const char *prefix)
else if (!strcmp(argv[1], "--list") || !strcmp(argv[1], "-l")) {
if (argc != 2)
usage(git_config_set_usage);
- if (git_config(show_all_config, NULL) < 0 &&
- file && errno)
- die("unable to read config file %s: %s", file,
- strerror(errno));
+ if (git_config(show_all_config, NULL) < 0) {
+ if (config_exclusive_filename)
+ die("unable to read config file %s: %s",
+ config_exclusive_filename, strerror(errno));
+ else
+ die("error processing config file(s)");
+ }
return 0;
}
else if (!strcmp(argv[1], "--global")) {
@@ -319,12 +323,12 @@ int cmd_config(int argc, const char **argv, const char *prefix)
else if (!strcmp(argv[1], "--file") || !strcmp(argv[1], "-f")) {
if (argc < 3)
usage(git_config_set_usage);
- if (!is_absolute_path(argv[2]) && file)
- file = prefix_filename(file, strlen(file),
- argv[2]);
+ if (!is_absolute_path(argv[2]) && prefix)
+ config_exclusive_filename = prefix_filename(prefix,
+ strlen(prefix),
+ argv[2]);
else
- file = argv[2];
- config_exclusive_filename = file;
+ config_exclusive_filename = argv[2];
argc--;
argv++;
}
--
1.6.1.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH A v4 5/5] git config: reorganize get_color*
2009-02-21 0:48 ` [PATCH A v4 4/5] git config: trivial rename in preparation for parseopt Felipe Contreras
@ 2009-02-21 0:48 ` Felipe Contreras
0 siblings, 0 replies; 6+ messages in thread
From: Felipe Contreras @ 2009-02-21 0:48 UTC (permalink / raw)
To: git; +Cc: Johannes Schindelin, Junio C Hamano, Felipe Contreras
In preparation for parseopt.
Also remove some unecessary comments since the usage is described in the
documentation.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
builtin-config.c | 63 +++++++++++++++--------------------------------------
1 files changed, 18 insertions(+), 45 deletions(-)
diff --git a/builtin-config.c b/builtin-config.c
index 5074c61..0836880 100644
--- a/builtin-config.c
+++ b/builtin-config.c
@@ -180,7 +180,6 @@ static int get_color_found;
static const char *get_color_slot;
static const char *get_colorbool_slot;
static char parsed_color[COLOR_MAXLEN];
-
static int git_get_color_config(const char *var, const char *value, void *cb)
{
if (!strcmp(var, get_color_slot)) {
@@ -192,29 +191,8 @@ static int git_get_color_config(const char *var, const char *value, void *cb)
return 0;
}
-static int get_color(int argc, const char **argv)
+static void get_color(const char *def_color)
{
- /*
- * grab the color setting for the given slot from the configuration,
- * or parse the default value if missing, and return ANSI color
- * escape sequence.
- *
- * e.g.
- * git config --get-color color.diff.whitespace "blue reverse"
- */
- const char *def_color = NULL;
-
- switch (argc) {
- default:
- usage(git_config_set_usage);
- case 2:
- def_color = argv[1];
- /* fallthru */
- case 1:
- get_color_slot = argv[0];
- break;
- }
-
get_color_found = 0;
parsed_color[0] = '\0';
git_config(git_get_color_config, NULL);
@@ -223,7 +201,6 @@ static int get_color(int argc, const char **argv)
color_parse(def_color, "command line", parsed_color);
fputs(parsed_color, stdout);
- return 0;
}
static int stdout_is_tty;
@@ -247,24 +224,10 @@ static int git_get_colorbool_config(const char *var, const char *value,
return 0;
}
-static int get_colorbool(int argc, const char **argv)
+static int get_colorbool(int print)
{
- /*
- * git config --get-colorbool <slot> [<stdout-is-tty>]
- *
- * returns "true" or "false" depending on how <slot>
- * is configured.
- */
-
- if (argc == 2)
- stdout_is_tty = git_config_bool("command line", argv[1]);
- else if (argc == 1)
- stdout_is_tty = isatty(1);
- else
- usage(git_config_set_usage);
get_colorbool_found = -1;
get_diff_color_found = -1;
- get_colorbool_slot = argv[0];
git_config(git_get_colorbool_config, NULL);
if (get_colorbool_found < 0) {
@@ -274,12 +237,11 @@ static int get_colorbool(int argc, const char **argv)
get_colorbool_found = git_use_color_default;
}
- if (argc == 1) {
- return get_colorbool_found ? 0 : 1;
- } else {
+ if (print) {
printf("%s\n", get_colorbool_found ? "true" : "false");
return 0;
- }
+ } else
+ return get_colorbool_found ? 0 : 1;
}
int cmd_config(int argc, const char **argv, const char *unused_prefix)
@@ -363,9 +325,20 @@ int cmd_config(int argc, const char **argv, const char *unused_prefix)
}
return 0;
} else if (!strcmp(argv[1], "--get-color")) {
- return get_color(argc-2, argv+2);
+ if (argc > 4 || argc < 3)
+ usage(git_config_set_usage);
+ get_color_slot = argv[2];
+ get_color(argv[3]);
+ return 0;
} else if (!strcmp(argv[1], "--get-colorbool")) {
- return get_colorbool(argc-2, argv+2);
+ if (argc == 4)
+ stdout_is_tty = git_config_bool("command line", argv[3]);
+ else if (argc == 3)
+ stdout_is_tty = isatty(1);
+ else
+ usage(git_config_set_usage);
+ get_colorbool_slot = argv[2];
+ return get_colorbool(argc != 3);
} else if (!strcmp(argv[1], "--edit") || !strcmp(argv[1], "-e")) {
if (argc != 2)
usage(git_config_set_usage);
--
1.6.1.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-02-21 0:58 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-21 0:48 [PATCH A v4 0/5] git config: cleanups Felipe Contreras
2009-02-21 0:48 ` [PATCH A v4 1/5] git config: codestyle cleanups Felipe Contreras
2009-02-21 0:48 ` [PATCH A v4 2/5] git config: trivial cleanup for editor action Felipe Contreras
2009-02-21 0:48 ` [PATCH A v4 3/5] git_config(): not having a per-repo config file is not an error Felipe Contreras
2009-02-21 0:48 ` [PATCH A v4 4/5] git config: trivial rename in preparation for parseopt Felipe Contreras
2009-02-21 0:48 ` [PATCH A v4 5/5] git config: reorganize get_color* Felipe Contreras
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).