summaryrefslogtreecommitdiff
path: root/src/database_backend.nobj.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/database_backend.nobj.lua')
-rw-r--r--src/database_backend.nobj.lua198
1 files changed, 0 insertions, 198 deletions
diff --git a/src/database_backend.nobj.lua b/src/database_backend.nobj.lua
deleted file mode 100644
index 57c83c3..0000000
--- a/src/database_backend.nobj.lua
+++ /dev/null
@@ -1,198 +0,0 @@
--- Copyright (c) 2010 by Robert G. Jakabosky <bobby@sharedrealm.com>
---
--- Permission is hereby granted, free of charge, to any person obtaining a copy
--- of this software and associated documentation files (the "Software"), to deal
--- in the Software without restriction, including without limitation the rights
--- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--- copies of the Software, and to permit persons to whom the Software is
--- furnished to do so, subject to the following conditions:
---
--- The above copyright notice and this permission notice shall be included in
--- all copies or substantial portions of the Software.
---
--- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
--- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
--- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
--- THE SOFTWARE.
-
-object "DatabaseBackend" {
- c_source [[
-//typedef struct RawObject RawObject;
-#include <git2/odb_backend.h>
-
-typedef struct DatabaseBackend {
- git_odb_backend backend;
- lua_State *L;
- int read;
- int read_header;
- int write;
- int exists;
- int free;
- int ref_count;
-} DatabaseBackend;
-
-static void DatabaseBackend_ref(DatabaseBackend *backend) {
- backend->ref_count++;
-}
-
-static void DatabaseBackend_unref(DatabaseBackend *backend) {
- lua_State *L = backend->L;
- if((--backend->ref_count) == 0) {
- luaL_unref(L, LUA_REGISTRYINDEX, backend->read);
- luaL_unref(L, LUA_REGISTRYINDEX, backend->read_header);
- luaL_unref(L, LUA_REGISTRYINDEX, backend->write);
- luaL_unref(L, LUA_REGISTRYINDEX, backend->exists);
- luaL_unref(L, LUA_REGISTRYINDEX, backend->free);
- free(backend);
- }
-}
-
-static int database_backend_read_cb(git_rawobj *obj, git_odb_backend *backend, const git_oid *oid)
-{
- DatabaseBackend *lua_backend = (DatabaseBackend *)backend;
- lua_State *L = lua_backend->L;
- int err;
-
- /* get Lua callback function. */
- lua_rawgeti(L, LUA_REGISTRYINDEX, lua_backend->read);
-
- obj_type_OID_push(L, *((OID *)oid), 0);
- /* call Lua function. */
- lua_call(L, 1, 2);
- err = lua_tointeger(L, -1);
- if(err == 0) {
- RawObject *raw_obj = obj_type_RawObject_check(L,-2);
- /* copy header fields. */
- obj->len = raw_obj->git.len;
- obj->type = raw_obj->git.type;
- /* we must malloc & copy the RawObject's data. */
- if(raw_obj->git.data) {
- obj->data = malloc(obj->len);
- if(obj->data == NULL) {
- /* failed to allocate buffer. */
- return GIT_ENOMEM;
- }
- /* copy data. */
- memcpy(obj->data, raw_obj->git.data, obj->len);
- } else {
- obj->data = NULL;
- }
- }
-
- return err;
-}
-
-static int database_backend_read_header_cb(git_rawobj *obj, git_odb_backend *backend, const git_oid *oid)
-{
- DatabaseBackend *lua_backend = (DatabaseBackend *)backend;
- lua_State *L = lua_backend->L;
- int err;
-
- /* get Lua callback function. */
- lua_rawgeti(L, LUA_REGISTRYINDEX, lua_backend->read_header);
-
- obj_type_OID_push(L, *((OID *)oid), 0);
- /* call Lua function. */
- lua_call(L, 1, 2);
- err = lua_tointeger(L, -1);
- if(err == 0) {
- RawObject *raw_obj = obj_type_RawObject_check(L,-2);
- /* copy only header fields. */
- obj->data = NULL;
- obj->len = raw_obj->git.len;
- obj->type = raw_obj->git.type;
- }
-
- return err;
-}
-
-static int database_backend_write_cb(git_oid *oid, git_odb_backend *backend, git_rawobj *obj)
-{
- DatabaseBackend *lua_backend = (DatabaseBackend *)backend;
- lua_State *L = lua_backend->L;
- RawObject raw;
- int err;
-
- /* get Lua callback function. */
- lua_rawgeti(L, LUA_REGISTRYINDEX, lua_backend->write);
-
- /* convert git_rawobj to RawObject */
- RawObject_from_git_rawobj(L, &raw, obj, 0);
- /* push RawObject onto stack. */
- obj_type_RawObject_push(L, &raw, 0);
-
- /* call Lua function. */
- lua_call(L, 1, 2);
- err = lua_tointeger(L, -1);
- if(err == 0) {
- *oid = obj_type_OID_check(L,-2);
- }
-
- return err;
-}
-
-static int database_backend_exists_cb(git_odb_backend *backend, const git_oid *oid)
-{
- DatabaseBackend *lua_backend = (DatabaseBackend *)backend;
- lua_State *L = lua_backend->L;
-
- /* get Lua callback function. */
- lua_rawgeti(L, LUA_REGISTRYINDEX, lua_backend->exists);
-
- obj_type_OID_push(L, *((OID *)oid), 0);
- /* call Lua function. */
- lua_call(L, 1, 1);
- return lua_tointeger(L, -1);
-}
-
-static void database_backend_free_cb(git_odb_backend *backend)
-{
- DatabaseBackend *lua_backend = (DatabaseBackend *)backend;
- lua_State *L = lua_backend->L;
-
- /* get Lua callback function. */
- lua_rawgeti(L, LUA_REGISTRYINDEX, lua_backend->free);
-
- /* call Lua function. */
- lua_call(L, 0, 0);
-
- DatabaseBackend_unref(lua_backend);
-}
-
-]],
- constructor {
- var_in{"lua_State *", "L"},
- c_source [[
- int idx;
- int ref;
-
- luaL_checktype(L, 1, LUA_TTABLE);
- lua_settop(L, 1);
- /* create backend object. */
- ${this} = calloc(1, sizeof(DatabaseBackend));
- ${this}->ref_count = 1;
- ${this}->L = L;
- /* get each callback from table. */
-#define REF_CB(_name) \
- lua_getfield(L, 1, "on_" #_name); \
- ${this}->_name = luaL_ref(L, LUA_REGISTRYINDEX); \
- ${this}->backend._name = database_backend_ ## _name ## _cb;
-
- REF_CB(read)
- REF_CB(read_header)
- REF_CB(write)
- REF_CB(exists)
- REF_CB(free)
-#undef REF_CB
-]]
- },
- destructor {
- c_source [[
- DatabaseBackend_unref(${this});
-]]
- },
-}
-