git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 2/6] branch.c: replace `git_config()` with `git_config_get_string()`

From
Tanay Abhra <tanayabh@gmail.com>
Date
Jul 21, 2014, 18:11 UTC
Message-ID
<53CD57C3.4000806@gmail.com>
In-Reply-To
<xmqqiomqk2yu.fsf@gitster.dls.corp.google.com>
On 7/21/2014 11:29 PM, Junio C Hamano wrote:
Show 57 quoted lines
> Tanay Abhra <tanayabh@gmail.com> writes:
> 
>> Use `git_config_get_string()` instead of `git_config()` to take advantage of
>> the config-set API which provides a cleaner control flow.
>>
>> Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
>> ---
>>  branch.c | 24 ++++--------------------
>>  1 file changed, 4 insertions(+), 20 deletions(-)
>>
>> diff --git a/branch.c b/branch.c
>> index 46e8aa8..827307f 100644
>> --- a/branch.c
>> +++ b/branch.c
>> @@ -140,33 +140,17 @@ static int setup_tracking(const char *new_ref, const char *orig_ref,
>>  	return 0;
>>  }
>>  
>> -struct branch_desc_cb {
>> -	const char *config_name;
>> -	const char *value;
>> -};
>> -
>> -static int read_branch_desc_cb(const char *var, const char *value, void *cb)
>> -{
>> -	struct branch_desc_cb *desc = cb;
>> -	if (strcmp(desc->config_name, var))
>> -		return 0;
>> -	free((char *)desc->value);
>> -	return git_config_string(&desc->value, var, value);
>> -}
>> -
>>  int read_branch_desc(struct strbuf *buf, const char *branch_name)
>>  {
>> -	struct branch_desc_cb cb;
>> +	const char *v = NULL;
>>  	struct strbuf name = STRBUF_INIT;
>>  	strbuf_addf(&name, "branch.%s.description", branch_name);
>> -	cb.config_name = name.buf;
>> -	cb.value = NULL;
>> -	if (git_config(read_branch_desc_cb, &cb) < 0) {
>> +	if (git_config_get_string(name.buf, &v)) {
>>  		strbuf_release(&name);
>>  		return -1;
>>  	}
>> -	if (cb.value)
>> -		strbuf_addstr(buf, cb.value);
>> +	strbuf_addstr(buf, v);
>> +	free((char*)v);
> 
> In this cast, I smell an API mistake to insist an extra constness to
> the output parameter of git_config_get_string() in [3/4] of the
> previous series.  Unlike the underlying git_config_get_value(),
> which lets the caller peek into the internal cached copy, the caller
> of git_config_get_string() is given its own copy, and I do not
> offhand see a good reason to forbid the caller from modifying it.
>

I modeled git_config_get_string() on the previously existing API function git_config_string() with the signature, int git_config_string(const char **dest, const char *var, const char *value).

But after writing this series I do think there isn't a good reason to keep the constness in the new function also since the dest is given its own copy.

>>  	strbuf_release(&name);
>>  	return 0;
>>  }
Previous: Matthieu MoyNext: Tanay Abhra
Message 9 of 27 in “git_config callers rewritten with the new config cache API”
  1. 0/6 git_config callers rewritten with the new config cache APITanay Abhra, Jul 21, 2014
  2. 1/6 alias.c: replace `git_config()` with `git_config_get_string()`Tanay Abhra, Jul 21, 2014
  3. Matthieu MoyJul 21, 2014
  4. Ramsay JonesJul 21, 2014
  5. Samuel BronsonJul 31, 2014
  6. 2/6 branch.c: replace `git_config()` with `git_config_get_string()`Tanay Abhra, Jul 21, 2014
  7. Junio C HamanoJul 21, 2014
  8. Matthieu MoyJul 21, 2014
  9. Tanay AbhraJul 21, 2014
  10. 3/6 imap-send.c: replace `git_config()` with `git_config_get_*()` familyTanay Abhra, Jul 21, 2014
  11. Junio C HamanoJul 21, 2014
  12. 4/6 notes.c: replace `git_config()` with `git_config_get_value()`Tanay Abhra, Jul 21, 2014
  13. 5/6 pager.c: replace `git_config()` with `git_config_get_value()`Tanay Abhra, Jul 21, 2014
  14. 6/6 notes-util.c: replace `git_config()` with `git_config_get_value()`Tanay Abhra, Jul 21, 2014
  15. Jeff KingJul 22, 2014
  16. rewrite `git_default_config()` using config-set API functionsTanay Abhra, Jul 21, 2014
  17. Matthieu MoyJul 21, 2014
  18. Tanay AbhraJul 21, 2014
  19. Matthieu MoyJul 21, 2014
  20. Junio C HamanoJul 21, 2014
  21. Matthieu MoyJul 22, 2014
  22. Ramsay JonesJul 21, 2014
  23. Matthieu MoyJul 21, 2014
  24. Tanay AbhraJul 21, 2014
  25. Matthieu MoyJul 21, 2014
  26. Tanay AbhraJul 21, 2014
  27. Matthieu MoyJul 21, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.