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 unsigned int seen:1, 30 uninteresting:1, 31 topo_delay:1, 32 parsed:1, 33 added:1, 34 flags : FLAG_BITS; 35 36 uint16_t in_degree; 37 uint16_t out_degree; 38 39 struct git_commit_list_node **parents; 40 } git_commit_list_node; 41 42 typedef struct git_commit_list { 43 git_commit_list_node *item; 44 struct git_commit_list *next; 45 } git_commit_list; 46 47 git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk); 48 int git_commit_list_time_cmp(const void *a, const void *b); 49 void git_commit_list_free(git_commit_list **list_p); 50 git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p); 51 git_commit_list *git_commit_list_insert_by_date(git_commit_list_node *item, git_commit_list **list_p); 52 int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit); 53 git_commit_list_node *git_commit_list_pop(git_commit_list **stack); 54 55 #endif 56