File tree Expand file tree Collapse file tree 2 files changed +32
-1
lines changed Expand file tree Collapse file tree 2 files changed +32
-1
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,8 @@ package git
4
4
#cgo pkg-config: libgit2
5
5
#include <git2.h>
6
6
#include <git2/errors.h>
7
+
8
+ extern int _go_git_odb_foreach(git_odb *db, void *payload);
7
9
*/
8
10
import "C"
9
11
import (
@@ -53,6 +55,32 @@ func (v *Odb) Read(oid *Oid) (obj *OdbObject, err error) {
53
55
return
54
56
}
55
57
58
+ //export odbForEachCb
59
+ func odbForEachCb (id * C.git_oid , payload unsafe.Pointer ) int {
60
+ ch := * (* chan * Oid )(payload )
61
+ oid := newOidFromC (id )
62
+ // Because the channel is unbuffered, we never read our own data. If ch is
63
+ // readable, the user has sent something on it, which means we should
64
+ // abort.
65
+ select {
66
+ case ch <- oid :
67
+ case <- ch :
68
+ return - 1
69
+ }
70
+ return 0 ;
71
+ }
72
+
73
+ func (v * Odb ) forEachWrap (ch chan * Oid ) {
74
+ C ._go_git_odb_foreach (v .ptr , unsafe .Pointer (& ch ))
75
+ close (ch )
76
+ }
77
+
78
+ func (v * Odb ) ForEach () chan * Oid {
79
+ ch := make (chan * Oid , 0 )
80
+ go v .forEachWrap (ch )
81
+ return ch
82
+ }
83
+
56
84
type OdbObject struct {
57
85
ptr * C.git_odb_object
58
86
}
@@ -83,4 +111,3 @@ func (object *OdbObject) Data() (data []byte) {
83
111
84
112
return blob
85
113
}
86
-
Original file line number Diff line number Diff line change @@ -20,4 +20,8 @@ int _go_git_packbuilder_foreach(git_packbuilder *pb, void *payload)
20
20
return git_packbuilder_foreach (pb , (git_packbuilder_foreach_cb )& packbuilderForEachCb , payload );
21
21
}
22
22
23
+ int _go_git_odb_foreach (git_odb * db , void * payload )
24
+ {
25
+ return git_odb_foreach (db , (git_odb_foreach_cb )& odbForEachCb , payload );
26
+ }
23
27
/* EOF */
You can’t perform that action at this time.
0 commit comments