diff options
Diffstat (limited to 'tests/test_rep.lua')
-rw-r--r-- | tests/test_rep.lua | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/tests/test_rep.lua b/tests/test_rep.lua new file mode 100644 index 0000000..9c25d25 --- /dev/null +++ b/tests/test_rep.lua @@ -0,0 +1,234 @@ +#!/usr/bin/env lua + +local build_dir = arg[1] +local git_path = arg[2] or "./tests/test_rep/.git" +-- Make it easier to test +if ( build_dir ) then + package.cpath = build_dir .. "?.so;" .. package.cpath +end + +require"git2" +require"utils" + +print("dump git2 interface") +print(dbg_dump(git2)) + +local rep = assert(git2.Repository(git_path)) + +print("dump Repository interface") +print(dbg_dump(rep)) + +local oid = git2.OID.str("d5a93c463d4cca0068750eb6af7b4b54eea8599b") +print("dump OID interface") +print(dbg_dump(oid)) +print('convert OID value to string = <' .. tostring(oid) .. '>') + +print('test writing to the object database:') +local raw_obj = git2.RawObject('blob',"any ol content will do") +print() +print("dump RawObject interface") +print(dbg_dump(raw_obj)) +local function dump_rawobj(obj) + print('dump RawObject:', obj) + if obj == nil then + return + end + print('hash = ', obj:hash()) + print('data = "' .. tostring(obj:data()) .. '"') + print('len = ', obj:len()) + print('type = ', obj:type()) +end +print() +print("dump RawObject info:") +dump_rawobj(raw_obj) + +print() +print("test closing of RawObject:") +raw_obj:close() +dump_rawobj(raw_obj) + +print() +print("test setting data of RawObject:") +raw_obj:set_data("any ol content will do") +dump_rawobj(raw_obj) + +local db = rep:database() +print("dump Database interface") +print(dbg_dump(db)) + +print() +print("test writing RawObject to database:") +local oid, err = db:write(raw_obj) +print(oid, err) + +print() +print("test reading RawObjects from database:") +local object_ids = { + {'tree', "31f3d5703ce27f0b63c3eb0d829abdc95b51deae"}, + {'commit', "d5a93c463d4cca0068750eb6af7b4b54eea8599b"}, + {'blob', "f534deb63f967cddd4bd440d05d3f6f075e55fca"}, + {'blob', "275a4019807c7bb7bc80c0ca8903bf84345e1bdf"}, +} +for _,obj in ipairs(object_ids) do + local oid = git2.OID.str(obj[2]) + local raw_obj, err = db:read(oid) + print() + print(raw_obj, err) + dump_rawobj(raw_obj) +end + + +local commit_id = git2.OID.str("d5a93c463d4cca0068750eb6af7b4b54eea8599b") +print() +print("test parsing a commit object: ", commit_id) +local commit2, err = rep:lookup(commit_id, 'commit') +print(commit2, err) +local commit1, err = git2.Commit.lookup(rep, commit_id) +print(commit1, err) +assert(commit1 == commit2) +print("dump Commit interface") +print(dbg_dump(commit1)) +local function dump_signature(pre, sig) + print(pre .. '.name = ', sig:name()) + print(pre .. '.email = ', sig:email()) + print(pre .. '.when = ', sig:when()) +end +local function dump_blob(blob) + print("dump Blob interface") + print(dbg_dump(blob)) + print('blob.rawcontent.size =', blob:rawsize()) + print('blob.rawcontents =', blob:rawcontent()) +end +local function dump_tree_entry(entry) + if entry == nil then + return + end + print('tree_entry.id = ', entry:id()) + print('tree_entry.name = ', entry:name()) + print('tree_entry.attributes = ', string.format('0x%08X', entry:attributes())) + local obj = entry:object() + print('tree_entry.object = ', obj) + if obj:type() == 'blob' then + dump_blob(obj) + end +end +local function dump_tree(tree) + if tree == nil then + return + end + print('id = ', tree:id()) + local cnt = tree:entrycount() + print('entrycount = ', cnt) + for i=0,cnt-1 do + local entry = tree:entry_byindex(i) + print('entry:', entry) + dump_tree_entry(entry) + end +end +local function dump_commit(commit) + if commit == nil then + return + end + print('message = ', commit:message()) + print('message_short = ', commit:message_short()) + print('time = ', commit:time()) + print('tree = ', commit:tree()) + dump_tree(commit:tree()) + dump_signature('committer', commit:committer()) + dump_signature('author', commit:author()) + local cnt = commit:parentcount() + print('parentcount = ', cnt) + for i=0,cnt-1 do + local parent = commit:parent(i) + print('parent:', parent) + dump_commit(parent) + end +end +dump_commit(commit1) + +local index = rep:index() +print("dump Index interface") +print(dbg_dump(index)) +local function dump_index_entry(entry) + if entry == nil then + return + end + print(' idx.entry.ctime = ', entry:ctime()) + print(' idx.entry.mtime = ', entry:mtime()) + print(' idx.entry.dev = ', entry:dev()) + print(' idx.entry.ino = ', entry:ino()) + print(' idx.entry.mode = ', entry:mode()) + print(' idx.entry.uid = ', entry:uid()) + print(' idx.entry.gid = ', entry:gid()) + print(' idx.entry.file_size = ', entry:file_size()) + print(' idx.entry.id = ', entry:id()) + print(' idx.entry.flags = ', string.format('0x%08X', entry:flags())) + print(' idx.entry.flags_extended = ', string.format('0x%08X', entry:flags_extended())) + print(' idx.entry.path = ', entry:path()) +end +local function dump_index(index) + if index == nil then + return + end + local cnt = index:entrycount() + print('entrycount = ', cnt) + for i=0,cnt-1 do + local entry = index:get(i) + print('entry:', entry) + dump_index_entry(entry) + end +end +print('index:read():', index:read()) +dump_index(index) + +local revwalk = git2.RevWalk(rep) +print("dump RevWalk interface") +print(dbg_dump(revwalk)) +print('sorting:', revwalk:sorting(revwalk.SORT_TOPOLOGICAL + revwalk.SORT_REVERSE)) +local head_id = git2.OID.str("5c697d74eb692d650799ca1b0a10254d7130953d") +local head = assert(git2.Commit.lookup(rep, head_id)) +print('push:', revwalk:push(head)) +assert(revwalk:repository() == rep) + +local commit = revwalk:next() +while (commit ~= nil) do + dump_commit(commit) + -- get next commit + commit = revwalk:next() +end + +local tag_id = git2.OID.str('82dfe36284d77b608ccc9d96e0ffa5782cb7c835') +local tag = git2.Tag.lookup(rep, tag_id) +print("dump Tag interface") +print(dbg_dump(tag)) +local function dump_tag(tag) + if tag == nil then + return + end + print('name = ', tag:name()) + dump_signature('tagger', tag:tagger()) + print('message = ', tag:message()) + local obj = tag:target() + print('target = ', obj) +end +dump_tag(tag) + + +revwalk = nil +head = nil +commit = nil +commit1 = nil +commit2 = nil +index = nil +rep = nil +db = nil + +collectgarbage"collect" +collectgarbage"collect" +collectgarbage"collect" + + +print() +print() +print("finished") + |