|  | #define USE_THE_REPOSITORY_VARIABLE | 
|  |  | 
|  | #include "test-tool.h" | 
|  | #include "setup.h" | 
|  | #include "userdiff.h" | 
|  | #include "config.h" | 
|  |  | 
|  | static int driver_cb(struct userdiff_driver *driver, | 
|  | enum userdiff_driver_type type, void *priv) | 
|  | { | 
|  | enum userdiff_driver_type *want_type = priv; | 
|  | if (type & *want_type && driver->funcname.pattern) | 
|  | puts(driver->name); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | static int cmd__userdiff_config(const char *var, const char *value, | 
|  | const struct config_context *ctx UNUSED, | 
|  | void *cb UNUSED) | 
|  | { | 
|  | if (userdiff_config(var, value) < 0) | 
|  | return -1; | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int cmd__userdiff(int argc, const char **argv) | 
|  | { | 
|  | enum userdiff_driver_type want = 0; | 
|  | if (argc != 2) | 
|  | return 1; | 
|  |  | 
|  | if (!strcmp(argv[1], "list-drivers")) | 
|  | want = (USERDIFF_DRIVER_TYPE_BUILTIN | | 
|  | USERDIFF_DRIVER_TYPE_CUSTOM); | 
|  | else if (!strcmp(argv[1], "list-builtin-drivers")) | 
|  | want = USERDIFF_DRIVER_TYPE_BUILTIN; | 
|  | else if (!strcmp(argv[1], "list-custom-drivers")) | 
|  | want = USERDIFF_DRIVER_TYPE_CUSTOM; | 
|  | else | 
|  | return error("unknown argument %s", argv[1]); | 
|  |  | 
|  | if (want & USERDIFF_DRIVER_TYPE_CUSTOM) { | 
|  | setup_git_directory(); | 
|  | git_config(cmd__userdiff_config, NULL); | 
|  | } | 
|  |  | 
|  | for_each_userdiff_driver(driver_cb, &want); | 
|  |  | 
|  | return 0; | 
|  | } |