/*
 * Copyright (C) the libgit2 contributors. All rights reserved.
 *
 * This file is part of libgit2, distributed under the GNU GPL v2 with
 * a Linking Exception. For full terms see the included COPYING file.
 */
#ifndef INCLUDE_annotated_commit_h__
#define INCLUDE_annotated_commit_h__

#include "oidarray.h"

#include "git2/oid.h"

typedef enum {
	GIT_ANNOTATED_COMMIT_REAL = 1,
	GIT_ANNOTATED_COMMIT_VIRTUAL = 2,
} git_annotated_commit_t;

/**
 * Internal structure for merge inputs.  An annotated commit is generally
 * "real" and backed by an actual commit in the repository, but merge will
 * internally create "virtual" commits that are in-memory intermediate
 * commits backed by an index.
 */
struct git_annotated_commit {
	git_annotated_commit_t type;

	/* real commit */
	git_commit *commit;
	git_tree *tree;

	/* virtual commit structure */
	git_index *index;
	git_array_oid_t parents;

	char *ref_name;
	char *remote_url;

	char id_str[GIT_OID_HEXSZ+1];
};

extern int git_annotated_commit_from_head(git_annotated_commit **out,
	git_repository *repo);
extern int git_annotated_commit_from_commit(git_annotated_commit **out,
	git_commit *commit);

#endif
