]>
Commit | Line | Data |
---|---|---|
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 | |
7 | static git_odb *_odb; | |
8 | static git_repository *_repo; | |
521aedad | 9 | |
521aedad CMN |
10 | void 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 | 19 | static 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 |
39 | void 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 | |
50 | void 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 | 64 | static 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 | ||
74 | void 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 | |
85 | void 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 | } |