On Wed, Jul 23, 2014 at 2:42 PM, Tanay Abhra <tanayabh@gmail.com> wrote:
Show 62 quoted lines
> same name.
>
> Also `funcname` variable is deprecated and not documented properly.
> `xfuncname` is mentioned in the docs and takes precedence over `funcname`.
> Instead of removing `funcname` variable, enforce `xfuncname` precedence over
> `funcname` when the variables have the same subsection. Remove dependency
> that required values to be fed to userdiff_config() in parsing order for the
> test to succeed.
>
> Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
> ---
> Note: this the only test that failed for the new git_config() rewrite.
>
> userdiff.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/userdiff.c b/userdiff.c
> index fad52d6..a51bc89 100644
> --- a/userdiff.c
> +++ b/userdiff.c
> @@ -2,6 +2,7 @@
> #include "userdiff.h"
> #include "cache.h"
> #include "attr.h"
> +#include "string-list.h"
>
> static struct userdiff_driver *drivers;
> static int ndrivers;
> @@ -211,9 +212,12 @@ int userdiff_config(const char *k, const char *v)
> struct userdiff_driver *drv;
> const char *name, *type;
> int namelen;
> + char *subsection = NULL;
> + static struct string_list xflag = STRING_LIST_INIT_DUP;
>
> if (parse_config_key(k, "diff", &name, &namelen, &type) || !name)
> return 0;
> + subsection = xstrndup(name, namelen);
>
> drv = userdiff_find_by_namelen(name, namelen);
> if (!drv) {
> @@ -224,10 +228,16 @@ int userdiff_config(const char *k, const char *v)
> drv->binary = -1;
> }
>
> - if (!strcmp(type, "funcname"))
> + if (!strcmp(type, "funcname") && !unsorted_string_list_has_string(&xflag, subsection)) {
> + free (subsection);
> return parse_funcname(&drv->funcname, k, v, 0);
> - if (!strcmp(type, "xfuncname"))
> + }
> + if (!strcmp(type, "xfuncname")) {
> + string_list_append(&xflag, subsection);
> + free (subsection);
> return parse_funcname(&drv->funcname, k, v, REG_EXTENDED);
> + }
> + free(subsection);
> if (!strcmp(type, "binary"))
> return parse_tristate(&drv->binary, k, v);
> if (!strcmp(type, "command"))
> --
> 1.9.0.GIT