All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 0/8] Rewrite `git_config()` using config-set API
@ 2014-08-01 17:05 Tanay Abhra
  2014-08-01 17:05 ` [PATCH v7 1/8] config.c: mark error and warnings strings for translation Tanay Abhra
                   ` (8 more replies)
  0 siblings, 9 replies; 19+ messages in thread
From: Tanay Abhra @ 2014-08-01 17:05 UTC (permalink / raw)
  To: git; +Cc: Tanay Abhra, Ramkumar Ramachandra, Matthieu Moy, Junio C Hamano

[Patch v7]: style nit corrected. (1/8) is Matthieu's translation patch.
	git_die_config_linenr() helper function added. Diff between v6
	and v7 appended for review.

[Patch v6]: Added _(....) to error messages.
	Diff between v6 and v4 at the bottom.

[PATCH v5]: New patch added (3/7). git_config() now returns void.

[PATCH v4]: One style nit corrected, also added key to error messages.

[PATCH V3]:All the suggestions in [3] applied. Built on top of [1].

[PATCH V2]: All the suggestions in [2] incorporated. git_config() now follows
	correct parsing order. Reordered the patches. Removed xfuncname patch
	as it was unnecssary.

This series builds on the top of topic[1] in the mailing list with name
"git config cache & special querying API utilizing the cache".

This series aims to do these three things,

* Use the config-set API to rewrite git_config().

* Solve any legacy bugs in the previous system while at it.

* To be feature complete compared to the previous git_config() implementation,
	which I think it is now. (added the line number and file name info just for
	completeness)

Also, I haven't yet checked the exact improvements but still as a teaser,
git status now only rereads the configuration files twice instead of four
times.

[1]: http://thread.gmane.org/gmane.comp.version-control.git/254286
[2]: http://thread.gmane.org/gmane.comp.version-control.git/254101
[3]: http://thread.gmane.org/gmane.comp.version-control.git/254211

Matthieu Moy (1):
  config.c: mark error and warnings strings for translation

Tanay Abhra (7):
  config.c: fix accuracy of line number in errors
  add line number and file name info to `config_set`
  change `git_config()` return value to void
  config: add `git_die_config()` to the config-set API
  rewrite git_config() to use the config-set API
  add a test for semantic errors in config files
  add tests for `git_config_get_string_const()`

 Documentation/technical/api-config.txt |  12 +++
 branch.c                               |   5 +-
 cache.h                                |  28 +++++-
 config.c                               | 152 +++++++++++++++++++++++++++------
 t/t1308-config-set.sh                  |  21 +++++
 t/t4055-diff-context.sh                |   2 +-
 test-config.c                          |  10 +++
 7 files changed, 200 insertions(+), 30 deletions(-)

-- 
1.9.0.GIT

-- 8< --
diff --git a/Documentation/technical/api-config.txt b/Documentation/technical/api-config.txt
index e7ec7cc..d6a2c39 100644
--- a/Documentation/technical/api-config.txt
+++ b/Documentation/technical/api-config.txt
@@ -160,6 +160,13 @@ as well as retrieval for the queried variable, including:
 	Dies printing the line number and the file name of the highest
 	priority value for the configuration variable `key`.
 
+`void git_die_config_linenr(const char *key, const char *filename, int linenr)`::
+
+	Helper function which formats the die error message according to the
+	parameters entered. Used by `git_die_config()`. It can be used by callers
+	handling `git_config_get_value_multi()` to print the correct error message
+	for the desired value.
+
 See test-config.c for usage examples.
 
 Value Parsing Helpers
diff --git a/cache.h b/cache.h
index 243f618..ff17889 100644
--- a/cache.h
+++ b/cache.h
@@ -1407,6 +1407,7 @@ extern int git_config_get_bool_or_int(const char *key, int *is_bool, int *dest);
 extern int git_config_get_maybe_bool(const char *key, int *dest);
 extern int git_config_get_pathname(const char *key, const char **dest);
 extern void git_die_config(const char *key);
+extern void git_die_config_linenr(const char *key, const char *filename, int linenr);
 
 extern int committer_ident_sufficiently_given(void);
 extern int author_ident_sufficiently_given(void);
diff --git a/config.c b/config.c
index 15fcd91..cf9124f 100644
--- a/config.c
+++ b/config.c
@@ -461,9 +461,9 @@ static int git_parse_source(config_fn_t fn, void *data)
 			break;
 	}
 	if (cf->die_on_error)
-		die("bad config file line %d in %s", cf->linenr, cf->name);
+		die(_("bad config file line %d in %s"), cf->linenr, cf->name);
 	else
-		return error("bad config file line %d in %s", cf->linenr, cf->name);
+		return error(_("bad config file line %d in %s"), cf->linenr, cf->name);
 }
 
 static int parse_unit_factor(const char *end, uintmax_t *val)
@@ -579,9 +579,9 @@ static void die_bad_number(const char *name, const char *value)
 		value = "";
 
 	if (cf && cf->name)
-		die("bad numeric config value '%s' for '%s' in %s: %s",
+		die(_("bad numeric config value '%s' for '%s' in %s: %s"),
 		    value, name, cf->name, reason);
-	die("bad numeric config value '%s' for '%s': %s", value, name, reason);
+	die(_("bad numeric config value '%s' for '%s': %s"), value, name, reason);
 }
 
 int git_config_int(const char *name, const char *value)
@@ -666,7 +666,7 @@ int git_config_pathname(const char **dest, const char *var, const char *value)
 		return config_error_nonbool(var);
 	*dest = expand_user_path(value);
 	if (!*dest)
-		die("Failed to expand user dir in: '%s'", value);
+		die(_("failed to expand user dir in: '%s'"), value);
 	return 0;
 }
 
@@ -744,7 +744,7 @@ static int git_default_core_config(const char *var, const char *value)
 		if (level == -1)
 			level = Z_DEFAULT_COMPRESSION;
 		else if (level < 0 || level > Z_BEST_COMPRESSION)
-			die("bad zlib compression level %d", level);
+			die(_("bad zlib compression level %d"), level);
 		zlib_compression_level = level;
 		zlib_compression_seen = 1;
 		return 0;
@@ -755,7 +755,7 @@ static int git_default_core_config(const char *var, const char *value)
 		if (level == -1)
 			level = Z_DEFAULT_COMPRESSION;
 		else if (level < 0 || level > Z_BEST_COMPRESSION)
-			die("bad zlib compression level %d", level);
+			die(_("bad zlib compression level %d"), level);
 		core_compression_level = level;
 		core_compression_seen = 1;
 		if (!zlib_compression_seen)
@@ -877,7 +877,7 @@ static int git_default_core_config(const char *var, const char *value)
 		else if (!strcmp(value, "link"))
 			object_creation_mode = OBJECT_CREATION_USES_HARDLINKS;
 		else
-			die("Invalid mode for object creation: %s", value);
+			die(_("invalid mode for object creation: %s"), value);
 		return 0;
 	}
 
@@ -1177,7 +1177,7 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config)
 
 	switch (git_config_from_parameters(fn, data)) {
 	case -1: /* error */
-		die("unable to parse command-line config");
+		die(_("unable to parse command-line config"));
 		break;
 	case 0: /* found nothing */
 		break;
@@ -1260,13 +1260,7 @@ static void configset_iter(struct config_set *cs, config_fn_t fn, void *data)
 		values = &entry->value_list;
 		if (fn(entry->key, values->items[value_index].string, data) < 0) {
 			kv_info = values->items[value_index].util;
-			if (!kv_info->linenr)
-				die(_("unable to parse '%s' from command-line config"), entry->key);
-			else
-				die(_("bad config variable '%s' at file line %d in %s"),
-					entry->key,
-					kv_info->linenr,
-					kv_info->filename);
+			git_die_config_linenr(entry->key, kv_info->filename, kv_info->linenr);
 		}
 	}
 }
@@ -1569,20 +1563,27 @@ int git_config_get_pathname(const char *key, const char **dest)
 	return ret;
 }
 
+NORETURN
+void git_die_config_linenr(const char *key, const char *filename, int linenr)
+{
+	if (!linenr)
+		die(_("unable to parse '%s' from command-line config"), key);
+	else
+		die(_("bad config variable '%s' at file line %d in %s"),
+			key,
+			linenr,
+			filename);
+}
+
+NORETURN
 void git_die_config(const char *key)
 {
 	const struct string_list *values;
 	struct key_value_info *kv_info;
 	values = git_config_get_value_multi(key);
 	kv_info = values->items[values->nr - 1].util;
-	if (!kv_info->linenr)
-		die(_("unable to parse '%s' from command-line config"), key);
-	else
-		die(_("bad config variable '%s' at file line %d in %s"),
-			key,
-			kv_info->linenr,
-			kv_info->filename);
- }
+	git_die_config_linenr(key, kv_info->filename, kv_info->linenr);
+}
 
 /*
  * Find all the stuff for git_config_set() below.
@@ -1617,7 +1618,7 @@ static int store_aux(const char *key, const char *value, void *cb)
 	case KEY_SEEN:
 		if (matches(key, value)) {
 			if (store.seen == 1 && store.multi_replace == 0) {
-				warning("%s has multiple values", key);
+				warning(_("%s has multiple values"), key);
 			}
 
 			ALLOC_GROW(store.offset, store.seen + 1,
-- 8< --

^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2014-08-05 16:42 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-01 17:05 [PATCH v7 0/8] Rewrite `git_config()` using config-set API Tanay Abhra
2014-08-01 17:05 ` [PATCH v7 1/8] config.c: mark error and warnings strings for translation Tanay Abhra
2014-08-01 17:05 ` [PATCH v7 2/8] config.c: fix accuracy of line number in errors Tanay Abhra
2014-08-04 13:41   ` Matthieu Moy
2014-08-01 17:05 ` [PATCH v7 3/8] add line number and file name info to `config_set` Tanay Abhra
2014-08-01 17:05 ` [PATCH v7 4/8] change `git_config()` return value to void Tanay Abhra
2014-08-01 17:05 ` [PATCH v7 5/8] config: add `git_die_config()` to the config-set API Tanay Abhra
2014-08-04 18:07   ` Junio C Hamano
2014-08-04 18:55     ` Tanay Abhra
2014-08-04 20:04       ` Matthieu Moy
2014-08-05 14:55         ` Tanay Abhra
2014-08-05 15:15           ` Matthieu Moy
2014-08-05 16:42             ` Junio C Hamano
2014-08-04 20:52       ` Junio C Hamano
2014-08-01 17:05 ` [PATCH v7 6/8] rewrite git_config() to use " Tanay Abhra
2014-08-01 17:05 ` [PATCH v7 7/8] add a test for semantic errors in config files Tanay Abhra
2014-08-04 18:13   ` Junio C Hamano
2014-08-01 17:05 ` [PATCH v7 8/8] add tests for `git_config_get_string_const()` Tanay Abhra
2014-08-04 13:43 ` [PATCH v7 0/8] Rewrite `git_config()` using config-set API Matthieu Moy

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.