1 #include <stdlib.h>
2 #include <assert.h>
3
4 #include "emacs-module.h"
5 #include "git2.h"
6
7 #ifdef EGIT_DEBUG
8 #include "egit-debug.h"
9 #endif
10
11 #include "interface.h"
12 #include "egit-annotated-commit.h"
13 #include "egit-blame.h"
14 #include "egit-blob.h"
15 #include "egit-branch.h"
16 #include "egit-checkout.h"
17 #include "egit-cherrypick.h"
18 #include "egit-clone.h"
19 #include "egit-commit.h"
20 #include "egit-config.h"
21 #include "egit-cred.h"
22 #include "egit-describe.h"
23 #include "egit-diff.h"
24 #include "egit-graph.h"
25 #include "egit-ignore.h"
26 #include "egit-index.h"
27 #include "egit-libgit2.h"
28 #include "egit-merge.h"
29 #include "egit-message.h"
30 #include "egit-object.h"
31 #include "egit-pathspec.h"
32 #include "egit-reference.h"
33 #include "egit-reflog.h"
34 #include "egit-refspec.h"
35 #include "egit-remote.h"
36 #include "egit-repository.h"
37 #include "egit-reset.h"
38 #include "egit-revparse.h"
39 #include "egit-revert.h"
40 #include "egit-revwalk.h"
41 #include "egit-signature.h"
42 #include "egit-status.h"
43 #include "egit-submodule.h"
44 #include "egit-tag.h"
45 #include "egit-transaction.h"
46 #include "egit-tree.h"
47 #include "egit-treebuilder.h"
48 #include "egit.h"
49
egit_get_type(emacs_env * env,emacs_value _obj)50 egit_type egit_get_type(emacs_env *env, emacs_value _obj)
51 {
52 if (!em_user_ptrp(env, _obj))
53 return EGIT_UNKNOWN;
54 egit_object *obj = (egit_object*) EM_EXTRACT_USER_PTR(_obj);
55 return obj->type;
56 }
57
egit_assert_type(emacs_env * env,emacs_value obj,egit_type type,emacs_value predicate)58 bool egit_assert_type(emacs_env *env, emacs_value obj, egit_type type, emacs_value predicate)
59 {
60 if (type == egit_get_type(env, obj))
61 return true;
62 em_signal_wrong_type(env, predicate, obj);
63 return false;
64 }
65
egit_assert_object(emacs_env * env,emacs_value obj)66 bool egit_assert_object(emacs_env *env, emacs_value obj)
67 {
68 egit_type type = egit_get_type(env, obj);
69 if (type == EGIT_COMMIT || type == EGIT_TREE ||
70 type == EGIT_BLOB || type == EGIT_TAG || type == EGIT_OBJECT)
71 return true;
72 em_signal_wrong_type(env, esym_libgit_object_p, obj);
73 return false;
74 }
75
egit_assert_list(emacs_env * env,egit_type type,emacs_value predicate,emacs_value arg)76 ptrdiff_t egit_assert_list(emacs_env *env, egit_type type, emacs_value predicate, emacs_value arg)
77 {
78 ptrdiff_t nelems = 0;
79
80 while (em_consp(env, arg)) {
81 emacs_value car = em_car(env, arg);
82 if (!egit_assert_type(env, car, type, predicate))
83 return -1;
84 nelems++;
85 arg = em_cdr(env, arg);
86 }
87
88 if (EM_EXTRACT_BOOLEAN(arg)) {
89 em_signal_wrong_type(env, esym_listp, arg);
90 return -1;
91 }
92
93 return nelems;
94 }
95
egit_finalize(void * _obj)96 void egit_finalize(void* _obj)
97 {
98 #ifdef EGIT_DEBUG
99 egit_signal_finalize(_obj);
100 #endif
101
102 // The argument type must be void* to make this function work as an Emacs finalizer
103 egit_object *obj = (egit_object*)_obj;
104 egit_object *parent = obj->parent;
105
106 // For reference-counted types, decref and possibly abort
107 switch (obj->type) {
108 case EGIT_BLAME:
109 case EGIT_DIFF:
110 case EGIT_INDEX:
111 case EGIT_REFLOG:
112 case EGIT_REMOTE:
113 case EGIT_REPOSITORY:
114 obj->refcount--;
115 if (obj->refcount != 0)
116 return;
117 default: break;
118 }
119
120 #ifdef EGIT_DEBUG
121 egit_signal_free(_obj);
122 #endif
123
124 // Free the object based on its type
125 // For types that only expose weak pointers to the parent, this should be a no-op
126 switch (obj->type) {
127 case EGIT_COMMIT: case EGIT_TREE: case EGIT_BLOB: case EGIT_TAG: case EGIT_OBJECT:
128 git_object_free(obj->ptr); break;
129 case EGIT_BLAME: git_blame_free(obj->ptr); break;
130 case EGIT_DIFF: git_diff_free(obj->ptr); break;
131 case EGIT_INDEX: git_index_free(obj->ptr); break;
132 case EGIT_REFLOG: git_reflog_free(obj->ptr); break;
133 case EGIT_REMOTE: git_remote_free(obj->ptr); break;
134 case EGIT_REPOSITORY: git_repository_free(obj->ptr); break;
135 case EGIT_REFERENCE: git_reference_free(obj->ptr); break;
136 case EGIT_CONFIG: git_config_free(obj->ptr); break;
137 case EGIT_SIGNATURE: git_signature_free(obj->ptr); break;
138 case EGIT_TRANSACTION: git_transaction_free(obj->ptr); break;
139 case EGIT_SUBMODULE: git_submodule_free(obj->ptr); break;
140 case EGIT_CRED: git_cred_free(obj->ptr); break;
141 case EGIT_ANNOTATED_COMMIT: git_annotated_commit_free(obj->ptr); break;
142 case EGIT_REVWALK: git_revwalk_free(obj->ptr); break;
143 case EGIT_TREEBUILDER: git_treebuilder_free(obj->ptr); break;
144 case EGIT_PATHSPEC: git_pathspec_free(obj->ptr); break;
145 case EGIT_PATHSPEC_MATCH_LIST: git_pathspec_match_list_free(obj->ptr); break;
146 default: break;
147 }
148
149 // Free the wrapper, then release the reference to the parent, if applicable
150 free(obj);
151 if (parent)
152 egit_finalize(parent);
153 }
154
egit_wrap(emacs_env * env,egit_type type,const void * data,egit_object * parent)155 emacs_value egit_wrap(emacs_env *env, egit_type type, const void* data, egit_object *parent)
156 {
157 // If it's a git_object, try to be more specific
158 if (type == EGIT_OBJECT) {
159 switch (git_object_type(data)) {
160 case GIT_OBJ_COMMIT: type = EGIT_COMMIT; break;
161 case GIT_OBJ_TREE: type = EGIT_TREE; break;
162 case GIT_OBJ_BLOB: type = EGIT_BLOB; break;
163 case GIT_OBJ_TAG: type = EGIT_TAG; break;
164 default: break;
165 }
166 }
167
168 // Increase refcounts of owner object(s), if applicable
169 if (parent)
170 parent->refcount++;
171
172 egit_object *wrapper;
173 wrapper = (egit_object*) malloc(sizeof(egit_object));
174 wrapper->type = type;
175 wrapper->ptr = (void*) data;
176 wrapper->parent = parent;
177
178 // This has no effect for types that are not reference-counted
179 wrapper->refcount = 1;
180
181 #ifdef EGIT_DEBUG
182 egit_signal_alloc(wrapper);
183 #endif
184
185 return EM_USER_PTR(wrapper, egit_finalize);
186 }
187
188 typedef emacs_value (*func_0)(emacs_env*);
189 typedef emacs_value (*func_1)(emacs_env*, emacs_value);
190 typedef emacs_value (*func_2)(emacs_env*, emacs_value, emacs_value);
191 typedef emacs_value (*func_3)(emacs_env*, emacs_value, emacs_value, emacs_value);
192 typedef emacs_value (*func_4)(emacs_env*, emacs_value, emacs_value, emacs_value,
193 emacs_value);
194 typedef emacs_value (*func_5)(emacs_env*, emacs_value, emacs_value, emacs_value,
195 emacs_value, emacs_value);
196 typedef emacs_value (*func_6)(emacs_env*, emacs_value, emacs_value, emacs_value,
197 emacs_value, emacs_value, emacs_value);
198 typedef emacs_value (*func_7)(emacs_env*, emacs_value, emacs_value, emacs_value,
199 emacs_value, emacs_value, emacs_value, emacs_value);
200
201 // Get an argument index, or nil. Useful for simulating optional arguments.
202 #define GET_SAFE(arglist, nargs, index) ((index) < (nargs) ? (arglist)[(index)] : esym_nil)
203
egit_dispatch_0(emacs_env * env,ptrdiff_t nargs,emacs_value * args,void * data)204 static emacs_value egit_dispatch_0(emacs_env *env, __attribute__((unused)) ptrdiff_t nargs,
205 __attribute__((unused)) emacs_value *args, void *data)
206 {
207 func_0 func = (func_0) data;
208 return func(env);
209 }
210
egit_dispatch_1(emacs_env * env,ptrdiff_t nargs,emacs_value * args,void * data)211 static emacs_value egit_dispatch_1(emacs_env *env, ptrdiff_t nargs, emacs_value *args, void *data)
212 {
213 func_1 func = (func_1) data;
214 return func(env, GET_SAFE(args, nargs, 0));
215 }
216
egit_dispatch_2(emacs_env * env,ptrdiff_t nargs,emacs_value * args,void * data)217 static emacs_value egit_dispatch_2(emacs_env *env, ptrdiff_t nargs, emacs_value *args, void *data)
218 {
219 func_2 func = (func_2) data;
220 return func(env, GET_SAFE(args, nargs, 0), GET_SAFE(args, nargs, 1));
221 }
222
egit_dispatch_3(emacs_env * env,ptrdiff_t nargs,emacs_value * args,void * data)223 static emacs_value egit_dispatch_3(emacs_env *env, ptrdiff_t nargs, emacs_value *args, void *data)
224 {
225 func_3 func = (func_3) data;
226 return func(env, GET_SAFE(args, nargs, 0), GET_SAFE(args, nargs, 1), GET_SAFE(args, nargs, 2));
227 }
228
egit_dispatch_4(emacs_env * env,ptrdiff_t nargs,emacs_value * args,void * data)229 static emacs_value egit_dispatch_4(emacs_env *env, ptrdiff_t nargs, emacs_value *args, void *data)
230 {
231 func_4 func = (func_4) data;
232 return func(env, GET_SAFE(args, nargs, 0), GET_SAFE(args, nargs, 1), GET_SAFE(args, nargs, 2),
233 GET_SAFE(args, nargs, 3));
234 }
235
egit_dispatch_5(emacs_env * env,ptrdiff_t nargs,emacs_value * args,void * data)236 static emacs_value egit_dispatch_5(emacs_env *env, ptrdiff_t nargs, emacs_value *args, void *data)
237 {
238 func_5 func = (func_5) data;
239 return func(env, GET_SAFE(args, nargs, 0), GET_SAFE(args, nargs, 1), GET_SAFE(args, nargs, 2),
240 GET_SAFE(args, nargs, 3), GET_SAFE(args, nargs, 4));
241 }
242
egit_dispatch_6(emacs_env * env,ptrdiff_t nargs,emacs_value * args,void * data)243 static emacs_value egit_dispatch_6(emacs_env *env, ptrdiff_t nargs, emacs_value *args, void *data)
244 {
245 func_6 func = (func_6) data;
246 return func(env, GET_SAFE(args, nargs, 0), GET_SAFE(args, nargs, 1), GET_SAFE(args, nargs, 2),
247 GET_SAFE(args, nargs, 3), GET_SAFE(args, nargs, 4), GET_SAFE(args, nargs, 5));
248 }
249
egit_dispatch_7(emacs_env * env,ptrdiff_t nargs,emacs_value * args,void * data)250 static emacs_value egit_dispatch_7(emacs_env *env, ptrdiff_t nargs, emacs_value *args, void *data)
251 {
252 func_7 func = (func_7) data;
253 return func(env, GET_SAFE(args, nargs, 0), GET_SAFE(args, nargs, 1), GET_SAFE(args, nargs, 2),
254 GET_SAFE(args, nargs, 3), GET_SAFE(args, nargs, 4), GET_SAFE(args, nargs, 5),
255 GET_SAFE(args, nargs, 6));
256 }
257
egit_dispatch_error(emacs_env * env,int retval)258 bool egit_dispatch_error(emacs_env *env, int retval)
259 {
260 if (retval >= 0) return false;
261
262 const git_error *err = giterr_last();
263 if (!err) return false;
264
265 emacs_value error = em_findenum_error(err->klass);
266 if (!EM_EXTRACT_BOOLEAN(error))
267 error = esym_giterr;
268
269 em_signal(env, error, err->message);
270 return true;
271 }
272
273 EGIT_DOC(typeof, "OBJ", "Return the type of the git pointer OBJ, or nil.");
egit_typeof(emacs_env * env,emacs_value val)274 static emacs_value egit_typeof(emacs_env *env, emacs_value val)
275 {
276 switch (egit_get_type(env, val)) {
277 case EGIT_REPOSITORY: return esym_repository;
278 case EGIT_REFERENCE: return esym_reference;
279 case EGIT_COMMIT: return esym_commit;
280 case EGIT_TREE: return esym_tree;
281 case EGIT_BLOB: return esym_blob;
282 case EGIT_TAG: return esym_tag;
283 case EGIT_OBJECT: return esym_object;
284 case EGIT_BLAME: return esym_blame;
285 case EGIT_BLAME_HUNK: return esym_blame_hunk;
286 case EGIT_CONFIG: return esym_config;
287 case EGIT_TRANSACTION: return esym_transaction;
288 case EGIT_INDEX: return esym_index;
289 case EGIT_INDEX_ENTRY: return esym_index_entry;
290 case EGIT_DIFF: return esym_diff;
291 case EGIT_DIFF_DELTA: return esym_diff_delta;
292 case EGIT_DIFF_BINARY: return esym_diff_binary;
293 case EGIT_DIFF_HUNK: return esym_diff_hunk;
294 case EGIT_DIFF_LINE: return esym_diff_line;
295 case EGIT_PATHSPEC: return esym_pathspec;
296 case EGIT_PATHSPEC_MATCH_LIST: return esym_pathspec_match_list;
297 case EGIT_REMOTE: return esym_remote;
298 case EGIT_REFSPEC: return esym_refspec;
299 case EGIT_SUBMODULE: return esym_submodule;
300 case EGIT_CRED: return esym_cred;
301 case EGIT_ANNOTATED_COMMIT: return esym_annotated_commit;
302 case EGIT_REFLOG: return esym_reflog;
303 case EGIT_REFLOG_ENTRY: return esym_reflog_entry;
304 case EGIT_REVWALK: return esym_revwalk;
305 case EGIT_TREEBUILDER: return esym_treebuilder;
306 default: return esym_nil;
307 }
308 }
309
310 #define TYPECHECKER(caps, small, text) \
311 EGIT_DOC(small##_p, "OBJ", "Return non-nil if OBJ is a git " text "."); \
312 static emacs_value egit_##small##_p(emacs_env *env, emacs_value obj)\
313 { \
314 return egit_get_type(env, obj) == EGIT_##caps ? esym_t : esym_nil; \
315 }
316
317 TYPECHECKER(ANNOTATED_COMMIT, annotated_commit, "annotated commit");
318 TYPECHECKER(BLAME, blame, "blame");
319 TYPECHECKER(BLAME_HUNK, blame_hunk, "blame hunk");
320 TYPECHECKER(COMMIT, commit, "commit");
321 TYPECHECKER(BLOB, blob, "blob");
322 TYPECHECKER(CONFIG, config, "config");
323 TYPECHECKER(CRED, cred, "credential");
324 TYPECHECKER(DIFF, diff, "diff");
325 TYPECHECKER(DIFF_DELTA, diff_delta, "diff delta");
326 TYPECHECKER(DIFF_BINARY, diff_binary, "diff binary");
327 TYPECHECKER(DIFF_HUNK, diff_hunk, "diff hunk");
328 TYPECHECKER(DIFF_LINE, diff_line, "diff line");
329 TYPECHECKER(INDEX, index, "index.");
330 TYPECHECKER(INDEX_ENTRY, index_entry, "index entry");
331 TYPECHECKER(PATHSPEC, pathspec, "pathspec");
332 TYPECHECKER(PATHSPEC_MATCH_LIST, pathspec_match_list, "pathspec match list");
333 TYPECHECKER(REFERENCE, reference, "reference");
334 TYPECHECKER(REFLOG, reflog, "reflog");
335 TYPECHECKER(REFLOG_ENTRY, reflog_entry, "reflog entry");
336 TYPECHECKER(REFSPEC, refspec, "refspec");
337 TYPECHECKER(REMOTE, remote, "remote");
338 TYPECHECKER(REPOSITORY, repository, "repository");
339 TYPECHECKER(REVWALK, revwalk, "repository");
340 TYPECHECKER(SIGNATURE, signature, "signature");
341 TYPECHECKER(SUBMODULE, submodule, "submodule");
342 TYPECHECKER(TAG, tag, "tag");
343 TYPECHECKER(TRANSACTION, transaction, "transaction");
344 TYPECHECKER(TREE, tree, "tree");
345 TYPECHECKER(TREEBUILDER, treebuilder, "treebuilder");
346
347 #undef TYPECHECKER
348
349 EGIT_DOC(object_p, "OBJ", "Return non-nil if OBJ is a git object.");
egit_object_p(emacs_env * env,emacs_value obj)350 static emacs_value egit_object_p(emacs_env *env, emacs_value obj)
351 {
352 egit_type type = egit_get_type(env, obj);
353 return (type == EGIT_COMMIT || type == EGIT_TREE || type == EGIT_BLOB ||
354 type == EGIT_TAG || type == EGIT_OBJECT) ? esym_t : esym_nil;
355 }
356
357 #define DEFUN(ename, cname, min_nargs, max_nargs) \
358 em_defun(env, (ename), \
359 env->make_function( \
360 env, (min_nargs), (max_nargs), \
361 egit_dispatch_##max_nargs, \
362 egit_##cname##__doc, \
363 egit_##cname))
364
egit_init(emacs_env * env)365 void egit_init(emacs_env *env)
366 {
367 // Debug mode functions
368 #ifdef EGIT_DEBUG
369 DEFUN("libgit--allocs", _allocs, 0, 0);
370 DEFUN("libgit--finalizes", _finalizes, 0, 0);
371 DEFUN("libgit--frees", _frees, 0, 0);
372 DEFUN("libgit--refcount", _refcount, 1, 1);
373 DEFUN("libgit--wrapper", _wrapper, 1, 1);
374 DEFUN("libgit--wrapped", _wrapped, 1, 1);
375 DEFUN("libgit--parent-wrapper", _parent_wrapper, 1, 1);
376 #endif
377
378 // Type checkers
379 DEFUN("libgit-typeof", typeof, 1, 1);
380 DEFUN("libgit-annotated-commit-p", annotated_commit_p, 1, 1);
381 DEFUN("libgit-blame-p", blame_p, 1, 1);
382 DEFUN("libgit-blame-hunk-p", blame_hunk_p, 1, 1);
383 DEFUN("libgit-blob-p", blob_p, 1, 1);
384 DEFUN("libgit-commit-p", commit_p, 1, 1);
385 DEFUN("libgit-config-p", config_p, 1, 1);
386 DEFUN("libgit-cred-p", cred_p, 1, 1);
387 DEFUN("libgit-diff-p", diff_p, 1, 1);
388 DEFUN("libgit-diff-delta-p", diff_delta_p, 1, 1);
389 DEFUN("libgit-diff-binary-p", diff_binary_p, 1, 1);
390 DEFUN("libgit-diff-hunk-p", diff_hunk_p, 1, 1);
391 DEFUN("libgit-diff-line-p", diff_line_p, 1, 1);
392 DEFUN("libgit-index-p", index_p, 1, 1);
393 DEFUN("libgit-index-entry-p", index_entry_p, 1, 1);
394 DEFUN("libgit-object-p", object_p, 1, 1);
395 DEFUN("libgit-pathspec-p", pathspec_p, 1, 1);
396 DEFUN("libgit-pathspec-match-list-p", pathspec_match_list_p, 1, 1);
397 DEFUN("libgit-reference-p", reference_p, 1, 1);
398 DEFUN("libgit-reflog-p", reflog_p, 1, 1);
399 DEFUN("libgit-reflog-entry-p", reflog_entry_p, 1, 1);
400 DEFUN("libgit-refspec-p", refspec_p, 1, 1);
401 DEFUN("libgit-remote-p", remote_p, 1, 1);
402 DEFUN("libgit-repository-p", repository_p, 1, 1);
403 DEFUN("libgit-revwalk-p", revwalk_p, 1, 1);
404 DEFUN("libgit-signature-p", signature_p, 1, 1);
405 DEFUN("libgit-submodule-p", submodule_p, 1, 1);
406 DEFUN("libgit-tag-p", tag_p, 1, 1);
407 DEFUN("libgit-transaction-p", transaction_p, 1, 1);
408 DEFUN("libgit-tree-p", tree_p, 1, 1);
409 DEFUN("libgit-treebuilder-p", treebuilder_p, 1, 1);
410
411 // Libgit2 (not namespaced as others!)
412 DEFUN("libgit-feature-p", libgit2_feature_p, 1, 1);
413 DEFUN("libgit-version", libgit2_version, 0, 0);
414
415 // Annotated commit
416 DEFUN("libgit-annotated-commit-from-ref", annotated_commit_from_ref, 2, 2);
417 DEFUN("libgit-annotated-commit-from-fetchhead", annotated_commit_from_fetchhead, 4, 4);
418 DEFUN("libgit-annotated-commit-from-revspec", annotated_commit_from_revspec, 2, 2);
419 DEFUN("libgit-annotated-commit-lookup", annotated_commit_lookup, 2, 2);
420 DEFUN("libgit-annotated-commit-id", annotated_commit_id, 1, 1);
421
422 // Blame
423 DEFUN("libgit-blame-file", blame_file, 2, 3);
424 DEFUN("libgit-blame-get-hunk-byindex", blame_get_hunk_byindex, 2, 2);
425 DEFUN("libgit-blame-get-hunk-byline", blame_get_hunk_byline, 2, 2);
426 DEFUN("libgit-blame-get-hunk-count", blame_get_hunk_count, 1, 1);
427
428 DEFUN("libgit-blame-hunk-commit-id", blame_hunk_commit_id, 1, 2);
429 DEFUN("libgit-blame-hunk-lines", blame_hunk_lines, 1, 1);
430 DEFUN("libgit-blame-hunk-orig-path", blame_hunk_orig_path, 1, 1);
431 DEFUN("libgit-blame-hunk-signature", blame_hunk_signature, 1, 2);
432 DEFUN("libgit-blame-hunk-start-line-number", blame_hunk_start_line_number, 1, 2);
433
434 // Blob
435 DEFUN("libgit-blob-create-fromdisk", blob_create_fromdisk, 2, 2);
436 DEFUN("libgit-blob-create-fromstring", blob_create_fromstring, 2, 2);
437 DEFUN("libgit-blob-create-fromworkdir", blob_create_fromworkdir, 2, 2);
438 DEFUN("libgit-blob-lookup", blob_lookup, 2, 2);
439 DEFUN("libgit-blob-lookup-prefix", blob_lookup_prefix, 2, 2);
440
441 DEFUN("libgit-blob-binary-p", blob_binary_p, 1, 1);
442 DEFUN("libgit-blob-filtered-content", blob_filtered_content, 2, 3);
443 DEFUN("libgit-blob-id", blob_id, 1, 1);
444 DEFUN("libgit-blob-owner", blob_owner, 1, 1);
445 DEFUN("libgit-blob-rawcontent", blob_rawcontent, 1, 1);
446 DEFUN("libgit-blob-rawsize", blob_rawsize, 1, 1);
447
448 // Branch
449 DEFUN("libgit-branch-create", branch_create, 3, 4);
450 DEFUN("libgit-branch-create-from-annotated", branch_create_from_annotated, 3, 4);
451 DEFUN("libgit-branch-lookup", branch_lookup, 2, 3);
452 DEFUN("libgit-branch-delete", branch_delete, 1, 1);
453 DEFUN("libgit-branch-checked-out-p", branch_checked_out_p, 1, 1);
454 DEFUN("libgit-branch-foreach", branch_foreach, 3, 3);
455 DEFUN("libgit-branch-head-p", branch_head_p, 1, 1);
456 DEFUN("libgit-branch-move", branch_move, 2, 3);
457 DEFUN("libgit-branch-name", branch_name, 1, 1);
458 DEFUN("libgit-branch-remote-name", branch_remote_name, 2, 2);
459 DEFUN("libgit-branch-set-upstream", branch_set_upstream, 2, 2);
460 DEFUN("libgit-branch-upstream", branch_upstream, 1, 1);
461 DEFUN("libgit-branch-upstream-name", branch_upstream_name, 2, 2);
462 DEFUN("libgit-branch-upstream-remote", branch_upstream_remote, 2, 2);
463
464 // Checkout
465 DEFUN("libgit-checkout-head", checkout_head, 1, 2);
466 DEFUN("libgit-checkout-index", checkout_index, 1, 3);
467 DEFUN("libgit-checkout-tree", checkout_tree, 1, 3);
468
469 // Cherrypick
470 DEFUN("libgit-cherrypick", cherrypick, 2, 5);
471 DEFUN("libgit-cherrypick-commit", cherrypick_commit, 3, 5);
472
473 // Clone
474 DEFUN("libgit-clone", clone, 2, 2);
475
476 // Commit
477 DEFUN("libgit-commit-lookup", commit_lookup, 2, 2);
478 DEFUN("libgit-commit-lookup-prefix", commit_lookup_prefix, 2, 2);
479
480 DEFUN("libgit-commit-author", commit_author, 1, 1);
481 DEFUN("libgit-commit-body", commit_body, 1, 1);
482 DEFUN("libgit-commit-committer", commit_committer, 1, 1);
483 DEFUN("libgit-commit-id", commit_id, 1, 1);
484 DEFUN("libgit-commit-message", commit_message, 1, 1);
485 DEFUN("libgit-commit-nth-gen-ancestor", commit_nth_gen_ancestor, 2, 2);
486 DEFUN("libgit-commit-owner", commit_owner, 1, 1);
487 DEFUN("libgit-commit-parent", commit_parent, 1, 2);
488 DEFUN("libgit-commit-parent-id", commit_parent_id, 1, 2);
489 DEFUN("libgit-commit-parentcount", commit_parentcount, 1, 1);
490 DEFUN("libgit-commit-summary", commit_summary, 1, 1);
491 DEFUN("libgit-commit-time", commit_time, 1, 1);
492 DEFUN("libgit-commit-tree", commit_tree, 1, 1);
493 DEFUN("libgit-commit-tree-id", commit_tree_id, 1, 1);
494
495 DEFUN("libgit-commit-create", commit_create, 6, 7);
496
497 // Config
498 DEFUN("libgit-config-new", config_new, 0, 0);
499 DEFUN("libgit-config-open-default", config_open_default, 0, 0);
500 DEFUN("libgit-config-open-global", config_open_global, 1, 1);
501 DEFUN("libgit-config-open-level", config_open_level, 1, 2);
502 DEFUN("libgit-config-open-ondisk", config_open_ondisk, 1, 1);
503 DEFUN("libgit-config-snapshot", config_snapshot, 1, 1);
504
505 DEFUN("libgit-config-get-bool", config_get_bool, 2, 2);
506 DEFUN("libgit-config-get-int", config_get_int, 2, 2);
507 DEFUN("libgit-config-get-path", config_get_path, 2, 2);
508 DEFUN("libgit-config-get-string", config_get_string, 2, 2);
509 DEFUN("libgit-config-lock", config_lock, 1, 1);
510
511 DEFUN("libgit-config-set-bool", config_set_bool, 3, 3);
512 DEFUN("libgit-config-set-int", config_set_int, 3, 3);
513 DEFUN("libgit-config-set-string", config_set_string, 3, 3);
514
515 DEFUN("libgit-config-add-file-ondisk", config_add_file_ondisk, 2, 5);
516 DEFUN("libgit-config-delete-entry", config_delete_entry, 2, 2);
517 DEFUN("libgit-config-delete-multivar", config_delete_multivar, 3, 3);
518
519 DEFUN("libgit-config-find-global", config_find_global, 0, 0);
520 DEFUN("libgit-config-find-programdata", config_find_programdata, 0, 0);
521 DEFUN("libgit-config-find-system", config_find_system, 0, 0);
522 DEFUN("libgit-config-find-xdg", config_find_xdg, 0, 0);
523
524 // Cred
525 DEFUN("libgit-cred-default-new", cred_default_new, 0, 0);
526 DEFUN("libgit-cred-ssh-key-from-agent", cred_ssh_key_from_agent, 1, 1);
527 DEFUN("libgit-cred-ssh-key-memory-new", cred_ssh_key_memory_new, 4, 4);
528 DEFUN("libgit-cred-ssh-key-new", cred_ssh_key_new, 4, 4);
529 DEFUN("libgit-cred-username-new", cred_username_new, 1, 1);
530 DEFUN("libgit-cred-userpass-plaintext-new", cred_userpass_plaintext_new, 2, 2);
531 DEFUN("libgit-cred-username-p", cred_username_p, 1, 1);
532
533 // Describe
534 DEFUN("libgit-describe-commit", describe_commit, 1, 2);
535 DEFUN("libgit-describe-workdir", describe_workdir, 1, 2);
536
537 // Diff
538 DEFUN("libgit-diff-index-to-index", diff_index_to_index, 3, 4);
539 DEFUN("libgit-diff-index-to-workdir", diff_index_to_workdir, 1, 3);
540 DEFUN("libgit-diff-tree-to-index", diff_tree_to_index, 1, 4);
541 DEFUN("libgit-diff-tree-to-tree", diff_tree_to_tree, 1, 4);
542 DEFUN("libgit-diff-tree-to-workdir", diff_tree_to_workdir, 1, 3);
543 DEFUN("libgit-diff-tree-to-workdir-with-index", diff_tree_to_workdir_with_index, 1, 3);
544 DEFUN("libgit-diff-find-similar", diff_find_similar, 1, 2);
545
546 DEFUN("libgit-diff-foreach", diff_foreach, 2, 5);
547 DEFUN("libgit-diff-print", diff_print, 1, 3);
548
549 DEFUN("libgit-diff-delta-file-id", diff_delta_file_id, 1, 2);
550 DEFUN("libgit-diff-delta-file-path", diff_delta_file_path, 1, 2);
551 DEFUN("libgit-diff-delta-nfiles", diff_delta_nfiles, 1, 1);
552 DEFUN("libgit-diff-delta-similarity", diff_delta_similarity, 1, 1);
553 DEFUN("libgit-diff-delta-status", diff_delta_status, 1, 1);
554 DEFUN("libgit-diff-delta-file-exists-p", diff_delta_file_exists_p, 1, 2);
555
556 DEFUN("libgit-diff-hunk-header", diff_hunk_header, 1, 1);
557 DEFUN("libgit-diff-hunk-lines", diff_hunk_lines, 1, 2);
558 DEFUN("libgit-diff-hunk-start", diff_hunk_start, 1, 2);
559
560 DEFUN("libgit-diff-line-origin", diff_line_origin, 1, 1);
561 DEFUN("libgit-diff-line-lineno", diff_line_lineno, 2, 2);
562 DEFUN("libgit-diff-line-content", diff_line_content, 1, 1);
563
564 DEFUN("libgit-diff-get-delta", diff_get_delta, 2, 2);
565 DEFUN("libgit-diff-num-deltas", diff_num_deltas, 1, 2);
566
567 // Graph
568 DEFUN("libgit-graph-ahead-behind", graph_ahead_behind, 3, 3);
569 DEFUN("libgit-graph-descendant-p", graph_descendant_p, 3, 3);
570
571 // Ignore
572 DEFUN("libgit-ignore-add-rule", add_rule, 2, 2);
573 DEFUN("libgit-ignore-clear-internal-rules", clear_internal_rules, 1, 1);
574 DEFUN("libgit-ignore-path-ignored-p", path_ignored_p, 2, 2);
575
576 // Index
577 DEFUN("libgit-index-caps", index_caps, 1, 1);
578 DEFUN("libgit-index-checksum", index_checksum, 1, 1);
579 DEFUN("libgit-index-conflict-foreach", index_conflict_foreach, 2, 2);
580 DEFUN("libgit-index-conflict-get", index_conflict_get, 2, 2);
581 DEFUN("libgit-index-entry-id", index_entry_id, 1, 1);
582 DEFUN("libgit-index-entry-path", index_entry_path, 1, 1);
583 DEFUN("libgit-index-entry-stage", index_entry_stage, 1, 1);
584 DEFUN("libgit-index-entrycount", index_entrycount, 1, 1);
585 DEFUN("libgit-index-get-byindex", index_get_byindex, 2, 2);
586 DEFUN("libgit-index-get-bypath", index_get_bypath, 2, 3);
587 DEFUN("libgit-index-owner", index_owner, 1, 1);
588 DEFUN("libgit-index-path", index_path, 1, 1);
589 DEFUN("libgit-index-version", index_version, 1, 1);
590 DEFUN("libgit-index-conflicts-p", index_conflicts_p, 1, 1);
591
592 DEFUN("libgit-index-add-all", index_add_all, 1, 4);
593 DEFUN("libgit-index-add-bypath", index_add_bypath, 2, 2);
594 DEFUN("libgit-index-clear", index_clear, 1, 1);
595 DEFUN("libgit-index-read", index_read, 1, 2);
596 DEFUN("libgit-index-write", index_write, 1, 1);
597 DEFUN("libgit-index-write-tree", index_write_tree, 1, 2);
598
599 // Merge
600 DEFUN("libgit-merge", merge, 2, 4);
601 DEFUN("libgit-merge-analysis", merge_analysis, 2, 2);
602 DEFUN("libgit-merge-base", merge_base, 2, 2);
603 DEFUN("libgit-merge-base-octopus", merge_base_octopus, 2, 2);
604 DEFUN("libgit-merge-bases", merge_bases, 2, 2);
605
606 // Message
607 DEFUN("libgit-message-prettify", message_prettify, 1, 2);
608 DEFUN("libgit-message-trailers", message_trailers, 1, 1);
609
610 // Object
611 DEFUN("libgit-object-lookup", object_lookup, 2, 3);
612 DEFUN("libgit-object-lookup-prefix", object_id, 2, 3);
613
614 DEFUN("libgit-object-id", object_id, 1, 1);
615 DEFUN("libgit-object-owner", object_owner, 1, 1);
616 DEFUN("libgit-object-short-id", object_short_id, 1, 1);
617
618 // Pathspec
619 DEFUN("libgit-pathspec-new", pathspec_new, 1, 1);
620 DEFUN("libgit-pathspec-matches-path", pathspec_matches_path, 3, 3);
621 DEFUN("libgit-pathspec-match-list-entrycount", pathspec_match_list_entrycount, 1, 1);
622 DEFUN("libgit-pathspec-match-list-entry", pathspec_match_list_entry, 2, 2);
623 DEFUN("libgit-pathspec-match-list-diff-entry", pathspec_match_list_diff_entry, 2, 2);
624 DEFUN("libgit-pathspec-match-list-failed-entrycount", pathspec_match_list_failed_entrycount, 1, 1);
625 DEFUN("libgit-pathspec-match-list-failed-entry", pathspec_match_list_failed_entry, 2, 2);
626 DEFUN("libgit-pathspec-match-workdir", pathspec_match_workdir, 3, 3);
627 DEFUN("libgit-pathspec-match-index", pathspec_match_index, 3, 3);
628 DEFUN("libgit-pathspec-match-tree", pathspec_match_tree, 3, 3);
629 DEFUN("libgit-pathspec-match-diff", pathspec_match_diff, 3, 3);
630
631 // Reference
632 DEFUN("libgit-reference-create", reference_create, 3, 5);
633 DEFUN("libgit-reference-create-matching", reference_create_matching, 3, 6);
634 DEFUN("libgit-reference-dup", reference_dup, 1, 1);
635 DEFUN("libgit-reference-dwim", reference_dwim, 2, 2);
636 DEFUN("libgit-reference-lookup", reference_lookup, 2, 2);
637
638 DEFUN("libgit-reference-list", reference_list, 1, 1);
639 DEFUN("libgit-reference-name", reference_name, 1, 1);
640 DEFUN("libgit-reference-owner", reference_owner, 1, 1);
641 DEFUN("libgit-reference-peel", reference_peel, 1, 2);
642 DEFUN("libgit-reference-resolve", reference_resolve, 1, 1);
643 DEFUN("libgit-reference-shorthand", reference_shorthand, 1, 1);
644 DEFUN("libgit-reference-symbolic-target", reference_symbolic_target, 1, 1);
645 DEFUN("libgit-reference-target", reference_target, 1, 1);
646 DEFUN("libgit-reference-target-peel", reference_target, 1, 1);
647 DEFUN("libgit-reference-type", reference_type, 1, 1);
648
649 DEFUN("libgit-reference-delete", reference_delete, 1, 1);
650 DEFUN("libgit-reference-ensure-log", reference_ensure_log, 2, 2);
651 DEFUN("libgit-reference-remove", reference_delete, 2, 2);
652
653 DEFUN("libgit-reference-branch-p", reference_branch_p, 1, 1);
654 DEFUN("libgit-reference-direct-p", reference_direct_p, 1, 1);
655 DEFUN("libgit-reference-has-log-p", reference_has_log_p, 2, 2);
656 DEFUN("libgit-reference-name-to-id", reference_name_to_id, 2, 2);
657 DEFUN("libgit-reference-note-p", reference_note_p, 1, 1);
658 DEFUN("libgit-reference-remote-p", reference_remote_p, 1, 1);
659 DEFUN("libgit-reference-symbolic-p", reference_symbolic_p, 1, 1);
660 DEFUN("libgit-reference-tag-p", reference_tag_p, 1, 1);
661 DEFUN("libgit-reference-valid-name-p", reference_valid_name_p, 1, 1);
662
663 DEFUN("libgit-reference-foreach", reference_foreach, 2, 2);
664 DEFUN("libgit-reference-foreach-glob", reference_foreach_glob, 3, 3);
665 DEFUN("libgit-reference-foreach-name", reference_foreach_name, 2, 2);
666
667 // Reflog
668 DEFUN("libgit-reflog-read", reflog_read, 1, 2);
669 DEFUN("libgit-reflog-entry-byindex", reflog_entry_byindex, 2, 2);
670 DEFUN("libgit-reflog-entry-committer", reflog_entry_committer, 1, 1);
671 DEFUN("libgit-reflog-entry-id", reflog_entry_id, 1, 2);
672 DEFUN("libgit-reflog-entry-message", reflog_entry_message, 1, 1);
673 DEFUN("libgit-reflog-entrycount", reflog_entrycount, 1, 1);
674 DEFUN("libgit-reflog-append", reflog_append, 3, 4);
675 DEFUN("libgit-reflog-drop", reflog_drop, 2, 3);
676 DEFUN("libgit-reflog-rename", reflog_rename, 3, 3);
677 DEFUN("libgit-reflog-write", reflog_write, 1, 1);
678
679 // Refspec
680 DEFUN("libgit-refspec-direction", refspec_direction, 1, 1);
681 DEFUN("libgit-refspec-dst", refspec_dst, 1, 1);
682 DEFUN("libgit-refspec-src", refspec_src, 1, 1);
683 DEFUN("libgit-refspec-string", refspec_string, 1, 1);
684 DEFUN("libgit-refspec-dst-matches-p", refspec_dst_matches_p, 2, 2);
685 DEFUN("libgit-refspec-force-p", refspec_force_p, 1, 1);
686 DEFUN("libgit-refspec-src-matches-p", refspec_src_matches_p, 2, 2);
687
688 // Remote
689 DEFUN("libgit-remote-create", remote_create, 3, 3);
690 DEFUN("libgit-remote-lookup", remote_lookup, 2, 2);
691
692 DEFUN("libgit-remote-autotag", remote_autotag, 1, 1);
693 DEFUN("libgit-remote-get-refspec", remote_get_refspec, 2, 2);
694 DEFUN("libgit-remote-get-refspecs", remote_get_refspecs, 1, 2);
695 DEFUN("libgit-remote-name", remote_name, 1, 1);
696 DEFUN("libgit-remote-owner", remote_owner, 1, 1);
697 DEFUN("libgit-remote-pushurl", remote_pushurl, 1, 1);
698 DEFUN("libgit-remote-refspec-count", remote_refspec_count, 1, 1);
699 DEFUN("libgit-remote-url", remote_url, 1, 1);
700 DEFUN("libgit-remote-list", remote_list, 1, 1);
701 DEFUN("libgit-remote-valid-name-p", remote_valid_name_p, 1, 1);
702
703 DEFUN("libgit-remote-add-refspec", remote_add_refspec, 3, 4);
704 DEFUN("libgit-remote-fetch", remote_fetch, 1, 4);
705 DEFUN("libgit-remote-push", remote_push, 1, 3);
706
707 // Repository
708 DEFUN("libgit-repository-init", repository_init, 1, 2);
709 DEFUN("libgit-repository-open", repository_open, 1, 1);
710 DEFUN("libgit-repository-open-bare", repository_open_bare, 1, 1);
711
712 DEFUN("libgit-repository-commondir", repository_commondir, 1, 1);
713 DEFUN("libgit-repository-config", repository_config, 1, 1);
714 DEFUN("libgit-repository-get-namespace", repository_get_namespace, 1, 1);
715 DEFUN("libgit-repository-head", repository_head, 1, 1);
716 DEFUN("libgit-repository-head-for-worktree", repository_head_for_worktree, 2, 2);
717 DEFUN("libgit-repository-ident", repository_ident, 1, 1);
718 DEFUN("libgit-repository-index", repository_index, 1, 1);
719 DEFUN("libgit-repository-message", repository_message, 1, 1);
720 DEFUN("libgit-repository-path", repository_path, 1, 1);
721 DEFUN("libgit-repository-state", repository_state, 1, 1);
722 DEFUN("libgit-repository-workdir", repository_workdir, 1, 1);
723
724 DEFUN("libgit-repository-detach-head", repository_detach_head, 1, 1);
725 DEFUN("libgit-repository-message-remove", repository_message_remove, 1, 1);
726 DEFUN("libgit-repository-set-head", repository_set_head, 2, 2);
727 DEFUN("libgit-repository-set-head-detached", repository_set_head_detached, 2, 2);
728 DEFUN("libgit-repository-set-ident", repository_set_ident, 1, 3);
729 DEFUN("libgit-repository-set-namespace", repository_set_namespace, 2, 2);
730 DEFUN("libgit-repository-set-workdir", repository_set_workdir, 2, 3);
731 DEFUN("libgit-repository-state-cleanup", repository_state_cleanup, 1, 1);
732
733 DEFUN("libgit-repository-bare-p", repository_bare_p, 1, 1);
734 DEFUN("libgit-repository-empty-p", repository_empty_p, 1, 1);
735 DEFUN("libgit-repository-head-detached-p", repository_empty_p, 1, 1);
736 DEFUN("libgit-repository-head-unborn-p", repository_empty_p, 1, 1);
737 DEFUN("libgit-repository-shallow-p", repository_shallow_p, 1, 1);
738 DEFUN("libgit-repository-worktree-p", repository_worktree_p, 1, 1);
739
740 DEFUN("libgit-repository-discover", repository_discover, 0, 3);
741
742 // Reset
743 DEFUN("libgit-reset", reset, 3, 4);
744 DEFUN("libgit-reset-from-annotated", reset_from_annotated, 3, 4);
745 DEFUN("libgit-reset-default", reset_default, 3, 3);
746
747 // Revert
748 DEFUN("libgit-revert", revert, 2, 5);
749 DEFUN("libgit-revert-commit", revert_commit, 3, 5);
750
751 // Revparse
752 DEFUN("libgit-revparse", revparse, 2, 2);
753 DEFUN("libgit-revparse-ext", revparse_ext, 2, 2);
754 DEFUN("libgit-revparse-single", revparse_single, 2, 2);
755
756 // Revwalk
757 DEFUN("libgit-revwalk-new", revwalk_new, 1, 1);
758 DEFUN("libgit-revwalk-repository", revwalk_repository, 1, 1);
759
760 DEFUN("libgit-revwalk-hide", revwalk_hide, 2, 2);
761 DEFUN("libgit-revwalk-hide-glob", revwalk_hide_glob, 2, 2);
762 DEFUN("libgit-revwalk-hide-head", revwalk_hide_head, 1, 1);
763 DEFUN("libgit-revwalk-hide-ref", revwalk_hide_ref, 2, 2);
764
765 DEFUN("libgit-revwalk-push", revwalk_push, 2, 2);
766 DEFUN("libgit-revwalk-push-glob", revwalk_push_glob, 2, 2);
767 DEFUN("libgit-revwalk-push-head", revwalk_push_head, 1, 1);
768 DEFUN("libgit-revwalk-push-range", revwalk_push_range, 2, 2);
769 DEFUN("libgit-revwalk-push-ref", revwalk_push_ref, 2, 2);
770
771 DEFUN("libgit-revwalk-reset", revwalk_reset, 1, 1);
772 DEFUN("libgit-revwalk-simplifiy-first-parent", revwalk_simplify_first_parent, 1, 1);
773 DEFUN("libgit-revwalk-sorting", revwalk_sorting, 1, 2);
774
775 DEFUN("libgit-revwalk-foreach", revwalk_foreach, 2, 3);
776
777 // Signature
778 DEFUN("libgit-signature-default", signature_default, 1, 1);
779 DEFUN("libgit-signature-from-string", signature_from_string, 1, 1);
780 DEFUN("libgit-signature-new", signature_new, 3, 3);
781 DEFUN("libgit-signature-now", signature_now, 2, 2);
782 DEFUN("libgit-signature-name", signature_name, 1, 1);
783 DEFUN("libgit-signature-email", signature_email, 1, 1);
784 DEFUN("libgit-signature-time", signature_time, 1, 1);
785
786 // Status
787 DEFUN("libgit-status-decode", status_decode, 1, 1);
788 DEFUN("libgit-status-file", status_file, 2, 2);
789 DEFUN("libgit-status-should-ignore-p", status_should_ignore_p, 2, 2);
790 DEFUN("libgit-status-foreach-ext", status_foreach_ext, 2, 6);
791
792 // Submodule
793 DEFUN("libgit-submodule-add-setup", submodule_add_setup, 3, 4);
794 DEFUN("libgit-submodule-lookup", submodule_lookup, 2, 2);
795 DEFUN("libgit-submodule-foreach", submodule_foreach, 2, 2);
796
797 DEFUN("libgit-submodule-branch", submodule_branch, 1, 1);
798 DEFUN("libgit-submodule-fetch-recurse-submodules", submodule_fetch_recurse_submodules, 1, 1);
799 DEFUN("libgit-submodule-head-id", submodule_head_id, 1, 1);
800 DEFUN("libgit-submodule-ignore", submodule_ignore, 1, 1);
801 DEFUN("libgit-submodule-index-id", submodule_index_id, 1, 1);
802 DEFUN("libgit-submodule-location", submodule_location, 1, 2);
803 DEFUN("libgit-submodule-name", submodule_name, 1, 1);
804 DEFUN("libgit-submodule-open", submodule_open, 1, 1);
805 DEFUN("libgit-submodule-owner", submodule_owner, 1, 1);
806 DEFUN("libgit-submodule-path", submodule_path, 1, 1);
807 DEFUN("libgit-submodule-status", submodule_status, 2, 4);
808 DEFUN("libgit-submodule-update-strategy", submodule_update_strategy, 1, 1);
809 DEFUN("libgit-submodule-url", submodule_url, 1, 1);
810 DEFUN("libgit-submodule-wd-id", submodule_wd_id, 1, 1);
811
812 DEFUN("libgit-submodule-add-finalize", submodule_add_finalize, 1, 1);
813 DEFUN("libgit-submodule-add-to-index", submodule_add_to_index, 1, 2);
814 DEFUN("libgit-submodule-init", submodule_init, 1, 2);
815 DEFUN("libgit-submodule-reload", submodule_reload, 1, 2);
816 DEFUN("libgit-submodule-repo-init", submodule_repo_init, 1, 2);
817 DEFUN("libgit-submodule-set-branch", submodule_set_branch, 3, 3);
818 DEFUN("libgit-submodule-set-fetch-recurse-submodules", submodule_set_fetch_recurse_submodules, 2, 3);
819 DEFUN("libgit-submodule-set-ignore", submodule_set_ignore, 3, 3);
820 DEFUN("libgit-submodule-set-update", submodule_set_update, 3, 3);
821 DEFUN("libgit-submodule-set-url", submodule_set_url, 3, 3);
822 DEFUN("libgit-submodule-sync", submodule_sync, 1, 1);
823 DEFUN("libgit-submodule-update", submodule_sync, 1, 5);
824
825 // Tag
826 DEFUN("libgit-tag-lookup", tag_lookup, 2, 2);
827 DEFUN("libgit-tag-lookup-prefix", tag_lookup_prefix, 2, 2);
828 DEFUN("libgit-tag-foreach", tag_foreach, 2, 2);
829 DEFUN("libgit-tag-id", tag_id, 1, 1);
830 DEFUN("libgit-tag-owner", tag_owner, 1, 1);
831 DEFUN("libgit-tag-message", tag_message, 1, 1);
832 DEFUN("libgit-tag-name", tag_name, 1, 1);
833 DEFUN("libgit-tag-peel", tag_peel, 1, 1);
834 DEFUN("libgit-tag-target", tag_target, 1, 1);
835 DEFUN("libgit-tag-target-id", tag_target_id, 1, 1);
836 DEFUN("libgit-tag-target-type", tag_target_type, 1, 1);
837 DEFUN("libgit-tag-list", tag_list, 1, 2);
838
839 // Transaction
840 DEFUN("libgit-transaction-commit", transaction_commit, 1, 1);
841
842 // Tree
843 DEFUN("libgit-tree-lookup", tree_lookup, 2, 2);
844 DEFUN("libgit-tree-lookup-prefix", tree_lookup_prefix, 2, 2);
845
846 DEFUN("libgit-tree-id", tree_id, 1, 1);
847 DEFUN("libgit-tree-owner", tree_owner, 1, 1);
848
849 DEFUN("libgit-tree-entry-byid", tree_entry_byid, 2, 2);
850 DEFUN("libgit-tree-entry-byindex", tree_entry_byindex, 2, 2);
851 DEFUN("libgit-tree-entry-byname", tree_entry_byname, 2, 2);
852 DEFUN("libgit-tree-entry-bypath", tree_entry_bypath, 2, 2);
853 DEFUN("libgit-tree-entrycount", tree_entrycount, 1, 1);
854
855 DEFUN("libgit-tree-walk", tree_walk, 3, 3);
856
857 // Treebuilder
858 DEFUN("libgit-treebuilder-new", treebuilder_new, 1, 2);
859 DEFUN("libgit-treebuilder-entrycount", treebuilder_entrycount, 1, 1);
860 DEFUN("libgit-treebuilder-get", treebuilder_get, 2, 2);
861 DEFUN("libgit-treebuilder-clear", treebuilder_clear, 1, 1);
862 DEFUN("libgit-treebuilder-insert", treebuilder_insert, 4, 4);
863 DEFUN("libgit-treebuilder-remove", treebuilder_remove, 2, 2);
864 DEFUN("libgit-treebuilder-write", treebuilder_write, 1, 1);
865 DEFUN("libgit-treebuilder-filter", treebuilder_filter, 2, 2);
866 }
867