Subject: [RFC] GSoC status update (config API improvements)

From: Tanay Abhra <[email-masked]>
Date: Tue, 29 Jul 2014 18:28:18 +0530

One month to go for GSoC to end and I am almost at the end of my project.
So what have we accomplished do far? Let's see,

1> Git config cache:

I have written a config cache which reads and caches the key/value pairs
in a hashmap. It is generalized as config-set which can also be used to read
config-like files (for example submodule config files).

Instead of the unwieldy git_config() callback process for querying, callers
can now use the new API to query config values in as straightforward manner.

for example, for querying "foo.frotz", we can just write,

	char *value;
	git_config_get_value("foo.frotz", &value);

Similar to git_config_get_value() there are helpers which do conversion to the
desired type (int or bool) as well as querying.

It is already in pu as "ta/config-set" and its latest iteration can be found
on [1].

2> git_config() now uses the caching layer underneath.

git_config() now uses the config-set API, thus preventing expensive rereads
of the configuration files during a git invocation.

It's almost polished and ready for pu. The latest iteration can be found on [2].

3> git_config() calls rewrites

Most of the git_config() calls in the code base can be rewritten as one liners using
the new config-set API.

Work has already started on it and can be seen on [3].

4> Tidy git configuration files

To be honest, I haven't started any real work on it, except brainstorming on it
for a little while. Basically it aims to correct the two broken tests in
t1300-repo-config.sh, caused by the deficiencies in git_config_set() which are,
section headers are left untouched, even when all the keys related to it have been
unset and adding a key into an empty section reuses the header .

5> Any new feature suggestions??

Other than the above, new features can be built on top of the new API.
Going through the previous mailing lists I could find one or two ideas, namely,

a> Unsetting previously set values
Local config files can be used to unset config values previously set in system
files. The user may not have the privilege to touch the system files so he can
leverage the new API to unset the previously set values.

Any suggestions for new features or improvements are welcome!

Also, I like to thank my mentors Matthieu and Ram for their suggestions
and timely review even when my patches were late. ;)

Cheers,
Tanay Abhra.

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