diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2012-09-08 18:36:05 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2012-09-08 18:36:05 +0100 |
commit | 31059b3105fd579b315daa7a4dbecfe89627495a (patch) | |
tree | 6316284ca389e0094c78ed9f5c18ff6bfb9fd98c | |
parent | e4331d213e31f26dfc1e4bde0810732618f6346d (diff) | |
download | gall-31059b3105fd579b315daa7a4dbecfe89627495a.tar.gz |
GALL.REPOSITORY: Test everything else
-rw-r--r-- | lib/gall/repository.lua | 31 | ||||
-rw-r--r-- | test/test-gall.repository.lua | 156 |
2 files changed, 177 insertions, 10 deletions
diff --git a/lib/gall/repository.lua b/lib/gall/repository.lua index bd047b6..5c157d8 100644 --- a/lib/gall/repository.lua +++ b/lib/gall/repository.lua @@ -8,6 +8,7 @@ local ll = require "gall.ll" local object = require "gall.object" +local tree = require "gall.tree" local chomp = ll.chomp @@ -62,6 +63,7 @@ end function repomethod:force_empty_tree() self:_run(true, "hash-object", "-t", "tree", "-w", "/dev/null") + return self:get(tree.empty_sha) end function repomethod:hash_object(type, content, inject) @@ -167,9 +169,10 @@ function repomethod:merge_base(sha_1, sha_2, get_all) args = { "-a", sha_1, sha_2 } end args.repo = self.path - local ok, out = ll.merge_base(args) - if not ok then - return nil, out + args.stderr = true + local ok, out, err = ll.merge_base(args) + if ok ~= 0 and ok ~= 1 then + return nil, (out or "") .. "\n" .. (err or "") end local ret = {} for sha in out:gmatch("([a-f0-9]+)") do @@ -187,8 +190,9 @@ function repomethod:rev_list(oldhead, newhead, firstonly) table.insert(args, 1, "--first-parent") end args.repo = self.path + args.stderr = true local ok, out = ll.rev_list(args) - if not ok then + if ok ~= 0 then return nil, out end local ret = {} @@ -202,14 +206,21 @@ function repomethod:rev_list(oldhead, newhead, firstonly) end function repomethod:symbolic_ref(name, toref) - if not toref then - return ll.symbolic_ref { "-q", name, - stderr=true, repo=self.path } - else - return ll.symbolic_ref { "-q", name, toref, + if toref then + local ok, ref, err = ll.symbolic_ref { "-q", name, toref, stderr=true, repo=self.path } + if ok ~= 0 or err:find("Unable to create") then + return nil, "Could not set " .. tostring(name) .. " to " .. tostring(toref) + end + end + local ok, ref, err = ll.symbolic_ref { "-q", name, stderr=true, repo=self.path } + if ok == 0 then + return true, ref + end + if ok == 1 then + return false end - return false, "argh" + return nil, (ref or "") .. "\n" .. (err or "") end function repomethod:config(confname, value) diff --git a/test/test-gall.repository.lua b/test/test-gall.repository.lua index 41aa63b..88be480 100644 --- a/test/test-gall.repository.lua +++ b/test/test-gall.repository.lua @@ -133,6 +133,162 @@ function suite.all_refs() assert(refs["refs/heads/master"]) end +function suite.force_empty_tree() + local repo = test_repo() + local obj = assert(repo:force_empty_tree()) + assert(obj.type == "tree") +end + +function suite.update_ref() + local repo = test_repo() + local head = repo:get("HEAD") + assert(repo:update_ref("refs/heads/temp", head.sha)) +end + +function suite.update_ref_delete() + local repo = test_repo() + local head = repo:get("HEAD") + assert(repo:update_ref("refs/heads/master", nil)) +end + +function suite.update_ref_delete_fail() + local repo = test_repo() + local head = repo:get("HEAD") + local ok, msg = repo:update_ref("refs/heads/absent", nil, "whatever", head.sha) + assert(not ok) +end + +function suite.update_server_info() + local repo = test_repo() + assert(repo:update_server_info()) + assert(io.open("test/test_repo/.git/info/refs", "r")) +end + +function suite.update_server_info_bad() + local repo = test_repo() + repo.path="/BONG" + assert(not repo:update_server_info()) +end + +function suite.check_pass_env() + local repo = test_repo() + local ok, out, err = repo:_run_with_input_and_env({GIT_EDITOR="foobar"}, + nil, gall.ll.chomp, + "var", "GIT_EDITOR") + assert(ok == 0) + assert(out == "foobar") +end + +function suite.merge_base() + local repo = test_repo() + local sha_1 = "dbd507be22d1e8933008f453ec62e9a6fbd8c832" + local sha_2 = "8b50f4e456886de10e5f40f10991a4451b64aea3" + local sha_b = "b972b3345490a898f46df143a7285cb7840b9845" + assert(repo:merge_base(sha_1, sha_2) == sha_b) +end + +function suite.merge_base_all() + local repo = test_repo() + local sha_1 = "dbd507be22d1e8933008f453ec62e9a6fbd8c832" + local sha_2 = "8b50f4e456886de10e5f40f10991a4451b64aea3" + local sha_b = "b972b3345490a898f46df143a7285cb7840b9845" + assert(repo:merge_base(sha_1, sha_2, true) == sha_b) +end + +function suite.merge_base_badsha() + local repo = test_repo() + local sha_1 = "dbd507be22d1e8933008f453ec62e9a6fbd8c833" + local sha_2 = "8b50f4e456886de10e5f40f10991a4451b64aea3" + local ok, msg = repo:merge_base(sha_1, sha_2) + assert(not ok) +end + +function suite.merge_base_nobase() + local repo = test_repo() + local sha_1 = "dbd507be22d1e8933008f453ec62e9a6fbd8c832" + local sha_2 = "ca4e324f8a86ed08d3467a1588dc01a8609a4004" + local ok, msg = repo:merge_base(sha_1, sha_2) + assert(ok == true) +end + +function suite.rev_list() + local repo = test_repo() + local sha_new = "0b65c32b6a5277ff0e75ddad9e3914148914042d" + local sha_old = "b972b3345490a898f46df143a7285cb7840b9845" + local rlist = assert(repo:rev_list(sha_old, sha_new)) +end + +function suite.rev_list_backward() + local repo = test_repo() + local sha_new = "0b65c32b6a5277ff0e75ddad9e3914148914042d" + local sha_old = "b972b3345490a898f46df143a7285cb7840b9845" + local rlist = assert(repo:rev_list(sha_new, sha_old) == true) +end + +function suite.rev_list_first() + local repo = test_repo() + local sha_new = "0b65c32b6a5277ff0e75ddad9e3914148914042d" + local sha_old = "b972b3345490a898f46df143a7285cb7840b9845" + local rlist = assert(repo:rev_list(sha_old, sha_new, true)) +end + +function suite.rev_list_bad() + local repo = test_repo() + local sha_new = "0b65c32b6a5277ff0e75ddad9e3914148914042e" + local sha_old = "b972b3345490a898f46df143a7285cb7840b9845" + assert(not repo:rev_list(sha_old, sha_new)) +end + +function suite.symbolic_ref() + local repo = test_repo() + local ok, ref = repo:symbolic_ref "HEAD" + assert(ok) + assert(ref == "refs/heads/master") +end + +function suite.symbolic_ref_not_symbolic() + local repo = test_repo() + local ok, ref = repo:symbolic_ref "refs/heads/master" + assert(ok == false) +end + +function suite.symbolic_ref_bad_name() + local repo = test_repo() + local ok, ref = repo:symbolic_ref "refs" + assert(ok == nil) + assert(ref:find("No such ref")) +end + +function suite.symbolic_ref_set() + local repo = test_repo() + local ok = repo:symbolic_ref("HEAD", "refs/heads/signed") + assert(ok) + local ok, ref = repo:symbolic_ref "HEAD" + assert(ok) + assert(ref == "refs/heads/signed") +end + +function suite.symbolic_ref_set_bad() + local repo = test_repo() + local ok, msg = repo:symbolic_ref("refs", "refs/heads/signed") + assert(ok == nil) +end + +function suite.config_read() + local repo = test_repo() + local ok, conf = repo:config("core.bare") + assert(ok) + assert(conf == "false") +end + +function suite.config_write() + local repo = test_repo() + local ok = repo:config("gall.test", "thingy") + local ok, conf = repo:config("gall.test") + assert(ok) + assert(conf == "thingy") +end + local count_ok = 0 for _, testname in ipairs(testnames) do -- print("Run: " .. testname) |