import nimgit2 import types, free, oid proc walk* (repo: GitRepository): GitRevisionWalker = let error = git_revwalk_new(addr result, repo) if error != 0: free(result) raise newException(CatchableError, "Cannot create RevWalker: " & $error.getResultCode) proc sort* (walker: GitRevisionWalker, sort: git_sort_t = GIT_SORT_TOPOLOGICAL) = let error = git_revwalk_sorting(walker, cast[cuint](sort)) if error != 0: free(walker) raise newException(CatchableError, "Cannot set sorting: " & $error.getResultCode) proc push* (walker: GitRevisionWalker, reference: string) = let error = git_revwalk_push_ref(walker, cstring(reference)) if error != 0: free(walker) raise newException(CatchableError, "Cannot push reference: " & $error.getResultCode) proc push* (walker: GitRevisionWalker, objectId: GitObjectId) = let error = git_revwalk_push(walker, objectId) if error != 0: free(walker) raise newException(CatchableError, "Cannot push objectId: " & $error.getResultCode) proc pushHead* (walker: GitRevisionWalker) = let error = git_revwalk_push_head(walker) if error != 0: free(walker) raise newException(CatchableError, "Cannot push head: " & $error.getResultCode) proc hide* (walker: GitRevisionWalker, objectId: GitObjectId) = let error = git_revwalk_hide(walker, objectId) if error != 0: free(walker) raise newException(CatchableError, "Cannot push objectId: " & $error.getResultCode) proc hideHead* (walker: GitRevisionWalker) = let error = git_revwalk_hide_head(walker) if error != 0: free(walker) raise newException(CatchableError, "Cannot push head: " & $error.getResultCode) proc simplifyFirstParent* (walker: GitRevisionWalker) = let error = git_revwalk_simplify_first_parent(walker) if error != 0: free(walker) raise newException(CatchableError, "Cannot simplify walker: " & $error.getResultCode) proc reset* (walker: GitRevisionWalker) = let error = git_revwalk_reset(walker) if error != 0: free(walker) raise newException(CatchableError, "Cannot simplify walker: " & $error.getResultCode) iterator items* (walker: GitRevisionWalker): GitObjectId = var objectId = initGitObjectId() while true: let code = git_revwalk_next(objectId, walker).getResultCode case code: of grcOk: yield objectId of grcIterOver: free(walker) break else: raise newException(CatchableError, "iteration error: " & $code)