@@ -281,3 +281,40 @@ very welcome.
281281- Language: sh
282282- Difficulty: medium
283283- Possible mentors: Michael Haggerty
284+
285+ ### git configuration API improvements
286+
287+ There are many places in Git that need to read a configuration value.
288+ Currently, each such site calls ` git_config() ` , which reads and parses
289+ the configuration files every time that it is called. This is
290+ wasteful, because it results in the configuration files being
291+ processed multiple times during a single ` git ` invocation. It also
292+ prevents the implementation of potential new features, like adding
293+ syntax to allow a configuration file to unset a previously-set value.
294+
295+ This goal of this project is to make configuration work as follows:
296+
297+ * Read the configuration from files once and cache the results in an
298+ appropriate data structure in memory.
299+
300+ * Change ` git_config() ` to iterate through the pre-read values in
301+ memory rather than re-reading the configuration files.
302+
303+ * Add new API calls that allow the cache to be inquired easily and
304+ efficiently. Rewrite other functions like ` git_config_int() ` to be
305+ cache-aware.
306+
307+ * Rewrite callers to use the new API wherever possible.
308+
309+ You will need to consider how to handle other config API entry points
310+ like ` git_config_early() ` and ` git_config_from_file() ` , as well as how
311+ to invalidate the cache correctly in the case that the configuration
312+ is changed while ` git ` is executing.
313+
314+ See
315+ [ this mailing list thread] ( http://article.gmane.org/gmane.comp.version-control.git/242952 )
316+ for some discussion about this and related ideas.
317+
318+ - Language: C
319+ - Difficulty: medium
320+ - Possible mentors: Michael Haggerty, Matthieu Moy, Jeff King
0 commit comments