#include "builtin.h"
#include "cache.h"
#include "refs.h"

static const char git_symbolic_ref_usage[] =
"git-symbolic-ref [-q] [-m <reason>] name [ref]";

static void check_symref(const char *HEAD, int quiet)
{
	unsigned char sha1[20];
	int flag;
	const char *refs_heads_master = resolve_ref(HEAD, sha1, 0, &flag);

	if (!refs_heads_master)
		die("No such ref: %s", HEAD);
	else if (!(flag & REF_ISSYMREF)) {
		if (!quiet)
			die("ref %s is not a symbolic ref", HEAD);
		else
			exit(1);
	}
	puts(refs_heads_master);
}

int cmd_symbolic_ref(int argc, const char **argv, const char *prefix)
{
	int quiet = 0;
	const char *msg = NULL;

	git_config(git_default_config);

	while (1 < argc) {
		const char *arg = argv[1];
		if (arg[0] != '-')
			break;
		else if (!strcmp("-q", arg))
			quiet = 1;
		else if (!strcmp("-m", arg)) {
			argc--;
			argv++;
			if (argc <= 1)
				break;
			msg = argv[1];
			if (!*msg)
				die("Refusing to perform update with empty message");
		}
		else if (!strcmp("--", arg)) {
			argc--;
			argv++;
			break;
		}
		else
			die("unknown option %s", arg);
		argc--;
		argv++;
	}

	switch (argc) {
	case 2:
		check_symref(argv[1], quiet);
		break;
	case 3:
		create_symref(argv[1], argv[2], msg);
		break;
	default:
		usage(git_symbolic_ref_usage);
	}
	return 0;
}
