Merge branch 'jk/parse-config-key-cleanup' into maint

The "parse_config_key()" API function has been cleaned up.

* jk/parse-config-key-cleanup:
  parse_hide_refs_config: tell parse_config_key we don't want a subsection
  parse_config_key: allow matching single-level config
  parse_config_key: use skip_prefix instead of starts_with
  refs: parse_hide_refs_config to use parse_config_key
This commit is contained in:
Junio C Hamano 2017-03-28 13:52:18 -07:00
Родитель 8f9aeb0d36 ad8c7cdadd
Коммит c772d1bcdc
3 изменённых файлов: 16 добавлений и 10 удалений

Просмотреть файл

@ -1816,8 +1816,11 @@ extern int git_config_include(const char *name, const char *value, void *data);
*
* (i.e., what gets handed to a config_fn_t). The caller provides the section;
* we return -1 if it does not match, 0 otherwise. The subsection and key
* out-parameters are filled by the function (and subsection is NULL if it is
* out-parameters are filled by the function (and *subsection is NULL if it is
* missing).
*
* If the subsection pointer-to-pointer passed in is NULL, returns 0 only if
* there is no subsection at all.
*/
extern int parse_config_key(const char *var,
const char *section,

Просмотреть файл

@ -2540,11 +2540,10 @@ int parse_config_key(const char *var,
const char **subsection, int *subsection_len,
const char **key)
{
int section_len = strlen(section);
const char *dot;
/* Does it start with "section." ? */
if (!starts_with(var, section) || var[section_len] != '.')
if (!skip_prefix(var, section, &var) || *var != '.')
return -1;
/*
@ -2556,12 +2555,16 @@ int parse_config_key(const char *var,
*key = dot + 1;
/* Did we have a subsection at all? */
if (dot == var + section_len) {
if (dot == var) {
if (subsection) {
*subsection = NULL;
*subsection_len = 0;
}
}
else {
*subsection = var + section_len + 1;
if (!subsection)
return -1;
*subsection = var + 1;
*subsection_len = dot - *subsection;
}

6
refs.c
Просмотреть файл

@ -1034,10 +1034,10 @@ static struct string_list *hide_refs;
int parse_hide_refs_config(const char *var, const char *value, const char *section)
{
const char *key;
if (!strcmp("transfer.hiderefs", var) ||
/* NEEDSWORK: use parse_config_key() once both are merged */
(starts_with(var, section) && var[strlen(section)] == '.' &&
!strcmp(var + strlen(section), ".hiderefs"))) {
(!parse_config_key(var, section, NULL, NULL, &key) &&
!strcmp(key, "hiderefs"))) {
char *ref;
int len;