#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();
		repo_config(the_repository, cmd__userdiff_config, NULL);
	}

	for_each_userdiff_driver(driver_cb, &want);

	return 0;
}
