Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.

Commit ff18ce3

Browse files
committed
plumbing: MemoryObject.Writer tracks his own size
1 parent 5592dab commit ff18ce3

File tree

5 files changed

+37
-30
lines changed

5 files changed

+37
-30
lines changed

plumbing/memory.go

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ func (o *MemoryObject) Writer() (io.WriteCloser, error) {
5151

5252
func (o *MemoryObject) Write(p []byte) (n int, err error) {
5353
o.cont = append(o.cont, p...)
54+
o.sz = int64(len(o.cont))
55+
5456
return len(p), nil
5557
}
5658

plumbing/object/blob.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,23 @@ func (b *Blob) Decode(o plumbing.EncodedObject) error {
6868

6969
// Encode transforms a Blob into a plumbing.EncodedObject.
7070
func (b *Blob) Encode(o plumbing.EncodedObject) error {
71+
o.SetType(plumbing.BlobObject)
72+
7173
w, err := o.Writer()
7274
if err != nil {
7375
return err
7476
}
77+
7578
defer ioutil.CheckClose(w, &err)
79+
7680
r, err := b.Reader()
7781
if err != nil {
7882
return err
7983
}
84+
8085
defer ioutil.CheckClose(r, &err)
86+
8187
_, err = io.Copy(w, r)
82-
o.SetType(plumbing.BlobObject)
8388
return err
8489
}
8590

plumbing/object/commit.go

+9
Original file line numberDiff line numberDiff line change
@@ -171,30 +171,39 @@ func (b *Commit) Encode(o plumbing.EncodedObject) error {
171171
if err != nil {
172172
return err
173173
}
174+
174175
defer ioutil.CheckClose(w, &err)
176+
175177
if _, err = fmt.Fprintf(w, "tree %s\n", b.TreeHash.String()); err != nil {
176178
return err
177179
}
180+
178181
for _, parent := range b.ParentHashes {
179182
if _, err = fmt.Fprintf(w, "parent %s\n", parent.String()); err != nil {
180183
return err
181184
}
182185
}
186+
183187
if _, err = fmt.Fprint(w, "author "); err != nil {
184188
return err
185189
}
190+
186191
if err = b.Author.Encode(w); err != nil {
187192
return err
188193
}
194+
189195
if _, err = fmt.Fprint(w, "\ncommitter "); err != nil {
190196
return err
191197
}
198+
192199
if err = b.Committer.Encode(w); err != nil {
193200
return err
194201
}
202+
195203
if _, err = fmt.Fprintf(w, "\n\n%s", b.Message); err != nil {
196204
return err
197205
}
206+
198207
return err
199208
}
200209

plumbing/object/tag_test.go

+17-18
Original file line numberDiff line numberDiff line change
@@ -234,41 +234,40 @@ func (s *TagSuite) TestString(c *C) {
234234
)
235235
}
236236

237-
func (s *TagSuite) TestTagToTagString(c *C) {
237+
func (s *TagSuite) TestStringNonCommit(c *C) {
238238
store := memory.NewStorage()
239239

240-
tagOneHash := plumbing.NewHash("TAGONE")
241-
tagTwoHash := plumbing.NewHash("TAGTWO")
242-
243-
tagOne := &Tag{
244-
Target: tagTwoHash,
245-
Hash: tagOneHash,
240+
target := &Tag{
241+
Target: plumbing.NewHash("TAGONE"),
246242
Name: "TAG ONE",
243+
Message: "tag one",
247244
TargetType: plumbing.TagObject,
248245
}
249-
tagTwo := &Tag{
250-
Target: tagOneHash,
251-
Hash: tagTwoHash,
246+
247+
targetObj := &plumbing.MemoryObject{}
248+
target.Encode(targetObj)
249+
store.SetEncodedObject(targetObj)
250+
251+
tag := &Tag{
252+
Target: targetObj.Hash(),
252253
Name: "TAG TWO",
254+
Message: "tag two",
253255
TargetType: plumbing.TagObject,
254256
}
255-
oOne := &plumbing.MemoryObject{}
256-
tagOne.Encode(oOne)
257-
oTwo := &plumbing.MemoryObject{}
258-
tagTwo.Encode(oTwo)
259257

260-
store.SetEncodedObject(oOne)
261-
store.SetEncodedObject(oTwo)
258+
tagObj := &plumbing.MemoryObject{}
259+
tag.Encode(tagObj)
260+
store.SetEncodedObject(tagObj)
262261

263-
tag, err := GetTag(store, tagOneHash)
262+
tag, err := GetTag(store, tagObj.Hash())
264263
c.Assert(err, IsNil)
265264

266265
c.Assert(tag.String(), Equals,
267266
"tag TAG TWO\n"+
268267
"Tagger: <>\n"+
269268
"Date: Mon Jan 01 00:00:00 0001 +0000\n"+
270269
"\n"+
271-
"\n")
270+
"tag two\n")
272271
}
273272

274273
func (s *TagSuite) TestLongTagNameSerialization(c *C) {

plumbing/object/tree.go

+3-11
Original file line numberDiff line numberDiff line change
@@ -240,29 +240,21 @@ func (t *Tree) Encode(o plumbing.EncodedObject) error {
240240
return err
241241
}
242242

243-
var size int
244243
defer ioutil.CheckClose(w, &err)
245244
for _, entry := range t.Entries {
246-
n, err := fmt.Fprintf(w, "%o %s", entry.Mode, entry.Name)
247-
if err != nil {
245+
if _, err := fmt.Fprintf(w, "%o %s", entry.Mode, entry.Name); err != nil {
248246
return err
249247
}
250248

251-
size += n
252-
n, err = w.Write([]byte{0x00})
253-
if err != nil {
249+
if _, err = w.Write([]byte{0x00}); err != nil {
254250
return err
255251
}
256252

257-
size += n
258-
n, err = w.Write([]byte(entry.Hash[:]))
259-
if err != nil {
253+
if _, err = w.Write([]byte(entry.Hash[:])); err != nil {
260254
return err
261255
}
262-
size += n
263256
}
264257

265-
o.SetSize(int64(size))
266258
return err
267259
}
268260

0 commit comments

Comments
 (0)