Skip to content
  • Tanay Abhra's avatar
    add `config_set` API for caching config-like files · 3c8687a7
    Tanay Abhra authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Currently `git_config()` uses a callback mechanism and file rereads for
    config values. Due to this approach, it is not uncommon for the config
    files to be parsed several times during the run of a git program, with
    different callbacks picking out different variables useful to themselves.
    
    Add a `config_set`, that can be used to construct an in-memory cache for
    config-like files that the caller specifies (i.e., files like `.gitmodules`,
    `~/.gitconfig` etc.). Add two external functions `git_configset_get_value`
    and `git_configset_get_value_multi` for querying from the config sets.
    `git_configset_get_value` follows `last one wins` semantic (i.e. if there
    are multiple matches for the queried key in the files of the configset the
    value returned will be the last entry in `value_list`).
    `git_configset_get_value_multi` returns a list of values sorted in order of
    increasing priority (i.e. last match will be at the end of the list). Add
    type specific query functions like `git_configset_get_bool` and similar.
    
    Add a default `config_set`, `the_config_set` to cache all key-value pairs
    read from usual config files (repo specific .git/config, user wide
    ~/.gitconfig, XDG config and the global /etc/gitconfig). `the_config_set`
    is populated using `git_config()`.
    
    Add two external functions `git_config_get_value` and
    `git_config_get_value_multi` for querying in a non-callback manner from
    `the_config_set`. Also, add type specific query functions that are
    implemented as a thin wrapper around the `config_set` API.
    
    Signed-off-by: default avatarMatthieu Moy <Matthieu.Moy@imag.fr>
    Signed-off-by: default avatarTanay Abhra <tanayabh@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    3c8687a7