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 
import nimgit2
import types, free, oid

proc lookupObjectIdByName* (repo: GitRepository, name: string): GitObjectId =
    result = initGitObjectId()
    let error = git_reference_name_to_id(result, repo, cstring(name))

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


proc lookupObject* (repo: GitRepository, name: string): GitObject = 
    let error = git_revparse_single(addr result, repo, cstring(name)).getResultCode

    if error != grcOk:
        free(result)
        case error:
            of grcNotFound: raise newException(CatchableError, "Object not found.")
            of grcAmbiguous: raise newException(CatchableError, "Object lookup was ambiguous")
            of grcInvalidSpec: raise newException(CatchableError, "Object lookup was ambiguous")
            else: raise newException(CatchableError, "Object lookup failed: " & $error)

proc type* (obj: GitObject): GitObjectKind = GitObjectKind(git_object_type(obj) - GIT_OBJECT_ANY)


proc copy* (obj: GitObject): GitObject =
    let error = git_object_dup(addr result, obj)

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


proc shortId* (obj: GitObject): string =
    var buffer: git_buf

    let error = git_object_short_id(addr buffer, obj)

    if error != 0:
        git_buf_dispose(addr buffer);
        raise newException(CatchableError, "Cannot short id: " & $error.getResultCode)

    result = $buffer.ptr

    git_buf_dispose(addr buffer);