Raw
1 #define USE_THE_REPOSITORY_VARIABLE
2
3 #include "test-tool.h"
4 #include "setup.h"
5 #include "userdiff.h"
6 #include "config.h"
7
8 static int driver_cb(struct userdiff_driver *driver,
9 enum userdiff_driver_type type, void *priv)
10 {
11 enum userdiff_driver_type *want_type = priv;
12 if (type & *want_type && driver->funcname.pattern)
13 puts(driver->name);
14 return 0;
15 }
16
17 static int cmd__userdiff_config(const char *var, const char *value,
18 const struct config_context *ctx UNUSED,
19 void *cb UNUSED)
20 {
21 if (userdiff_config(var, value) < 0)
22 return -1;
23 return 0;
24 }
25
26 int cmd__userdiff(int argc, const char **argv)
27 {
28 enum userdiff_driver_type want = 0;
29 if (argc != 2)
30 return 1;
31
32 if (!strcmp(argv[1], "list-drivers"))
33 want = (USERDIFF_DRIVER_TYPE_BUILTIN |
34 USERDIFF_DRIVER_TYPE_CUSTOM);
35 else if (!strcmp(argv[1], "list-builtin-drivers"))
36 want = USERDIFF_DRIVER_TYPE_BUILTIN;
37 else if (!strcmp(argv[1], "list-custom-drivers"))
38 want = USERDIFF_DRIVER_TYPE_CUSTOM;
39 else
40 return error("unknown argument %s", argv[1]);
41
42 if (want & USERDIFF_DRIVER_TYPE_CUSTOM) {
43 setup_git_directory(the_repository);
44 repo_config(the_repository, cmd__userdiff_config, NULL);
45 }
46
47 for_each_userdiff_driver(driver_cb, &want);
48
49 return 0;
50 }