]> git.proxmox.com Git - libgit2.git/blob - src/commit_list.h
Merge pull request #2609 from linquize/describe-opts
[libgit2.git] / src / commit_list.h
1 /*
2 * Copyright (C) the libgit2 contributors. All rights reserved.
3 *
4 * This file is part of libgit2, distributed under the GNU GPL v2 with
5 * a Linking Exception. For full terms see the included COPYING file.
6 */
7 #ifndef INCLUDE_commit_list_h__
8 #define INCLUDE_commit_list_h__
9
10 #include "git2/oid.h"
11
12 #define PARENT1 (1 << 0)
13 #define PARENT2 (1 << 1)
14 #define RESULT (1 << 2)
15 #define STALE (1 << 3)
16
17 #define PARENTS_PER_COMMIT 2
18 #define COMMIT_ALLOC \
19 (sizeof(git_commit_list_node) + PARENTS_PER_COMMIT * sizeof(git_commit_list_node *))
20
21 #define FLAG_BITS 4
22
23 typedef struct git_commit_list_node {
24 git_oid oid;
25 uint32_t time;
26 unsigned int seen:1,
27 uninteresting:1,
28 topo_delay:1,
29 parsed:1,
30 flags : FLAG_BITS;
31
32 unsigned short in_degree;
33 unsigned short out_degree;
34
35 struct git_commit_list_node **parents;
36 } git_commit_list_node;
37
38 typedef struct git_commit_list {
39 git_commit_list_node *item;
40 struct git_commit_list *next;
41 } git_commit_list;
42
43 git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk);
44 int git_commit_list_time_cmp(const void *a, const void *b);
45 void git_commit_list_free(git_commit_list **list_p);
46 git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p);
47 git_commit_list *git_commit_list_insert_by_date(git_commit_list_node *item, git_commit_list **list_p);
48 int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit);
49 git_commit_list_node *git_commit_list_pop(git_commit_list **stack);
50
51 #endif