-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathphp_git2.c
132 lines (114 loc) · 3.59 KB
/
php_git2.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "php_git2.h"
#include "git2_exception.h"
#include "git2_repository.h"
#include "git2_config.h"
#include "git2_config_entry.h"
#include "git2_reference.h"
#include "git2_commit.h"
#include "git2_remote.h"
#include "git2_tree.h"
#include "git2_tree_entry.h"
#include "git2_blob.h"
#include "git2_cred.h"
static zend_class_entry *php_git2_base_ce;
static zend_object_handlers php_git2_base_handler;
static zend_function_entry git2_base_methods[] = {
{ NULL, NULL, NULL }
};
/* {{{ PHP_MINIT_FUNCTION */
PHP_MINIT_FUNCTION(git2) {
// check version
int git2_major, git2_minor, git2_rev;
git_libgit2_version(&git2_major, &git2_minor, &git2_rev);
if ((git2_major != LIBGIT2_VER_MAJOR) || (git2_minor != LIBGIT2_VER_MINOR) || (git2_rev != LIBGIT2_VER_REVISION)) {
zend_error(E_WARNING, "Compiled libgit2 and linked libgit2 do not match");
return FAILURE;
}
git_libgit2_init();
zend_class_entry ce;
INIT_CLASS_ENTRY(ce, "Git2", git2_base_methods);
php_git2_base_ce = zend_register_internal_class(&ce TSRMLS_CC);
php_git2_base_ce->create_object = NULL;
memcpy(&php_git2_base_handler, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
php_git2_base_handler.clone_obj = NULL;
#define GIT2_BASE_CONST(_x) zend_declare_class_constant_long(php_git2_base_ce, ZEND_STRL(#_x), GIT_ ## _x TSRMLS_CC)
// object types (types.h)
GIT2_BASE_CONST(OBJ_ANY);
GIT2_BASE_CONST(OBJ_BAD);
GIT2_BASE_CONST(OBJ_COMMIT);
GIT2_BASE_CONST(OBJ_TREE);
GIT2_BASE_CONST(OBJ_BLOB);
GIT2_BASE_CONST(OBJ_TAG);
GIT2_BASE_CONST(OBJ_OFS_DELTA);
GIT2_BASE_CONST(OBJ_REF_DELTA);
// filemodes
GIT2_BASE_CONST(FILEMODE_UNREADABLE);
GIT2_BASE_CONST(FILEMODE_TREE);
GIT2_BASE_CONST(FILEMODE_BLOB);
GIT2_BASE_CONST(FILEMODE_BLOB_EXECUTABLE);
GIT2_BASE_CONST(FILEMODE_LINK);
GIT2_BASE_CONST(FILEMODE_COMMIT);
// certs
GIT2_BASE_CONST(CERT_NONE);
GIT2_BASE_CONST(CERT_X509);
GIT2_BASE_CONST(CERT_HOSTKEY_LIBSSH2);
GIT2_BASE_CONST(CERT_STRARRAY);
// checkout
GIT2_BASE_CONST(CHECKOUT_NONE);
GIT2_BASE_CONST(CHECKOUT_SAFE);
GIT2_BASE_CONST(CHECKOUT_FORCE);
GIT2_BASE_CONST(CHECKOUT_RECREATE_MISSING);
GIT2_BASE_CONST(CHECKOUT_ALLOW_CONFLICTS);
GIT2_BASE_CONST(CHECKOUT_REMOVE_UNTRACKED);
GIT2_BASE_CONST(CHECKOUT_REMOVE_IGNORED);
GIT2_BASE_CONST(CHECKOUT_UPDATE_ONLY);
GIT2_BASE_CONST(CHECKOUT_DONT_UPDATE_INDEX);
GIT2_BASE_CONST(CHECKOUT_NO_REFRESH);
GIT2_BASE_CONST(CHECKOUT_SKIP_UNMERGED);
GIT2_BASE_CONST(CHECKOUT_USE_OURS);
GIT2_BASE_CONST(CHECKOUT_USE_THEIRS);
GIT2_BASE_CONST(CHECKOUT_DISABLE_PATHSPEC_MATCH);
GIT2_BASE_CONST(CHECKOUT_SKIP_LOCKED_DIRECTORIES);
GIT2_BASE_CONST(CHECKOUT_DONT_OVERWRITE_IGNORED);
GIT2_BASE_CONST(CHECKOUT_CONFLICT_STYLE_MERGE);
GIT2_BASE_CONST(CHECKOUT_CONFLICT_STYLE_DIFF3);
GIT2_BASE_CONST(CHECKOUT_DONT_REMOVE_EXISTING);
GIT2_BASE_CONST(CHECKOUT_DONT_WRITE_INDEX);
GIT2_BASE_CONST(CHECKOUT_UPDATE_SUBMODULES);
GIT2_BASE_CONST(CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED);
git2_exception_init(TSRMLS_C);
git2_repository_init(TSRMLS_C);
git2_config_init(TSRMLS_C);
git2_config_entry_init(TSRMLS_C);
git2_reference_init(TSRMLS_C);
git2_commit_init(TSRMLS_C);
git2_remote_init(TSRMLS_C);
git2_tree_init(TSRMLS_C);
git2_tree_entry_init(TSRMLS_C);
git2_blob_init(TSRMLS_C);
git2_cred_init(TSRMLS_C);
return SUCCESS;
}
/* }}} */
PHP_MSHUTDOWN_FUNCTION(git2) {
git_libgit2_shutdown();
return SUCCESS;
}
#ifdef COMPILE_DL_GIT2
ZEND_GET_MODULE(git2)
#endif
/* {{{ counter_module_entry
*/
zend_module_entry git2_module_entry = {
STANDARD_MODULE_HEADER,
"git2",
NULL,
PHP_MINIT(git2),
PHP_MSHUTDOWN(git2),
NULL,
NULL,
NULL,
PHP_GIT2_EXTVER,
STANDARD_MODULE_PROPERTIES
};
/* }}} */