]> git.proxmox.com Git - libgit2.git/blame - tests/odb/foreach.c
Fixed merge REUC test for big-endian 64-bit
[libgit2.git] / tests / odb / foreach.c
CommitLineData
521aedad
CMN
1#include "clar_libgit2.h"
2#include "odb.h"
3#include "git2/odb_backend.h"
4#include "pack.h"
ee311907 5#include "buffer.h"
521aedad
CMN
6
7static git_odb *_odb;
8static git_repository *_repo;
521aedad 9
521aedad
CMN
10void test_odb_foreach__cleanup(void)
11{
12 git_odb_free(_odb);
13 git_repository_free(_repo);
81f73a87
VM
14
15 _odb = NULL;
16 _repo = NULL;
521aedad
CMN
17}
18
c3fb7d04 19static int foreach_cb(const git_oid *oid, void *data)
521aedad 20{
25e0b157
RB
21 int *nobj = data;
22 (*nobj)++;
521aedad 23
25e0b157 24 GIT_UNUSED(oid);
521aedad
CMN
25
26 return 0;
27}
28
1d733b57 29/*
83e1efbf 30 * $ git --git-dir tests/resources/testrepo.git count-objects --verbose
24cb87e2 31 * count: 47
32 * size: 4
1d733b57 33 * in-pack: 1640
34 * packs: 3
35 * size-pack: 425
36 * prune-packable: 0
37 * garbage: 0
38 */
521aedad
CMN
39void test_odb_foreach__foreach(void)
40{
25e0b157
RB
41 int nobj = 0;
42
507523c3
CMN
43 cl_git_pass(git_repository_open(&_repo, cl_fixture("testrepo.git")));
44 git_repository_odb(&_odb, _repo);
45
25e0b157 46 cl_git_pass(git_odb_foreach(_odb, foreach_cb, &nobj));
24cb87e2 47 cl_assert_equal_i(47 + 1640, nobj); /* count + in-pack */
521aedad 48}
507523c3
CMN
49
50void test_odb_foreach__one_pack(void)
51{
52 git_odb_backend *backend = NULL;
25e0b157 53 int nobj = 0;
507523c3
CMN
54
55 cl_git_pass(git_odb_new(&_odb));
56 cl_git_pass(git_odb_backend_one_pack(&backend, cl_fixture("testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx")));
57 cl_git_pass(git_odb_add_backend(_odb, backend, 1));
58 _repo = NULL;
59
25e0b157 60 cl_git_pass(git_odb_foreach(_odb, foreach_cb, &nobj));
507523c3
CMN
61 cl_assert(nobj == 1628);
62}
5dca2010 63
c3fb7d04 64static int foreach_stop_cb(const git_oid *oid, void *data)
5dca2010 65{
25e0b157
RB
66 int *nobj = data;
67 (*nobj)++;
5dca2010 68
25e0b157 69 GIT_UNUSED(oid);
5dca2010 70
25e0b157 71 return (*nobj == 1000) ? -321 : 0;
5dca2010
RB
72}
73
74void test_odb_foreach__interrupt_foreach(void)
75{
25e0b157
RB
76 int nobj = 0;
77
81f73a87
VM
78 cl_git_pass(git_repository_open(&_repo, cl_fixture("testrepo.git")));
79 git_repository_odb(&_odb, _repo);
80
25e0b157 81 cl_assert_equal_i(-321, git_odb_foreach(_odb, foreach_stop_cb, &nobj));
5dca2010
RB
82 cl_assert(nobj == 1000);
83}
ee311907
CMN
84
85void test_odb_foreach__files_in_objects_dir(void)
86{
87 git_repository *repo;
88 git_odb *odb;
89 git_buf buf = GIT_BUF_INIT;
90 size_t nobj = 0;
91
92 cl_fixture_sandbox("testrepo.git");
93 cl_git_pass(git_repository_open(&repo, "testrepo.git"));
94
95 cl_git_pass(git_buf_printf(&buf, "%s/objects/somefile", git_repository_path(repo)));
ee311907 96 cl_git_mkfile(buf.ptr, "");
430866d2 97 git_buf_free(&buf);
ee311907
CMN
98
99 cl_git_pass(git_repository_odb(&odb, repo));
100 cl_git_pass(git_odb_foreach(odb, foreach_cb, &nobj));
101 cl_assert_equal_i(47 + 1640, nobj); /* count + in-pack */
102
103 git_odb_free(odb);
104 git_repository_free(repo);
105 cl_fixture_cleanup("testrepo.git");
106}