summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert G. Jakabosky <bobby@sharedrealm.com>2011-01-08 00:18:56 -0800
committerRobert G. Jakabosky <bobby@sharedrealm.com>2011-01-08 00:18:56 -0800
commitd606dba5042fc83f32ff463b2605650a24586648 (patch)
tree3350dc94ee2b91eefc89b24bbb9de88c4c0c25de
parent588900de127f5b5024250d24e660dd5574870d50 (diff)
downloadluagit2-d606dba5042fc83f32ff463b2605650a24586648.tar.gz
Cleanup RawObject. Added missing Repository.init() method.
-rw-r--r--database.nobj.lua14
-rw-r--r--database_backend.nobj.lua4
-rw-r--r--rawobject.nobj.lua64
-rw-r--r--repository.nobj.lua8
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" {}
},