* [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).