23
23
* Boston, MA 02110-1301, USA.
24
24
*/
25
25
26
- #include "common.h"
27
- #include "git2/object.h"
28
- #include "hash.h"
29
- #include "odb.h"
30
-
31
- #include "git2/odb_backend.h"
32
-
33
- #ifdef GIT2_HIREDIS_BACKEND
34
-
26
+ #include <assert.h>
27
+ #include <string.h>
28
+ #include <git2.h>
29
+ #include <git2/odb_backend.h>
35
30
#include <hiredis/hiredis.h>
36
31
37
32
typedef struct {
@@ -40,7 +35,8 @@ typedef struct {
40
35
redisContext * db ;
41
36
} hiredis_backend ;
42
37
43
- int hiredis_backend__read_header (size_t * len_p , git_otype * type_p , git_odb_backend * _backend , const git_oid * oid ) {
38
+ int hiredis_backend__read_header (size_t * len_p , git_otype * type_p , git_odb_backend * _backend , const git_oid * oid )
39
+ {
44
40
hiredis_backend * backend ;
45
41
int error ;
46
42
redisReply * reply ;
@@ -67,10 +63,11 @@ int hiredis_backend__read_header(size_t *len_p, git_otype *type_p, git_odb_backe
67
63
}
68
64
69
65
freeReplyObject (reply );
70
- return error == GIT_SUCCESS ? GIT_SUCCESS : git__rethrow ( error , "Failed to read header" ) ;
66
+ return error ;
71
67
}
72
68
73
- int hiredis_backend__read (void * * data_p , size_t * len_p , git_otype * type_p , git_odb_backend * _backend , const git_oid * oid ) {
69
+ int hiredis_backend__read (void * * data_p , size_t * len_p , git_otype * type_p , git_odb_backend * _backend , const git_oid * oid )
70
+ {
74
71
hiredis_backend * backend ;
75
72
int error ;
76
73
redisReply * reply ;
@@ -89,7 +86,7 @@ int hiredis_backend__read(void **data_p, size_t *len_p, git_otype *type_p, git_o
89
86
reply -> element [2 ]-> type != REDIS_REPLY_NIL ) {
90
87
* type_p = (git_otype ) atoi (reply -> element [0 ]-> str );
91
88
* len_p = (size_t ) atoi (reply -> element [1 ]-> str );
92
- * data_p = git__malloc (* len_p );
89
+ * data_p = malloc (* len_p );
93
90
if (* data_p == NULL ) {
94
91
error = GIT_ENOMEM ;
95
92
} else {
@@ -104,11 +101,13 @@ int hiredis_backend__read(void **data_p, size_t *len_p, git_otype *type_p, git_o
104
101
}
105
102
106
103
freeReplyObject (reply );
107
- return error == GIT_SUCCESS ? GIT_SUCCESS : git__rethrow ( error , "Failed to read backend" ) ;
104
+ return error == GIT_SUCCESS ;
108
105
}
109
106
110
- int hiredis_backend__read_prefix (git_oid * out_oid , void * * data_p , size_t * len_p , git_otype * type_p , git_odb_backend * _backend ,
111
- const git_oid * short_oid , unsigned int len ) {
107
+ int hiredis_backend__read_prefix (git_oid * out_oid ,
108
+ void * * data_p , size_t * len_p , git_otype * type_p , git_odb_backend * _backend ,
109
+ const git_oid * short_oid , unsigned int len )
110
+ {
112
111
if (len >= GIT_OID_HEXSZ ) {
113
112
/* Just match the full identifier */
114
113
int error = hiredis_backend__read (data_p , len_p , type_p , backend , short_oid );
@@ -118,11 +117,12 @@ int hiredis_backend__read_prefix(git_oid *out_oid, void **data_p, size_t *len_p,
118
117
return error ;
119
118
} else if (len < GIT_OID_HEXSZ ) {
120
119
/* TODO */
121
- return git__throw ( GIT_ENOTIMPLEMENTED , "Hiredis backend cannot search objects from short oid" ) ;
120
+ return GIT_ENOTIMPLEMENTED ;
122
121
}
123
122
}
124
123
125
- int hiredis_backend__exists (git_odb_backend * _backend , const git_oid * oid ) {
124
+ int hiredis_backend__exists (git_odb_backend * _backend , const git_oid * oid )
125
+ {
126
126
hiredis_backend * backend ;
127
127
int found ;
128
128
redisReply * reply ;
@@ -136,12 +136,12 @@ int hiredis_backend__exists(git_odb_backend *_backend, const git_oid *oid) {
136
136
if (reply && reply -> type != REDIS_REPLY_NIL && reply -> type != REDIS_REPLY_ERROR )
137
137
found = 1 ;
138
138
139
-
140
139
freeReplyObject (reply );
141
140
return found ;
142
141
}
143
142
144
- int hiredis_backend__write (git_oid * id , git_odb_backend * _backend , const void * data , size_t len , git_otype type ) {
143
+ int hiredis_backend__write (git_oid * id , git_odb_backend * _backend , const void * data , size_t len , git_otype type )
144
+ {
145
145
hiredis_backend * backend ;
146
146
int error ;
147
147
redisReply * reply ;
@@ -152,7 +152,7 @@ int hiredis_backend__write(git_oid *id, git_odb_backend *_backend, const void *d
152
152
error = GIT_ERROR ;
153
153
154
154
if ((error = git_odb_hash (id , data , len , type )) < 0 )
155
- return git__rethrow ( error , "Failed to write backend" ) ;
155
+ return error ;
156
156
157
157
reply = redisCommand (backend -> db , "HMSET %b "
158
158
"type %d "
@@ -163,10 +163,11 @@ int hiredis_backend__write(git_oid *id, git_odb_backend *_backend, const void *d
163
163
error = (reply == NULL || reply -> type == REDIS_REPLY_ERROR ) ? GIT_ERROR : GIT_SUCCESS ;
164
164
165
165
freeReplyObject (reply );
166
- return error == GIT_SUCCESS ? GIT_SUCCESS : git__rethrow ( error , "Failed to write backend" ) ;
166
+ return error ;
167
167
}
168
168
169
- void hiredis_backend__free (git_odb_backend * _backend ) {
169
+ void hiredis_backend__free (git_odb_backend * _backend )
170
+ {
170
171
hiredis_backend * backend ;
171
172
assert (_backend );
172
173
backend = (hiredis_backend * ) _backend ;
@@ -176,17 +177,19 @@ void hiredis_backend__free(git_odb_backend *_backend) {
176
177
free (backend );
177
178
}
178
179
179
- int git_odb_backend_hiredis (git_odb_backend * * backend_out , const char * host , int port ) {
180
+ int git_odb_backend_hiredis (git_odb_backend * * backend_out , const char * host , int port )
181
+ {
180
182
hiredis_backend * backend ;
181
183
182
- backend = git__calloc (1 , sizeof (hiredis_backend ));
184
+ backend = calloc (1 , sizeof (hiredis_backend ));
183
185
if (backend == NULL )
184
186
return GIT_ENOMEM ;
185
187
186
-
187
188
backend -> db = redisConnect (host , port );
188
- if (backend -> db -> err )
189
- goto cleanup ;
189
+ if (backend -> db -> err ) {
190
+ free (backend );
191
+ return GIT_ERROR ;
192
+ }
190
193
191
194
backend -> parent .read = & hiredis_backend__read ;
192
195
backend -> parent .read_prefix = & hiredis_backend__read_prefix ;
@@ -198,20 +201,5 @@ int git_odb_backend_hiredis(git_odb_backend **backend_out, const char *host, int
198
201
* backend_out = (git_odb_backend * ) backend ;
199
202
200
203
return GIT_SUCCESS ;
201
- cleanup :
202
- free (backend );
203
- return git__throw (GIT_ERROR , "Failed to get ODB backend" );
204
204
}
205
205
206
- #else
207
-
208
- int git_odb_backend_hiredis (git_odb_backend * * GIT_UNUSED (backend_out ),
209
- const char * GIT_UNUSED (host ), int GIT_UNUSED (port )) {
210
- GIT_UNUSED_ARG (backend_out );
211
- GIT_UNUSED_ARG (host );
212
- GIT_UNUSED_ARG (port );
213
- return git__throw (GIT_ENOTIMPLEMENTED , "Failed to get ODB backend. Feature not yet implemented" );
214
- }
215
-
216
-
217
- #endif /* HAVE_HIREDIS */
0 commit comments