From: Junio C Hamano Date: Wed, 25 Jun 2014 18:45:55 +0000 (-0700) Subject: Merge branch 'ow/config-mailmap-pathname' into maint X-Git-Tag: v2.0.1~23 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/fbfdf13b5c0f168bbb292454d8099ca49dd7dbd6?ds=inline;hp=-c Merge branch 'ow/config-mailmap-pathname' into maint The "mailmap.file" configuration option did not support the tilde expansion (i.e. ~user/path and ~/path). * ow/config-mailmap-pathname: config: respect '~' and '~user' in mailmap.file --- fbfdf13b5c0f168bbb292454d8099ca49dd7dbd6 diff --combined config.c index a30cb5c07d,ec7af5f0ae..5272fc6f0b --- a/config.c +++ b/config.c @@@ -21,7 -21,6 +21,7 @@@ struct config_source } buf; } u; const char *name; + const char *path; int die_on_error; int linenr; int eof; @@@ -102,12 -101,12 +102,12 @@@ static int handle_path_include(const ch if (!is_absolute_path(path)) { char *slash; - if (!cf || !cf->name) + if (!cf || !cf->path) return error("relative config includes must come from files"); - slash = find_last_dir_sep(cf->name); + slash = find_last_dir_sep(cf->path); if (slash) - strbuf_add(&buf, cf->name, slash - cf->name + 1); + strbuf_add(&buf, cf->path, slash - cf->path + 1); strbuf_addstr(&buf, path); path = buf.buf; } @@@ -557,7 -556,6 +557,7 @@@ int git_parse_ulong(const char *value, return 1; } +NORETURN static void die_bad_number(const char *name, const char *value) { const char *reason = errno == ERANGE ? @@@ -669,7 -667,20 +669,7 @@@ static int git_default_core_config(cons trust_ctime = git_config_bool(var, value); return 0; } - if (!strcmp(var, "core.statinfo") || - !strcmp(var, "core.checkstat")) { - /* - * NEEDSWORK: statinfo was a typo in v1.8.2 that has - * never been advertised. we will remove it at Git - * 2.0 boundary. - */ - if (!strcmp(var, "core.statinfo")) { - static int warned; - if (!warned++) { - warning("'core.statinfo' will be removed in Git 2.0; " - "use 'core.checkstat' instead."); - } - } + if (!strcmp(var, "core.checkstat")) { if (!strcasecmp(value, "default")) check_stat = 1; else if (!strcasecmp(value, "minimal")) @@@ -952,7 -963,7 +952,7 @@@ static int git_default_push_config(cons static int git_default_mailmap_config(const char *var, const char *value) { if (!strcmp(var, "mailmap.file")) - return git_config_string(&git_mailmap_file, var, value); + return git_config_pathname(&git_mailmap_file, var, value); if (!strcmp(var, "mailmap.blob")) return git_config_string(&git_mailmap_blob, var, value); @@@ -1023,35 -1034,24 +1023,35 @@@ static int do_config_from(struct config return ret; } -int git_config_from_file(config_fn_t fn, const char *filename, void *data) +static int do_config_from_file(config_fn_t fn, + const char *name, const char *path, FILE *f, void *data) { - int ret; - FILE *f = fopen(filename, "r"); + struct config_source top; - ret = -1; - if (f) { - struct config_source top; + top.u.file = f; + top.name = name; + top.path = path; + top.die_on_error = 1; + top.do_fgetc = config_file_fgetc; + top.do_ungetc = config_file_ungetc; + top.do_ftell = config_file_ftell; - top.u.file = f; - top.name = filename; - top.die_on_error = 1; - top.do_fgetc = config_file_fgetc; - top.do_ungetc = config_file_ungetc; - top.do_ftell = config_file_ftell; + return do_config_from(&top, fn, data); +} + +static int git_config_from_stdin(config_fn_t fn, void *data) +{ + return do_config_from_file(fn, "", NULL, stdin, data); +} - ret = do_config_from(&top, fn, data); +int git_config_from_file(config_fn_t fn, const char *filename, void *data) +{ + int ret = -1; + FILE *f; + f = fopen(filename, "r"); + if (f) { + ret = do_config_from_file(fn, filename, filename, f, data); fclose(f); } return ret; @@@ -1066,7 -1066,6 +1066,7 @@@ int git_config_from_buf(config_fn_t fn top.u.buf.len = len; top.u.buf.pos = 0; top.name = name; + top.path = NULL; top.die_on_error = 0; top.do_fgetc = config_buf_fgetc; top.do_ungetc = config_buf_ungetc; @@@ -1175,7 -1174,8 +1175,7 @@@ int git_config_early(config_fn_t fn, vo } int git_config_with_options(config_fn_t fn, void *data, - const char *filename, - const char *blob_ref, + struct git_config_source *config_source, int respect_includes) { char *repo_config = NULL; @@@ -1193,12 -1193,10 +1193,12 @@@ * If we have a specific filename, use it. Otherwise, follow the * regular lookup sequence. */ - if (filename) - return git_config_from_file(fn, filename, data); - else if (blob_ref) - return git_config_from_blob_ref(fn, blob_ref, data); + if (config_source && config_source->use_stdin) + return git_config_from_stdin(fn, data); + else if (config_source && config_source->file) + return git_config_from_file(fn, config_source->file, data); + else if (config_source && config_source->blob) + return git_config_from_blob_ref(fn, config_source->blob, data); repo_config = git_pathdup("config"); ret = git_config_early(fn, data, repo_config); @@@ -1209,7 -1207,7 +1209,7 @@@ int git_config(config_fn_t fn, void *data) { - return git_config_with_options(fn, data, NULL, NULL, 1); + return git_config_with_options(fn, data, NULL, 1); } /*