annotated_commit.h 1.24 KB
Newer Older
1 2 3 4 5 6 7 8 9
/*
 * 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__

10 11
#include "common.h"

12 13
#include "oidarray.h"

14 15
#include "git2/oid.h"

16 17 18 19 20 21 22 23 24 25 26
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.
 */
27
struct git_annotated_commit {
28 29 30
	git_annotated_commit_t type;

	/* real commit */
31
	git_commit *commit;
32 33 34 35 36
	git_tree *tree;

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

38 39 40 41 42
	/* how this commit was looked up */
	const char *description;

	const char *ref_name;
	const char *remote_url;
43 44 45 46

	char id_str[GIT_OID_HEXSZ+1];
};

47 48
extern int git_annotated_commit_from_head(git_annotated_commit **out,
	git_repository *repo);
49 50
extern int git_annotated_commit_from_commit(git_annotated_commit **out,
	git_commit *commit);
51

52
#endif