@@ -20,6 +20,8 @@ type object struct {
20
20
Size int64
21
21
// Type is the type of the object being held.
22
22
Type string
23
+ // object is the gitobj object being handled.
24
+ object gitobj.Object
23
25
}
24
26
25
27
// ObjectScanner is a scanner type that scans for Git objects reference-able in
@@ -68,6 +70,11 @@ func NewObjectScannerFrom(db *gitobj.ObjectDatabase) *ObjectScanner {
68
70
// Scan() returns whether the scan was successful, or in other words, whether or
69
71
// not the scanner can continue to progress.
70
72
func (s * ObjectScanner ) Scan (oid string ) bool {
73
+ if err := s .reset (); err != nil {
74
+ s .err = err
75
+ return false
76
+ }
77
+
71
78
obj , err := s .scan (oid )
72
79
s .object = obj
73
80
@@ -88,6 +95,8 @@ func (s *ObjectScanner) Close() error {
88
95
return nil
89
96
}
90
97
98
+ s .reset ()
99
+
91
100
return nil
92
101
}
93
102
@@ -116,6 +125,21 @@ func (s *ObjectScanner) Type() string {
116
125
// operation.
117
126
func (s * ObjectScanner ) Err () error { return s .err }
118
127
128
+ func (s * ObjectScanner ) reset () error {
129
+ if s .object != nil {
130
+ if c , ok := s .object .object .(interface {
131
+ Close () error
132
+ }); ok && c != nil {
133
+ if err := c .Close (); err != nil {
134
+ return err
135
+ }
136
+ }
137
+ }
138
+
139
+ s .object , s .err = nil , nil
140
+ return nil
141
+ }
142
+
119
143
type missingErr struct {
120
144
oid string
121
145
}
@@ -162,5 +186,6 @@ func (s *ObjectScanner) scan(oid string) (*object, error) {
162
186
Oid : oid ,
163
187
Size : size ,
164
188
Type : obj .Type ().String (),
189
+ object : obj ,
165
190
}, nil
166
191
}
0 commit comments