commit c4dae0726f643688e1c1b05f5b58a1706ed930a4
parent db4fea498da41c9ffb799eb960acabe701717188
Author: Leah (ctucx) <leah@ctu.cx>
Date: Thu, 18 Mar 2021 00:26:38 +0100
parent db4fea498da41c9ffb799eb960acabe701717188
Author: Leah (ctucx) <leah@ctu.cx>
Date: Thu, 18 Mar 2021 00:26:38 +0100
tree.nim: add new procs lookupTree, type, owner, id, shortId, entry; add new iterator items
1 file changed, 45 insertions(+), 0 deletions(-)
diff --git a/nimgit/tree.nim b/nimgit/tree.nim @@ -0,0 +1,44 @@ +import nimgit2 +import types, free, utils, objects + +proc lookupTree* (repo: GitRepository, id: GitObjectId): GitTree = + let error = git_tree_lookup(addr result, repo, id) + + if error != 0: + free(result) + raise newException(CatchableError, "Tree lookup failed: " & $error.getResultCode) + +proc type* (obj: GitTree): GitObjectKind = cast[GitObject](obj).type + +proc owner* (tree: GitTree): GitRepository = git_tree_owner(tree) + +proc id* (tree: GitTree): GitObjectId = git_tree_id(tree) + +proc shortId* (tree: GitTree): string = cast[GitObject](tree).shortId() + +proc len* (tree: GitTree): int = cast[int](git_tree_entrycount(tree)) + +proc entry* (tree: GitTree, id: int): GitTreeEntry = git_tree_entry_byindex(tree, cuint(id)) + +proc entry* (tree: GitTree, id: GitObjectId): GitTreeEntry = git_tree_entry_byid(tree, id) + +proc entry* (tree: GitTree, name: string): GitTreeEntry = git_tree_entry_byname(tree, cstring(name)) + +proc entry* (tree: GitTree, path: string): GitTreeEntry = + let error = git_tree_entry_bypath(addr result, tree, cstring(path)).getResultCode + + if error != grcOk: + free(result) + if error != grcNotFound: + raise newException(CatchableError, "TreeEntry lookup failed: " & $error) + else: + raise newException(CatchableError, "TreeEntry not found") + + +iterator items* (tree: GitTree): GitTreeEntry = + var counter: int + let treeLen = tree.len + + while counter < treeLen: + yield tree.entry(counter) + inc(counter)+ \ No newline at end of file