[RFC/PATCH 0/2] Git config cache & special querying api utilizing the cache
- From
Tanay Abhra <tanayabh@gmail.com>
- Date
- May 26, 2014, 17:33 UTC
- Message-ID
- <1401125601-18249-1-git-send-email-tanayabh@gmail.com>
Hi,
This is my first patch series for this year's GSoC. My project is "Git Config API improvements". The link of my proposal is appended below [1].
The aim of this patch series is to generate a cache for querying values from the config files in a non callback manner as the current method reads and parses the config files every time a value is queried for.
The cache is generated from hooking the update_cache function to the current parsing and callback mechanism in config.c. It is implemented as an hashmap using the hashmap-api with variables and its corresponding values list as its members. The values in the list are sorted in order of increasing priority. The cache is initialised in git_config_early() as it is the first time a `git_config` function is called during program startup. setup_git_directory_gently() calls git_config_early() which in turn reads every config file (local, user and global config files).
get_value() in config.c feeds variable and values into the callback function. Using this function as a hook, we update the cache. Also, we add two new functions to the config-api git_config_get_string() and git_config_get_string_multi() for querying in a non callback manner from the cache.
I have run the tests and debug the code and it works, but I have to add a few things,
1. Invalidity check: if a config file is written into, update the cache. I am using git_config_set_multivar_in_file() as an update hook.
2. Metadata about the variables and values. I have added only the file from each variable value pair comes in an upcoming series.
What else should I add or implement ;is my approach right?
[1] https://drive.google.com/file/d/0B4suZ-aHqDcnSUZJRXVTTnZUN1E/edit?usp=sharing
Cheers, Tanay Abhra.
Tanay Abhra (2): config: Add cache for config value querying config: Add new query functions to the api
Documentation/technical/api-config.txt | 19 ++++++ cache.h | 2 + config.c | 105 +++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+)
-- 1.9.0.GIT