]> git.proxmox.com Git - libgit2.git/blob - src/commit_list.h
Refresh patches
[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 "common.h"
11
12 #include "git2/oid.h"
13
14 #define PARENT1 (1 << 0)
15 #define PARENT2 (1 << 1)
16 #define RESULT (1 << 2)
17 #define STALE (1 << 3)
18 #define ALL_FLAGS (PARENT1 | PARENT2 | STALE | RESULT)
19
20 #define PARENTS_PER_COMMIT 2
21 #define COMMIT_ALLOC \
22 (sizeof(git_commit_list_node) + PARENTS_PER_COMMIT * sizeof(git_commit_list_node *))
23
24 #define FLAG_BITS 4
25
26 typedef struct git_commit_list_node {
27 git_oid oid;
28 int64_t time;
29 uint32_t generation;
30 unsigned int seen:1,
31 uninteresting:1,
32 topo_delay:1,
33 parsed:1,
34 added:1,
35 flags : FLAG_BITS;
36
37 uint16_t in_degree;
38 uint16_t out_degree;
39
40 struct git_commit_list_node **parents;
41 } git_commit_list_node;
42
43 typedef struct git_commit_list {
44 git_commit_list_node *item;
45 struct git_commit_list *next;
46 } git_commit_list;
47
48 git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk);
49 int git_commit_list_generation_cmp(const void *a, const void *b);
50 int git_commit_list_time_cmp(const void *a, const void *b);
51 void git_commit_list_free(git_commit_list **list_p);
52 git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p);
53 git_commit_list *git_commit_list_insert_by_date(git_commit_list_node *item, git_commit_list **list_p);
54 int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit);
55 git_commit_list_node *git_commit_list_pop(git_commit_list **stack);
56
57 #endif