docurium 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/Gemfile +5 -0
- data/LICENCE +19 -0
- data/README.md +39 -0
- data/TODO.txt +19 -0
- data/bin/cm +31 -0
- data/docurium.gemspec +25 -0
- data/lib/docurium.rb +435 -0
- data/lib/docurium/cli.rb +10 -0
- data/site/css/style.css +236 -0
- data/site/images/search_icon.png +0 -0
- data/site/index.html +65 -0
- data/site/js/backbone.js +27 -0
- data/site/js/docurium.js +649 -0
- data/site/js/json2.js +26 -0
- data/site/js/underscore.js +26 -0
- data/site/shared/css/documentation.css +797 -0
- data/site/shared/css/pygments.css +60 -0
- data/site/shared/images/active-arrow.png +0 -0
- data/site/shared/images/background-v2.png +0 -0
- data/site/shared/images/background-white.png +0 -0
- data/site/shared/images/dropdown_sprites.jpg +0 -0
- data/site/shared/images/footer_logo.png +0 -0
- data/site/shared/images/logo.png +0 -0
- data/site/shared/images/nav-rule.png +0 -0
- data/site/shared/images/next_step_arrow.gif +0 -0
- data/site/shared/images/qmark.png +0 -0
- data/site/shared/js/documentation.js +43 -0
- data/site/shared/js/jquery.js +154 -0
- data/test/fixtures/git2/api.docurium +6 -0
- data/test/fixtures/git2/blob.h +121 -0
- data/test/fixtures/git2/commit.h +302 -0
- data/test/fixtures/git2/common.h +98 -0
- data/test/fixtures/git2/errors.h +149 -0
- data/test/fixtures/git2/index.h +270 -0
- data/test/fixtures/git2/object.h +147 -0
- data/test/fixtures/git2/odb.h +302 -0
- data/test/fixtures/git2/odb_backend.h +107 -0
- data/test/fixtures/git2/oid.h +191 -0
- data/test/fixtures/git2/refs.h +325 -0
- data/test/fixtures/git2/repository.h +217 -0
- data/test/fixtures/git2/revwalk.h +187 -0
- data/test/fixtures/git2/signature.h +81 -0
- data/test/fixtures/git2/tag.h +297 -0
- data/test/fixtures/git2/thread-utils.h +71 -0
- data/test/fixtures/git2/tree.h +266 -0
- data/test/fixtures/git2/types.h +162 -0
- data/test/fixtures/git2/zlib.h +58 -0
- data/test/repo_test.rb +101 -0
- data/test/test_helper.rb +29 -0
- metadata +167 -0
@@ -0,0 +1,147 @@
|
|
1
|
+
/*
|
2
|
+
* This file is free software; you can redistribute it and/or modify
|
3
|
+
* it under the terms of the GNU General Public License, version 2,
|
4
|
+
* as published by the Free Software Foundation.
|
5
|
+
*
|
6
|
+
* In addition to the permissions in the GNU General Public License,
|
7
|
+
* the authors give you unlimited permission to link the compiled
|
8
|
+
* version of this file into combinations with other programs,
|
9
|
+
* and to distribute those combinations without any restriction
|
10
|
+
* coming from the use of this file. (The General Public License
|
11
|
+
* restrictions do apply in other respects; for example, they cover
|
12
|
+
* modification of the file, and distribution when not linked into
|
13
|
+
* a combined executable.)
|
14
|
+
*
|
15
|
+
* This file is distributed in the hope that it will be useful, but
|
16
|
+
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
17
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
18
|
+
* General Public License for more details.
|
19
|
+
*
|
20
|
+
* You should have received a copy of the GNU General Public License
|
21
|
+
* along with this program; see the file COPYING. If not, write to
|
22
|
+
* the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
23
|
+
* Boston, MA 02110-1301, USA.
|
24
|
+
*/
|
25
|
+
#ifndef INCLUDE_git_object_h__
|
26
|
+
#define INCLUDE_git_object_h__
|
27
|
+
|
28
|
+
#include "common.h"
|
29
|
+
#include "types.h"
|
30
|
+
#include "oid.h"
|
31
|
+
|
32
|
+
/**
|
33
|
+
* @file git2/object.h
|
34
|
+
* @brief Git revision object management routines
|
35
|
+
* @defgroup git_object Git revision object management routines
|
36
|
+
* @ingroup Git
|
37
|
+
* @{
|
38
|
+
*/
|
39
|
+
GIT_BEGIN_DECL
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Lookup a reference to one of the objects in a repostory.
|
43
|
+
*
|
44
|
+
* The generated reference is owned by the repository and
|
45
|
+
* should be closed with the `git_object_close` method
|
46
|
+
* instead of free'd manually.
|
47
|
+
*
|
48
|
+
* The 'type' parameter must match the type of the object
|
49
|
+
* in the odb; the method will fail otherwise.
|
50
|
+
* The special value 'GIT_OBJ_ANY' may be passed to let
|
51
|
+
* the method guess the object's type.
|
52
|
+
*
|
53
|
+
* @param object pointer to the looked-up object
|
54
|
+
* @param repo the repository to look up the object
|
55
|
+
* @param id the unique identifier for the object
|
56
|
+
* @param type the type of the object
|
57
|
+
* @return a reference to the object
|
58
|
+
*/
|
59
|
+
GIT_EXTERN(int) git_object_lookup(git_object **object, git_repository *repo, const git_oid *id, git_otype type);
|
60
|
+
|
61
|
+
/**
|
62
|
+
* Get the id (SHA1) of a repository object
|
63
|
+
*
|
64
|
+
* @param obj the repository object
|
65
|
+
* @return the SHA1 id
|
66
|
+
*/
|
67
|
+
GIT_EXTERN(const git_oid *) git_object_id(const git_object *obj);
|
68
|
+
|
69
|
+
/**
|
70
|
+
* Get the object type of an object
|
71
|
+
*
|
72
|
+
* @param obj the repository object
|
73
|
+
* @return the object's type
|
74
|
+
*/
|
75
|
+
GIT_EXTERN(git_otype) git_object_type(const git_object *obj);
|
76
|
+
|
77
|
+
/**
|
78
|
+
* Get the repository that owns this object
|
79
|
+
*
|
80
|
+
* @param obj the object
|
81
|
+
* @return the repository who owns this object
|
82
|
+
*/
|
83
|
+
GIT_EXTERN(git_repository *) git_object_owner(const git_object *obj);
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Close an open object
|
87
|
+
*
|
88
|
+
* This method instructs the library to close an existing
|
89
|
+
* object; note that git_objects are owned and cached by the repository
|
90
|
+
* so the object may or may not be freed after this library call,
|
91
|
+
* depending on how agressive is the caching mechanism used
|
92
|
+
* by the repository.
|
93
|
+
*
|
94
|
+
* IMPORTANT:
|
95
|
+
* It *is* necessary to call this method when you stop using
|
96
|
+
* an object. Failure to do so will cause a memory leak.
|
97
|
+
*
|
98
|
+
* @param object the object to close
|
99
|
+
*/
|
100
|
+
GIT_EXTERN(void) git_object_close(git_object *object);
|
101
|
+
|
102
|
+
/**
|
103
|
+
* Convert an object type to it's string representation.
|
104
|
+
*
|
105
|
+
* The result is a pointer to a string in static memory and
|
106
|
+
* should not be free()'ed.
|
107
|
+
*
|
108
|
+
* @param type object type to convert.
|
109
|
+
* @return the corresponding string representation.
|
110
|
+
*/
|
111
|
+
GIT_EXTERN(const char *) git_object_type2string(git_otype type);
|
112
|
+
|
113
|
+
/**
|
114
|
+
* Convert a string object type representation to it's git_otype.
|
115
|
+
*
|
116
|
+
* @param str the string to convert.
|
117
|
+
* @return the corresponding git_otype.
|
118
|
+
*/
|
119
|
+
GIT_EXTERN(git_otype) git_object_string2type(const char *str);
|
120
|
+
|
121
|
+
/**
|
122
|
+
* Determine if the given git_otype is a valid loose object type.
|
123
|
+
*
|
124
|
+
* @param type object type to test.
|
125
|
+
* @return true if the type represents a valid loose object type,
|
126
|
+
* false otherwise.
|
127
|
+
*/
|
128
|
+
GIT_EXTERN(int) git_object_typeisloose(git_otype type);
|
129
|
+
|
130
|
+
/**
|
131
|
+
* Get the size in bytes for the structure which
|
132
|
+
* acts as an in-memory representation of any given
|
133
|
+
* object type.
|
134
|
+
*
|
135
|
+
* For all the core types, this would the equivalent
|
136
|
+
* of calling `sizeof(git_commit)` if the core types
|
137
|
+
* were not opaque on the external API.
|
138
|
+
*
|
139
|
+
* @param type object type to get its size
|
140
|
+
* @return size in bytes of the object
|
141
|
+
*/
|
142
|
+
GIT_EXTERN(size_t) git_object__size(git_otype type);
|
143
|
+
|
144
|
+
/** @} */
|
145
|
+
GIT_END_DECL
|
146
|
+
|
147
|
+
#endif
|
@@ -0,0 +1,302 @@
|
|
1
|
+
/*
|
2
|
+
* This file is free software; you can redistribute it and/or modify
|
3
|
+
* it under the terms of the GNU General Public License, version 2,
|
4
|
+
* as published by the Free Software Foundation.
|
5
|
+
*
|
6
|
+
* In addition to the permissions in the GNU General Public License,
|
7
|
+
* the authors give you unlimited permission to link the compiled
|
8
|
+
* version of this file into combinations with other programs,
|
9
|
+
* and to distribute those combinations without any restriction
|
10
|
+
* coming from the use of this file. (The General Public License
|
11
|
+
* restrictions do apply in other respects; for example, they cover
|
12
|
+
* modification of the file, and distribution when not linked into
|
13
|
+
* a combined executable.)
|
14
|
+
*
|
15
|
+
* This file is distributed in the hope that it will be useful, but
|
16
|
+
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
17
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
18
|
+
* General Public License for more details.
|
19
|
+
*
|
20
|
+
* You should have received a copy of the GNU General Public License
|
21
|
+
* along with this program; see the file COPYING. If not, write to
|
22
|
+
* the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
23
|
+
* Boston, MA 02110-1301, USA.
|
24
|
+
*/
|
25
|
+
#ifndef INCLUDE_git_odb_h__
|
26
|
+
#define INCLUDE_git_odb_h__
|
27
|
+
|
28
|
+
#include "common.h"
|
29
|
+
#include "types.h"
|
30
|
+
#include "oid.h"
|
31
|
+
#include "odb_backend.h"
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @file git2/odb.h
|
35
|
+
* @brief Git object database routines
|
36
|
+
* @defgroup git_odb Git object database routines
|
37
|
+
* @ingroup Git
|
38
|
+
* @{
|
39
|
+
*/
|
40
|
+
GIT_BEGIN_DECL
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Create a new object database with no backends.
|
44
|
+
*
|
45
|
+
* Before the ODB can be used for read/writing, a custom database
|
46
|
+
* backend must be manually added using `git_odb_add_backend()`
|
47
|
+
*
|
48
|
+
* @param out location to store the database pointer, if opened.
|
49
|
+
* Set to NULL if the open failed.
|
50
|
+
* @return GIT_SUCCESS if the database was created; otherwise an error
|
51
|
+
* code describing why the open was not possible.
|
52
|
+
*/
|
53
|
+
GIT_EXTERN(int) git_odb_new(git_odb **out);
|
54
|
+
|
55
|
+
/**
|
56
|
+
* Create a new object database and automatically add
|
57
|
+
* the two default backends:
|
58
|
+
*
|
59
|
+
* - git_odb_backend_loose: read and write loose object files
|
60
|
+
* from disk, assuming `objects_dir` as the Objects folder
|
61
|
+
*
|
62
|
+
* - git_odb_backend_pack: read objects from packfiles,
|
63
|
+
* assuming `objects_dir` as the Objects folder which
|
64
|
+
* contains a 'pack/' folder with the corresponding data
|
65
|
+
*
|
66
|
+
* @param out location to store the database pointer, if opened.
|
67
|
+
* Set to NULL if the open failed.
|
68
|
+
* @param objects_dir path of the backends' "objects" directory.
|
69
|
+
* @return GIT_SUCCESS if the database opened; otherwise an error
|
70
|
+
* code describing why the open was not possible.
|
71
|
+
*/
|
72
|
+
GIT_EXTERN(int) git_odb_open(git_odb **out, const char *objects_dir);
|
73
|
+
|
74
|
+
/**
|
75
|
+
* Add a custom backend to an existing Object DB
|
76
|
+
*
|
77
|
+
* Read <odb_backends.h> for more information.
|
78
|
+
*
|
79
|
+
* @param odb database to add the backend to
|
80
|
+
* @paramm backend pointer to a git_odb_backend instance
|
81
|
+
* @return 0 on sucess; error code otherwise
|
82
|
+
*/
|
83
|
+
GIT_EXTERN(int) git_odb_add_backend(git_odb *odb, git_odb_backend *backend, int priority);
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Add a custom backend to an existing Object DB; this
|
87
|
+
* backend will work as an alternate.
|
88
|
+
*
|
89
|
+
* Alternate backends are always checked for objects *after*
|
90
|
+
* all the main backends have been exhausted.
|
91
|
+
*
|
92
|
+
* Writing is disabled on alternate backends.
|
93
|
+
*
|
94
|
+
* Read <odb_backends.h> for more information.
|
95
|
+
*
|
96
|
+
* @param odb database to add the backend to
|
97
|
+
* @paramm backend pointer to a git_odb_backend instance
|
98
|
+
* @return 0 on sucess; error code otherwise
|
99
|
+
*/
|
100
|
+
GIT_EXTERN(int) git_odb_add_alternate(git_odb *odb, git_odb_backend *backend, int priority);
|
101
|
+
|
102
|
+
/**
|
103
|
+
* Close an open object database.
|
104
|
+
*
|
105
|
+
* @param db database pointer to close. If NULL no action is taken.
|
106
|
+
*/
|
107
|
+
GIT_EXTERN(void) git_odb_close(git_odb *db);
|
108
|
+
|
109
|
+
/**
|
110
|
+
* Read an object from the database.
|
111
|
+
*
|
112
|
+
* This method queries all avaiable ODB backends
|
113
|
+
* trying to read the given OID.
|
114
|
+
*
|
115
|
+
* The returned object is reference counted and
|
116
|
+
* internally cached, so it should be closed
|
117
|
+
* by the user once it's no longer in use.
|
118
|
+
*
|
119
|
+
* @param out pointer where to store the read object
|
120
|
+
* @param db database to search for the object in.
|
121
|
+
* @param id identity of the object to read.
|
122
|
+
* @return
|
123
|
+
* - GIT_SUCCESS if the object was read;
|
124
|
+
* - GIT_ENOTFOUND if the object is not in the database.
|
125
|
+
*/
|
126
|
+
GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *id);
|
127
|
+
|
128
|
+
/**
|
129
|
+
* Read the header of an object from the database, without
|
130
|
+
* reading its full contents.
|
131
|
+
*
|
132
|
+
* The header includes the length and the type of an object.
|
133
|
+
*
|
134
|
+
* Note that most backends do not support reading only the header
|
135
|
+
* of an object, so the whole object will be read and then the
|
136
|
+
* header will be returned.
|
137
|
+
*
|
138
|
+
* @param len_p pointer where to store the length
|
139
|
+
* @param type_p pointer where to store the type
|
140
|
+
* @param db database to search for the object in.
|
141
|
+
* @param id identity of the object to read.
|
142
|
+
* @return
|
143
|
+
* - GIT_SUCCESS if the object was read;
|
144
|
+
* - GIT_ENOTFOUND if the object is not in the database.
|
145
|
+
*/
|
146
|
+
GIT_EXTERN(int) git_odb_read_header(size_t *len_p, git_otype *type_p, git_odb *db, const git_oid *id);
|
147
|
+
|
148
|
+
/**
|
149
|
+
* Determine if the given object can be found in the object database.
|
150
|
+
*
|
151
|
+
* @param db database to be searched for the given object.
|
152
|
+
* @param id the object to search for.
|
153
|
+
* @return
|
154
|
+
* - 1, if the object was found
|
155
|
+
* - 0, otherwise
|
156
|
+
*/
|
157
|
+
GIT_EXTERN(int) git_odb_exists(git_odb *db, const git_oid *id);
|
158
|
+
|
159
|
+
/**
|
160
|
+
* Write an object directly into the ODB
|
161
|
+
*
|
162
|
+
* This method writes a full object straight into the ODB.
|
163
|
+
* For most cases, it is preferred to write objects through a write
|
164
|
+
* stream, which is both faster and less memory intensive, specially
|
165
|
+
* for big objects.
|
166
|
+
*
|
167
|
+
* This method is provided for compatibility with custom backends
|
168
|
+
* which are not able to support streaming writes
|
169
|
+
*
|
170
|
+
* @param oid pointer to store the OID result of the write
|
171
|
+
* @param odb object database where to store the object
|
172
|
+
* @param data buffer with the data to storr
|
173
|
+
* @param len size of the buffer
|
174
|
+
* @param type type of the data to store
|
175
|
+
* @return 0 on success; error code otherwise
|
176
|
+
*/
|
177
|
+
GIT_EXTERN(int) git_odb_write(git_oid *oid, git_odb *odb, const void *data, size_t len, git_otype type);
|
178
|
+
|
179
|
+
/**
|
180
|
+
* Open a stream to write an object into the ODB
|
181
|
+
*
|
182
|
+
* The type and final length of the object must be specified
|
183
|
+
* when opening the stream.
|
184
|
+
*
|
185
|
+
* The returned stream will be of type `GIT_STREAM_WRONLY` and
|
186
|
+
* will have the following methods:
|
187
|
+
*
|
188
|
+
* - stream->write: write `n` bytes into the stream
|
189
|
+
* - stream->finalize_write: close the stream and store the object in
|
190
|
+
* the odb
|
191
|
+
* - stream->free: free the stream
|
192
|
+
*
|
193
|
+
* The streaming write won't be effective until `stream->finalize_write`
|
194
|
+
* is called and returns without an error
|
195
|
+
*
|
196
|
+
* The stream must always be free'd or will leak memory.
|
197
|
+
*
|
198
|
+
* @see git_odb_stream
|
199
|
+
*
|
200
|
+
* @param stream pointer where to store the stream
|
201
|
+
* @param db object database where the stream will write
|
202
|
+
* @param size final size of the object that will be written
|
203
|
+
* @param type type of the object that will be written
|
204
|
+
* @return 0 if the stream was created; error code otherwise
|
205
|
+
*/
|
206
|
+
GIT_EXTERN(int) git_odb_open_wstream(git_odb_stream **stream, git_odb *db, size_t size, git_otype type);
|
207
|
+
|
208
|
+
/**
|
209
|
+
* Open a stream to read an object from the ODB
|
210
|
+
*
|
211
|
+
* Note that most backends do *not* support streaming reads
|
212
|
+
* because they store their objects as compressed/delta'ed blobs.
|
213
|
+
*
|
214
|
+
* It's recommended to use `git_odb_read` instead, which is
|
215
|
+
* assured to work on all backends.
|
216
|
+
*
|
217
|
+
* The returned stream will be of type `GIT_STREAM_RDONLY` and
|
218
|
+
* will have the following methods:
|
219
|
+
*
|
220
|
+
* - stream->read: read `n` bytes from the stream
|
221
|
+
* - stream->free: free the stream
|
222
|
+
*
|
223
|
+
* The stream must always be free'd or will leak memory.
|
224
|
+
*
|
225
|
+
* @see git_odb_stream
|
226
|
+
*
|
227
|
+
* @param stream pointer where to store the stream
|
228
|
+
* @param db object database where the stream will read from
|
229
|
+
* @param oid oid of the object the stream will read from
|
230
|
+
* @return 0 if the stream was created; error code otherwise
|
231
|
+
*/
|
232
|
+
GIT_EXTERN(int) git_odb_open_rstream(git_odb_stream **stream, git_odb *db, const git_oid *oid);
|
233
|
+
|
234
|
+
/**
|
235
|
+
* Determine the object-ID (sha1 hash) of a data buffer
|
236
|
+
*
|
237
|
+
* The resulting SHA-1 OID will the itentifier for the data
|
238
|
+
* buffer as if the data buffer it were to written to the ODB.
|
239
|
+
*
|
240
|
+
* @param id the resulting object-ID.
|
241
|
+
* @param data data to hash
|
242
|
+
* @param len size of the data
|
243
|
+
* @param type of the data to hash
|
244
|
+
* @return 0 on success; error code otherwise
|
245
|
+
*/
|
246
|
+
GIT_EXTERN(int) git_odb_hash(git_oid *id, const void *data, size_t len, git_otype type);
|
247
|
+
|
248
|
+
/**
|
249
|
+
* Close an ODB object
|
250
|
+
*
|
251
|
+
* This method must always be called once a `git_odb_object` is no
|
252
|
+
* longer needed, otherwise memory will leak.
|
253
|
+
*
|
254
|
+
* @param object object to close
|
255
|
+
*/
|
256
|
+
GIT_EXTERN(void) git_odb_object_close(git_odb_object *object);
|
257
|
+
|
258
|
+
/**
|
259
|
+
* Return the OID of an ODB object
|
260
|
+
*
|
261
|
+
* This is the OID from which the object was read from
|
262
|
+
*
|
263
|
+
* @param object the object
|
264
|
+
* @return a pointer to the OID
|
265
|
+
*/
|
266
|
+
GIT_EXTERN(const git_oid *) git_odb_object_id(git_odb_object *object);
|
267
|
+
|
268
|
+
/**
|
269
|
+
* Return the data of an ODB object
|
270
|
+
*
|
271
|
+
* This is the uncompressed, raw data as read from the ODB,
|
272
|
+
* without the leading header.
|
273
|
+
*
|
274
|
+
* This pointer is owned by the object and shall not be free'd.
|
275
|
+
*
|
276
|
+
* @param object the object
|
277
|
+
* @return a pointer to the data
|
278
|
+
*/
|
279
|
+
GIT_EXTERN(const void *) git_odb_object_data(git_odb_object *object);
|
280
|
+
|
281
|
+
/**
|
282
|
+
* Return the size of an ODB object
|
283
|
+
*
|
284
|
+
* This is the real size of the `data` buffer, not the
|
285
|
+
* actual size of the object.
|
286
|
+
*
|
287
|
+
* @param object the object
|
288
|
+
* @return the size
|
289
|
+
*/
|
290
|
+
GIT_EXTERN(size_t) git_odb_object_size(git_odb_object *object);
|
291
|
+
|
292
|
+
/**
|
293
|
+
* Return the type of an ODB object
|
294
|
+
*
|
295
|
+
* @param object the object
|
296
|
+
* @return the type
|
297
|
+
*/
|
298
|
+
GIT_EXTERN(git_otype) git_odb_object_type(git_odb_object *object);
|
299
|
+
|
300
|
+
/** @} */
|
301
|
+
GIT_END_DECL
|
302
|
+
#endif
|
@@ -0,0 +1,107 @@
|
|
1
|
+
/*
|
2
|
+
* This file is free software; you can redistribute it and/or modify
|
3
|
+
* it under the terms of the GNU General Public License, version 2,
|
4
|
+
* as published by the Free Software Foundation.
|
5
|
+
*
|
6
|
+
* In addition to the permissions in the GNU General Public License,
|
7
|
+
* the authors give you unlimited permission to link the compiled
|
8
|
+
* version of this file into combinations with other programs,
|
9
|
+
* and to distribute those combinations without any restriction
|
10
|
+
* coming from the use of this file. (The General Public License
|
11
|
+
* restrictions do apply in other respects; for example, they cover
|
12
|
+
* modification of the file, and distribution when not linked into
|
13
|
+
* a combined executable.)
|
14
|
+
*
|
15
|
+
* This file is distributed in the hope that it will be useful, but
|
16
|
+
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
17
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
18
|
+
* General Public License for more details.
|
19
|
+
*
|
20
|
+
* You should have received a copy of the GNU General Public License
|
21
|
+
* along with this program; see the file COPYING. If not, write to
|
22
|
+
* the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
23
|
+
* Boston, MA 02110-1301, USA.
|
24
|
+
*/
|
25
|
+
#ifndef INCLUDE_git_odb_backend_h__
|
26
|
+
#define INCLUDE_git_odb_backend_h__
|
27
|
+
|
28
|
+
#include "common.h"
|
29
|
+
#include "types.h"
|
30
|
+
#include "oid.h"
|
31
|
+
|
32
|
+
/**
|
33
|
+
* @file git2/backend.h
|
34
|
+
* @brief Git custom backend functions
|
35
|
+
* @defgroup git_backend Git custom backend API
|
36
|
+
* @ingroup Git
|
37
|
+
* @{
|
38
|
+
*/
|
39
|
+
GIT_BEGIN_DECL
|
40
|
+
|
41
|
+
struct git_odb_stream;
|
42
|
+
|
43
|
+
/** An instance for a custom backend */
|
44
|
+
struct git_odb_backend {
|
45
|
+
git_odb *odb;
|
46
|
+
|
47
|
+
int (* read)(
|
48
|
+
void **, size_t *, git_otype *,
|
49
|
+
struct git_odb_backend *,
|
50
|
+
const git_oid *);
|
51
|
+
|
52
|
+
int (* read_header)(
|
53
|
+
size_t *, git_otype *,
|
54
|
+
struct git_odb_backend *,
|
55
|
+
const git_oid *);
|
56
|
+
|
57
|
+
int (* write)(
|
58
|
+
git_oid *,
|
59
|
+
struct git_odb_backend *,
|
60
|
+
const void *,
|
61
|
+
size_t,
|
62
|
+
git_otype);
|
63
|
+
|
64
|
+
int (* writestream)(
|
65
|
+
struct git_odb_stream **,
|
66
|
+
struct git_odb_backend *,
|
67
|
+
size_t,
|
68
|
+
git_otype);
|
69
|
+
|
70
|
+
int (* readstream)(
|
71
|
+
struct git_odb_stream **,
|
72
|
+
struct git_odb_backend *,
|
73
|
+
const git_oid *);
|
74
|
+
|
75
|
+
int (* exists)(
|
76
|
+
struct git_odb_backend *,
|
77
|
+
const git_oid *);
|
78
|
+
|
79
|
+
void (* free)(struct git_odb_backend *);
|
80
|
+
};
|
81
|
+
|
82
|
+
/** A stream to read/write from a backend */
|
83
|
+
struct git_odb_stream {
|
84
|
+
struct git_odb_backend *backend;
|
85
|
+
int mode;
|
86
|
+
|
87
|
+
int (*read)(struct git_odb_stream *stream, char *buffer, size_t len);
|
88
|
+
int (*write)(struct git_odb_stream *stream, const char *buffer, size_t len);
|
89
|
+
int (*finalize_write)(git_oid *oid_p, struct git_odb_stream *stream);
|
90
|
+
void (*free)(struct git_odb_stream *stream);
|
91
|
+
};
|
92
|
+
|
93
|
+
/** Streaming mode */
|
94
|
+
typedef enum {
|
95
|
+
GIT_STREAM_RDONLY = (1 << 1),
|
96
|
+
GIT_STREAM_WRONLY = (1 << 2),
|
97
|
+
GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY),
|
98
|
+
} git_odb_streammode;
|
99
|
+
|
100
|
+
|
101
|
+
GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **backend_out, const char *objects_dir);
|
102
|
+
GIT_EXTERN(int) git_odb_backend_loose(git_odb_backend **backend_out, const char *objects_dir);
|
103
|
+
GIT_EXTERN(int) git_odb_backend_sqlite(git_odb_backend **backend_out, const char *sqlite_db);
|
104
|
+
|
105
|
+
GIT_END_DECL
|
106
|
+
|
107
|
+
#endif
|