import nimgit2 import types, free proc openGitRepository* (path: string): GitRepository = var repository: GitRepository let error = git_repository_open(addr repository, path) if error != 0: free(repository) raise newException(CatchableError, "Cannot open repository: " & $error.getResultCode) result = repository proc getHeadForWorktree* (repo: GitRepository, name: string): GitReference = let error = git_repository_head_for_worktree(addr result, repo, cstring(name)) if error != 0: free(result) raise newException(CatchableError, "Cannot get HEAD for worktree: " & $error.getResultCode) proc head* (repo: GitRepository): GitReference = let error = git_repository_head(addr result, repo) if error != 0: free(result) raise newException(CatchableError, "Cannot get HEAD: " & $error.getResultCode) proc isHeadDetached* (repo: GitRepository): bool = cast[bool](git_repository_head_detached(repo)) proc isHeadUnborn* (repo: GitRepository): bool = cast[bool](git_repository_head_unborn(repo)) proc tagList* (repo: GitRepository): seq[string] = var list: git_strarray let error = git_tag_list(addr list, repo) if error != 0: free(addr list) raise newException(CatchableError, "Cannot get tagList: " & $error.getResultCode) if list.count == 0'u: result = newSeq[string]() else: result = cstringArrayToSeq(cast[cstringArray](list.strings), list.count) free(addr list) proc isEmpty* (repo: GitRepository): bool = cast[bool](git_repository_is_empty(repo)) proc isWorktree* (repo: GitRepository): bool = cast[bool](git_repository_is_worktree(repo)) proc isBare* (repo: GitRepository): bool = cast[bool](git_repository_is_bare(repo)) proc path* (repo: GitRepository): string = $git_repository_path(repo) proc workdir* (repo: GitRepository): string = $git_repository_workdir(repo) proc `$`* (repo: GitRepository): string = repo.path()