diff options
author | Robert G. Jakabosky <bobby@sharedrealm.com> | 2011-01-08 00:18:56 -0800 |
---|---|---|
committer | Robert G. Jakabosky <bobby@sharedrealm.com> | 2011-01-08 00:18:56 -0800 |
commit | d606dba5042fc83f32ff463b2605650a24586648 (patch) | |
tree | 3350dc94ee2b91eefc89b24bbb9de88c4c0c25de | |
parent | 588900de127f5b5024250d24e660dd5574870d50 (diff) | |
download | luagit2-d606dba5042fc83f32ff463b2605650a24586648.tar.gz |
Cleanup RawObject. Added missing Repository.init() method.
-rw-r--r-- | database.nobj.lua | 14 | ||||
-rw-r--r-- | database_backend.nobj.lua | 4 | ||||
-rw-r--r-- | rawobject.nobj.lua | 64 | ||||
-rw-r--r-- | repository.nobj.lua | 8 |
4 files changed, 49 insertions, 41 deletions
diff --git a/database.nobj.lua b/database.nobj.lua index 487f0da..a5ad94b 100644 --- a/database.nobj.lua +++ b/database.nobj.lua @@ -53,11 +53,11 @@ object "Database" { var_out{"GitError", "err"}, c_source [[ RawObject raw; - git_rawobj obj; - ${err} = git_odb_read(&(obj), ${this}, &(${id})); + git_rawobj git; + ${err} = git_odb_read(&(git), ${this}, &(${id})); if(${err} == GIT_SUCCESS) { /* convert git_rawobj to RawObject */ - RawObject_from_git_rawobj(L, &raw, &obj); + RawObject_from_git_rawobj(L, &raw, &git); ${obj} = &(raw); } ]], @@ -68,11 +68,11 @@ object "Database" { var_out{"GitError", "err"}, c_source [[ RawObject raw; - git_rawobj obj; - ${err} = git_odb_read_header(&(obj), ${this}, &(${id})); + git_rawobj git; + ${err} = git_odb_read_header(&(git), ${this}, &(${id})); if(${err} == GIT_SUCCESS) { /* convert git_rawobj to RawObject */ - RawObject_from_git_rawobj(L, &raw, &obj); + RawObject_from_git_rawobj(L, &raw, &git); ${obj} = &(raw); } ]], @@ -82,7 +82,7 @@ object "Database" { var_out{"OID", "id"}, var_out{"GitError", "err"}, c_source [[ - ${err} = git_odb_write(&(${id}), ${this}, &(${obj}->raw)); + ${err} = git_odb_write(&(${id}), ${this}, &(${obj}->git)); ]], }, method "exists" { diff --git a/database_backend.nobj.lua b/database_backend.nobj.lua index f0ccac6..61b37ab 100644 --- a/database_backend.nobj.lua +++ b/database_backend.nobj.lua @@ -64,7 +64,7 @@ static int database_backend_read_cb(git_rawobj *obj, git_odb_backend *backend, c err = lua_tointeger(L, -1); if(err == 0) { RawObject *raw_obj = obj_type_RawObject_check(L,-2); - *obj = raw_obj->raw; + *obj = raw_obj->git; } return err; @@ -85,7 +85,7 @@ static int database_backend_read_header_cb(git_rawobj *obj, git_odb_backend *bac err = lua_tointeger(L, -1); if(err == 0) { RawObject *raw_obj = obj_type_RawObject_check(L,-2); - *obj = raw_obj->raw; + *obj = raw_obj->git; } return err; diff --git a/rawobject.nobj.lua b/rawobject.nobj.lua index 6719567..6f14156 100644 --- a/rawobject.nobj.lua +++ b/rawobject.nobj.lua @@ -20,37 +20,32 @@ c_source [[ typedef struct RawObject { - git_rawobj raw; + git_rawobj git; int ref; } RawObject; -static void RawObject_set_data_and_ref(lua_State *L, RawObject *obj, const char *data, int len, int idx) { - /* clear old data. */ - if(obj->ref == LUA_NOREF) { - if(obj->raw.data != NULL) { - git_rawobj_close(&(obj->raw)); - } - } else { - /* this raw object was pointing to a Lua string, release our reference to it. */ - luaL_unref(L, LUA_REGISTRYINDEX, obj->ref); +static void RawObject_set_data_and_ref(lua_State *L, RawObject *raw, const char *data, int len, int idx) { + /* Release old reference. */ + if(raw->ref != LUA_REFNIL) { + luaL_unref(L, LUA_REGISTRYINDEX, raw->ref); } - obj->raw.data = (void *)data; - obj->raw.len = len; + raw->git.data = (void *)data; + raw->git.len = len; if(data) { - /* keep a reference to the Lua string. */ + /* Get a reference to the Lua string. */ lua_pushvalue(L, idx); - obj->ref = luaL_ref(L, LUA_REGISTRYINDEX); + raw->ref = luaL_ref(L, LUA_REGISTRYINDEX); } else { - obj->ref = LUA_NOREF; + raw->ref = LUA_REFNIL; } } -static void RawObject_from_git_rawobj(lua_State *L, RawObject *raw, const git_rawobj *obj) { +static void RawObject_from_git_rawobj(lua_State *L, RawObject *raw, const git_rawobj *git) { /* push raw object's data onto stack. */ - lua_pushlstring(L, obj->data, obj->len); + lua_pushlstring(L, git->data, git->len); /* get Lua's pointer to the string. */ - raw->raw.data = (void *)lua_tolstring(L, -1, &(raw->raw.len)); - raw->raw.type = obj->type; + raw->git.data = (void *)lua_tolstring(L, -1, &(raw->git.len)); + raw->git.type = git->type; /* get reference to string. */ raw->ref = luaL_ref(L, LUA_REGISTRYINDEX); } @@ -64,25 +59,30 @@ object "RawObject" { var_in{"const char *", "type"}, var_in{"const char *", "data"}, c_source [[ - RawObject obj; - ${this} = &(obj); - obj.raw.data = NULL; - obj.raw.len = 0; - obj.raw.type = git_object_string2type(${type}); - obj.ref = LUA_NOREF; - RawObject_set_data_and_ref(L, &obj, ${data}, ${data}_len, ${data::idx}); + RawObject raw; /* temp. storage, this gets copied. */ + ${this} = &(raw); + raw.git.type = git_object_string2type(${type}); + raw.ref = LUA_REFNIL; + RawObject_set_data_and_ref(L, &raw, ${data}, ${data}_len, ${data::idx}); ]], }, destructor "close" { c_source [[ + luaL_unref(L, LUA_REGISTRYINDEX, ${this}->ref); + ${this}->ref = LUA_REFNIL; + ${this}->git.data = NULL; + ${this}->git.len = 0; RawObject_set_data_and_ref(L, ${this}, NULL, 0, 0); ]], }, method "data" { var_out{"const char *", "data", has_length = true}, c_source [[ - ${data} = ${this}->raw.data; - ${data}_len = ${this}->raw.len; + /* push Lua string. */ + // TODO: add support to directly push Lua values. + //lua_rawgeti(L, LUA_REGISTRYINDEX, ${this}->ref); + ${data} = ${this}->git.data; + ${data}_len = ${this}->git.len; ]], }, method "set_data" { @@ -94,22 +94,22 @@ object "RawObject" { method "len" { var_out{"size_t", "len"}, c_source [[ - ${len} = ${this}->raw.len; + ${len} = ${this}->git.len; ]], }, method "type" { var_out{"const char *", "type"}, - c_source "${type} = git_object_type2string(${this}->raw.type);" + c_source "${type} = git_object_type2string(${this}->git.type);" }, method "set_type" { var_in{"const char *", "type"}, - c_source "${this}->raw.type = git_object_string2type(${type});" + c_source "${this}->git.type = git_object_string2type(${type});" }, method "hash" { var_out{"OID", "id"}, var_out{"GitError", "err"}, c_source [[ - ${err} = git_rawobj_hash(&(${id}), &(${this}->raw)); + ${err} = git_rawobj_hash(&(${id}), &(${this}->git)); ]], }, } diff --git a/repository.nobj.lua b/repository.nobj.lua index aa1bbd8..5b281c7 100644 --- a/repository.nobj.lua +++ b/repository.nobj.lua @@ -40,6 +40,14 @@ object "Repository" { ${err} = git_repository_open2(&(${this}), ${dir}, ${object_directory}, ${index_file}, ${work_tree}); ]], }, + constructor "init" { + var_in{"const char *", "path"}, + var_in{"bool", "is_bare"}, + var_out{"GitError", "err"}, + c_source [[ + ${err} = git_repository_init(&(${this}), ${path}, ${is_bare}); +]], + }, destructor { c_call "void" "git_repository_free" {} }, |