summaryrefslogtreecommitdiff
path: root/src/revwalk.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/revwalk.h')
-rw-r--r--src/revwalk.h58
1 files changed, 50 insertions, 8 deletions
diff --git a/src/revwalk.h b/src/revwalk.h
index 270eb8c6b..d97e5ce8c 100644
--- a/src/revwalk.h
+++ b/src/revwalk.h
@@ -5,21 +5,63 @@
#include "git/revwalk.h"
#include "commit.h"
+#include "repository.h"
+#include "hashtable.h"
-struct git_revpool {
- git_odb *db;
+struct git_revwalk_commit;
- git_commit_list iterator;
- git_commit *(*next_commit)(git_commit_list *);
+typedef struct git_revwalk_listnode {
+ struct git_revwalk_commit *walk_commit;
+ struct git_revwalk_listnode *next;
+ struct git_revwalk_listnode *prev;
+} git_revwalk_listnode;
- git_commit_list roots;
- git_revpool_table *objects;
+typedef struct git_revwalk_list {
+ struct git_revwalk_listnode *head;
+ struct git_revwalk_listnode *tail;
+ size_t size;
+} git_revwalk_list;
+
+
+struct git_revwalk_commit {
+
+ git_commit *commit_object;
+ git_revwalk_list parents;
+
+ unsigned short in_degree;
+ unsigned seen:1,
+ uninteresting:1,
+ topo_delay:1,
+ flags:25;
+};
+
+typedef struct git_revwalk_commit git_revwalk_commit;
+
+struct git_revwalk {
+ git_repository *repo;
+
+ git_hashtable *commits;
+ git_revwalk_list iterator;
+
+ git_revwalk_commit *(*next)(git_revwalk_list *);
unsigned walking:1;
unsigned int sorting;
};
-void gitrp__prepare_walk(git_revpool *pool);
-int gitrp__enroot(git_revpool *pool, git_commit *commit);
+
+void git_revwalk__prepare_walk(git_revwalk *walk);
+int git_revwalk__enroot(git_revwalk *walk, git_commit *commit);
+
+int git_revwalk_list_push_back(git_revwalk_list *list, git_revwalk_commit *commit);
+int git_revwalk_list_push_front(git_revwalk_list *list, git_revwalk_commit *obj);
+
+git_revwalk_commit *git_revwalk_list_pop_back(git_revwalk_list *list);
+git_revwalk_commit *git_revwalk_list_pop_front(git_revwalk_list *list);
+
+void git_revwalk_list_clear(git_revwalk_list *list);
+
+void git_revwalk_list_timesort(git_revwalk_list *list);
+void git_revwalk_list_toposort(git_revwalk_list *list);
#endif /* INCLUDE_revwalk_h__ */