]> git.proxmox.com Git - libgit2.git/blame - tests/libgit2/odb/backend/backend_helpers.c
Merge https://salsa.debian.org/debian/libgit2 into proxmox/bullseye
[libgit2.git] / tests / libgit2 / odb / backend / backend_helpers.c
CommitLineData
2add34d0
PS
1#include "clar_libgit2.h"
2#include "git2/sys/odb_backend.h"
3#include "backend_helpers.h"
4
6e010bb1
PS
5static int search_object(const fake_object **out, fake_backend *fake, const git_oid *oid, size_t len)
6{
c4cbb3b1 7 const fake_object *obj = fake->objects, *found = NULL;
6e010bb1
PS
8
9 while (obj && obj->oid) {
10 git_oid current_oid;
11
12 git_oid_fromstr(&current_oid, obj->oid);
13
14 if (git_oid_ncmp(&current_oid, oid, len) == 0) {
c4cbb3b1
PS
15 if (found)
16 return GIT_EAMBIGUOUS;
17 found = obj;
6e010bb1
PS
18 }
19
20 obj++;
21 }
22
c4cbb3b1
PS
23 if (found && out)
24 *out = found;
25
26 return found ? GIT_OK : GIT_ENOTFOUND;
6e010bb1
PS
27}
28
2add34d0
PS
29static int fake_backend__exists(git_odb_backend *backend, const git_oid *oid)
30{
31 fake_backend *fake;
32
2add34d0
PS
33 fake = (fake_backend *)backend;
34
35 fake->exists_calls++;
36
983e627d 37 return search_object(NULL, fake, oid, GIT_OID_HEXSZ) == GIT_OK;
2add34d0
PS
38}
39
b2e53f36
PS
40static int fake_backend__exists_prefix(
41 git_oid *out, git_odb_backend *backend, const git_oid *oid, size_t len)
42{
43 const fake_object *obj;
44 fake_backend *fake;
45 int error;
46
47 fake = (fake_backend *)backend;
48
49 fake->exists_prefix_calls++;
50
51 if ((error = search_object(&obj, fake, oid, len)) < 0)
52 return error;
53
54 if (out)
55 git_oid_fromstr(out, obj->oid);
56
57 return 0;
58}
59
2add34d0 60static int fake_backend__read(
ac3d33df 61 void **buffer_p, size_t *len_p, git_object_t *type_p,
2add34d0
PS
62 git_odb_backend *backend, const git_oid *oid)
63{
6e010bb1 64 const fake_object *obj;
2add34d0 65 fake_backend *fake;
c4cbb3b1 66 int error;
2add34d0 67
2add34d0
PS
68 fake = (fake_backend *)backend;
69
70 fake->read_calls++;
71
c4cbb3b1
PS
72 if ((error = search_object(&obj, fake, oid, GIT_OID_HEXSZ)) < 0)
73 return error;
74
75 *len_p = strlen(obj->content);
76 *buffer_p = git__strdup(obj->content);
ac3d33df 77 *type_p = GIT_OBJECT_BLOB;
2add34d0 78
c4cbb3b1 79 return 0;
2add34d0
PS
80}
81
82static int fake_backend__read_header(
ac3d33df 83 size_t *len_p, git_object_t *type_p,
2add34d0
PS
84 git_odb_backend *backend, const git_oid *oid)
85{
6e010bb1 86 const fake_object *obj;
2add34d0 87 fake_backend *fake;
c4cbb3b1 88 int error;
2add34d0 89
2add34d0
PS
90 fake = (fake_backend *)backend;
91
92 fake->read_header_calls++;
93
c4cbb3b1
PS
94 if ((error = search_object(&obj, fake, oid, GIT_OID_HEXSZ)) < 0)
95 return error;
2add34d0 96
c4cbb3b1 97 *len_p = strlen(obj->content);
ac3d33df 98 *type_p = GIT_OBJECT_BLOB;
c4cbb3b1
PS
99
100 return 0;
2add34d0
PS
101}
102
103static int fake_backend__read_prefix(
ac3d33df 104 git_oid *out_oid, void **buffer_p, size_t *len_p, git_object_t *type_p,
2add34d0
PS
105 git_odb_backend *backend, const git_oid *short_oid, size_t len)
106{
6e010bb1 107 const fake_object *obj;
2add34d0 108 fake_backend *fake;
c4cbb3b1 109 int error;
2add34d0 110
2add34d0
PS
111 fake = (fake_backend *)backend;
112
113 fake->read_prefix_calls++;
114
c4cbb3b1
PS
115 if ((error = search_object(&obj, fake, short_oid, len)) < 0)
116 return error;
2add34d0 117
c4cbb3b1
PS
118 git_oid_fromstr(out_oid, obj->oid);
119 *len_p = strlen(obj->content);
120 *buffer_p = git__strdup(obj->content);
ac3d33df 121 *type_p = GIT_OBJECT_BLOB;
c4cbb3b1
PS
122
123 return 0;
2add34d0
PS
124}
125
e579e0f7
MB
126static int fake_backend__refresh(git_odb_backend *backend)
127{
128 fake_backend *fake;
129
130 fake = (fake_backend *)backend;
131
132 fake->refresh_calls++;
133
134 return 0;
135}
136
137
2add34d0
PS
138static void fake_backend__free(git_odb_backend *_backend)
139{
140 fake_backend *backend;
141
142 backend = (fake_backend *)_backend;
143
144 git__free(backend);
145}
146
147int build_fake_backend(
148 git_odb_backend **out,
e579e0f7
MB
149 const fake_object *objects,
150 bool support_refresh)
2add34d0
PS
151{
152 fake_backend *backend;
153
154 backend = git__calloc(1, sizeof(fake_backend));
ac3d33df 155 GIT_ERROR_CHECK_ALLOC(backend);
2add34d0
PS
156
157 backend->parent.version = GIT_ODB_BACKEND_VERSION;
158
6e010bb1 159 backend->objects = objects;
2add34d0
PS
160
161 backend->parent.read = fake_backend__read;
162 backend->parent.read_prefix = fake_backend__read_prefix;
163 backend->parent.read_header = fake_backend__read_header;
e579e0f7 164 backend->parent.refresh = support_refresh ? fake_backend__refresh : NULL;
2add34d0 165 backend->parent.exists = fake_backend__exists;
b2e53f36 166 backend->parent.exists_prefix = fake_backend__exists_prefix;
2add34d0
PS
167 backend->parent.free = &fake_backend__free;
168
2add34d0
PS
169 *out = (git_odb_backend *)backend;
170
171 return 0;
172}