]> git.proxmox.com Git - libgit2.git/blame - tests-clar/pack/packbuilder.c
Tests should clean up after themselves
[libgit2.git] / tests-clar / pack / packbuilder.c
CommitLineData
0a32dca5
MS
1#include "clar_libgit2.h"
2#include "iterator.h"
3#include "vector.h"
4
5static git_repository *_repo;
6static git_revwalk *_revwalker;
7static git_packbuilder *_packbuilder;
8static git_indexer *_indexer;
9static git_vector _commits;
9094d30b 10static int _commits_is_initialized;
0a32dca5
MS
11
12void 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
21void 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 47static 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
75void 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
87static git_transfer_progress stats;
88static 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
97void 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}