]>
Commit | Line | Data |
---|---|---|
0a32dca5 MS |
1 | #include "clar_libgit2.h" |
2 | #include "iterator.h" | |
3 | #include "vector.h" | |
4 | ||
5 | static git_repository *_repo; | |
6 | static git_revwalk *_revwalker; | |
7 | static git_packbuilder *_packbuilder; | |
8 | static git_indexer *_indexer; | |
9 | static git_vector _commits; | |
9094d30b | 10 | static int _commits_is_initialized; |
0a32dca5 MS |
11 | |
12 | void test_pack_packbuilder__initialize(void) | |
13 | { | |
14 | cl_git_pass(git_repository_open(&_repo, cl_fixture("testrepo.git"))); | |
15 | cl_git_pass(git_revwalk_new(&_revwalker, _repo)); | |
16 | cl_git_pass(git_packbuilder_new(&_packbuilder, _repo)); | |
17 | cl_git_pass(git_vector_init(&_commits, 0, NULL)); | |
9094d30b | 18 | _commits_is_initialized = 1; |
0a32dca5 MS |
19 | } |
20 | ||
21 | void test_pack_packbuilder__cleanup(void) | |
22 | { | |
23 | git_oid *o; | |
24 | unsigned int i; | |
25 | ||
9094d30b SC |
26 | if (_commits_is_initialized) { |
27 | _commits_is_initialized = 0; | |
28 | git_vector_foreach(&_commits, i, o) { | |
29 | git__free(o); | |
30 | } | |
31 | git_vector_free(&_commits); | |
0a32dca5 | 32 | } |
9094d30b | 33 | |
0a32dca5 | 34 | git_packbuilder_free(_packbuilder); |
9094d30b SC |
35 | _packbuilder = NULL; |
36 | ||
0a32dca5 | 37 | git_revwalk_free(_revwalker); |
9094d30b SC |
38 | _revwalker = NULL; |
39 | ||
0a32dca5 | 40 | git_indexer_free(_indexer); |
3dfed9cb | 41 | _indexer = NULL; |
9094d30b | 42 | |
0a32dca5 | 43 | git_repository_free(_repo); |
9094d30b | 44 | _repo = NULL; |
0a32dca5 MS |
45 | } |
46 | ||
3dfed9cb | 47 | static void seed_packbuilder(void) |
0a32dca5 | 48 | { |
0a32dca5 MS |
49 | git_oid oid, *o; |
50 | unsigned int i; | |
51 | ||
52 | git_revwalk_sorting(_revwalker, GIT_SORT_TIME); | |
53 | cl_git_pass(git_revwalk_push_ref(_revwalker, "HEAD")); | |
54 | ||
55 | while (git_revwalk_next(&oid, _revwalker) == 0) { | |
56 | o = git__malloc(GIT_OID_RAWSZ); | |
57 | cl_assert(o != NULL); | |
58 | git_oid_cpy(o, &oid); | |
59 | cl_git_pass(git_vector_insert(&_commits, o)); | |
60 | } | |
61 | ||
62 | git_vector_foreach(&_commits, i, o) { | |
63 | cl_git_pass(git_packbuilder_insert(_packbuilder, o, NULL)); | |
64 | } | |
65 | ||
66 | git_vector_foreach(&_commits, i, o) { | |
67 | git_object *obj; | |
68 | cl_git_pass(git_object_lookup(&obj, _repo, o, GIT_OBJ_COMMIT)); | |
69 | cl_git_pass(git_packbuilder_insert_tree(_packbuilder, | |
cfbe4be3 | 70 | git_commit_tree_id((git_commit *)obj))); |
0a32dca5 MS |
71 | git_object_free(obj); |
72 | } | |
3dfed9cb CMN |
73 | } |
74 | ||
75 | void test_pack_packbuilder__create_pack(void) | |
76 | { | |
77 | git_transfer_progress stats; | |
0a32dca5 | 78 | |
3dfed9cb | 79 | seed_packbuilder(); |
0a32dca5 MS |
80 | cl_git_pass(git_packbuilder_write(_packbuilder, "testpack.pack")); |
81 | ||
82 | cl_git_pass(git_indexer_new(&_indexer, "testpack.pack")); | |
83 | cl_git_pass(git_indexer_run(_indexer, &stats)); | |
84 | cl_git_pass(git_indexer_write(_indexer)); | |
85 | } | |
3dfed9cb CMN |
86 | |
87 | static git_transfer_progress stats; | |
88 | static int foreach_cb(void *buf, size_t len, void *payload) | |
89 | { | |
90 | git_indexer_stream *idx = (git_indexer_stream *) payload; | |
91 | ||
92 | cl_git_pass(git_indexer_stream_add(idx, buf, len, &stats)); | |
93 | ||
94 | return 0; | |
95 | } | |
96 | ||
97 | void test_pack_packbuilder__foreach(void) | |
98 | { | |
99 | git_indexer_stream *idx; | |
100 | ||
101 | seed_packbuilder(); | |
102 | cl_git_pass(git_indexer_stream_new(&idx, ".", NULL, NULL)); | |
103 | cl_git_pass(git_packbuilder_foreach(_packbuilder, foreach_cb, idx)); | |
104 | cl_git_pass(git_indexer_stream_finalize(idx, &stats)); | |
105 | git_indexer_stream_free(idx); | |
106 | } |