summaryrefslogtreecommitdiff
path: root/tests/test_rep.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_rep.lua')
-rw-r--r--tests/test_rep.lua234
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")
+