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
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)