ctucx.git: nimgit

[nimlang] nim-wrapper for libgit2

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
import times
import nimgit2
import types, free, utils, oid, objects

proc lookupCommit* (repo: GitRepository, oid: GitObjectId): GitCommit =
    let error = git_commit_lookup(addr result, repo, oid)

    if error != 0:
        free(result)
        raise newException(CatchableError, "Commit lookup failed: " & $error.getResultCode)


proc copy* (commit: GitCommit): GitCommit =
    let error = git_commit_dup(addr result, commit)

    if error != 0:
        free(result)
        raise newException(CatchableError, "Cannot copy GitCommit: " & $error.getResultCode)


proc type* (obj: GitCommit): GitObjectKind = cast[GitObject](obj).type

proc owner* (commit: GitCommit): GitRepository = git_commit_owner(commit)

proc repo* (commit: GitCommit): GitRepository = commit.owner()

proc rawHeader* (commit: GitCommit): seq[byte] = cast[seq[byte]](git_commit_raw_header(commit))

proc id* (commit: GitCommit): GitObjectId = git_commit_id(commit)

proc `$`* (commit: GitCommit): string = $commit.id()

proc shortId* (commit: GitCommit): string = cast[GitObject](commit).shortId()

proc summary* (commit: GitCommit): string = $git_commit_summary(commit)

proc body* (commit: GitCommit): string = $git_commit_body(commit)

proc message* (commit: GitCommit): string = $git_commit_message(commit)

proc messageEncoding* (commit: GitCommit): string = $git_commit_message_encoding(commit)

proc rawMessage* (commit: GitCommit): seq[byte] = cast[seq[byte]](git_commit_message_raw(commit))

proc gpgSignature* (commit: GitCommit): (string, string) =
    var signature:  git_buf
    var signedData: git_buf

    let grc = git_commit_extract_signature(addr signature, addr signedData, commit.owner, commit.id, nil).getResultCode

    if grc != grcOk:
        free(addr signature);
        free(addr signedData);

        let error = getLastError()

        if grc == grcNotFound:
            return ("", "")
        else:
            raise newException(CatchableError, "Unkown Error while extracting signature: " & error.message)

    result = ($signature.ptr, $signed_data.ptr)

    free(addr signature);
    free(addr signedData);


proc time* (commit: GitCommit): GitTime =
    result.time   = fromUnix(git_commit_time(commit))
    result.offset = git_commit_time_offset(commit)


proc author* (commit: GitCommit): GitSignature = git_commit_author(commit).parseGitSignature

proc committer* (commit: GitCommit): GitSignature = git_commit_committer(commit).parseGitSignature

proc hasParents* (commit: GitCommit): bool = cast[bool](git_commit_parentcount(commit))

proc parentCount* (commit: GitCommit): int = cast[int](git_commit_parentcount(commit))

proc parentId* (commit: GitCommit, id: int = 0): GitObjectId = git_commit_parent_id(commit, cuint(id))

proc parentIds* (commit: GitCommit): seq[GitObjectId] =
    var counter: int
    let parentCount = commit.parentCount

    while counter < parentCount:
        result.add(commit.parentId(counter))
        inc(counter)

proc parent* (commit: GitCommit, id: int = 0): GitCommit =
    let error = git_commit_parent(addr result, commit, cuint(id))

    if error != 0:
        free(result)
        raise newException(CatchableError, "parrent lookup failed: " & $error.getResultCode)

proc parents* (commit: GitCommit): seq[GitCommit] =
    var counter: int
    let parentCount = commit.parentCount

    while counter < parentCount:
        result.add(commit.parent(counter))
        inc(counter)


proc treeId* (commit: GitCommit): GitObjectId = git_commit_tree_id(commit)

proc tree* (commit: GitCommit): GitTree =
    let error = git_commit_tree(addr result, commit)

    if error != 0:
        free(result)
        raise newException(CatchableError, "tree lookup failed: " & $error.getResultCode)