commit_list.h 1.53 KB
Newer Older
1
/*
Edward Thomson committed
2
 * Copyright (C) the libgit2 contributors. All rights reserved.
3 4 5 6 7 8 9 10 11 12 13 14 15
 *
 * 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_commit_list_h__
#define INCLUDE_commit_list_h__

#include "git2/oid.h"

#define PARENT1  (1 << 0)
#define PARENT2  (1 << 1)
#define RESULT   (1 << 2)
#define STALE    (1 << 3)
16
#define ALL_FLAGS (PARENT1 | PARENT2 | STALE | RESULT)
17 18 19 20 21

#define PARENTS_PER_COMMIT	2
#define COMMIT_ALLOC \
	(sizeof(git_commit_list_node) + PARENTS_PER_COMMIT * sizeof(git_commit_list_node *))

22 23
#define FLAG_BITS 4

24 25
typedef struct git_commit_list_node {
	git_oid oid;
26
	int64_t time;
27 28 29 30
	unsigned int seen:1,
			 uninteresting:1,
			 topo_delay:1,
			 parsed:1,
31
			 added:1,
32
			 flags : FLAG_BITS;
33 34 35 36 37 38 39 40 41 42 43 44 45

	unsigned short in_degree;
	unsigned short out_degree;

	struct git_commit_list_node **parents;
} git_commit_list_node;

typedef struct git_commit_list {
	git_commit_list_node *item;
	struct git_commit_list *next;
} git_commit_list;

git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk);
46
int git_commit_list_time_cmp(const void *a, const void *b);
47 48 49 50 51 52 53
void git_commit_list_free(git_commit_list **list_p);
git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p);
git_commit_list *git_commit_list_insert_by_date(git_commit_list_node *item, git_commit_list **list_p);
int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit);
git_commit_list_node *git_commit_list_pop(git_commit_list **stack);

#endif