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

Commit eb89d2d

Browse files
alcortesmmcuadros
authored andcommitted
Fix nil tx bug (#124)
* add test for non-seekable packfiles * packfile: do not throw away the newly created transactioner
1 parent 3e7f535 commit eb89d2d

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

plumbing/format/packfile/decoder.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,15 @@ func (d *Decoder) readObjectsWithObjectStorer(count int) error {
121121
}
122122

123123
func (d *Decoder) readObjectsWithObjectStorerTx(count int) error {
124-
tx := d.o.(storer.Transactioner).Begin()
124+
d.tx = d.o.(storer.Transactioner).Begin()
125125

126126
for i := 0; i < count; i++ {
127127
obj, err := d.ReadObject()
128128
if err != nil {
129129
return err
130130
}
131131

132-
if _, err := tx.SetObject(obj); err != nil {
132+
if _, err := d.tx.SetObject(obj); err != nil {
133133
if rerr := d.tx.Rollback(); rerr != nil {
134134
return ErrRollback.AddDetails(
135135
"error: %s, during tx.Set error: %s", rerr, err,
@@ -141,7 +141,7 @@ func (d *Decoder) readObjectsWithObjectStorerTx(count int) error {
141141

142142
}
143143

144-
return tx.Commit()
144+
return d.tx.Commit()
145145
}
146146

147147
// ReadObject reads a object from the stream and return it

plumbing/format/packfile/decoder_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,34 @@ func (s *ReaderSuite) TestDecodeInMemory(c *C) {
5757
})
5858
}
5959

60+
type nonSeekableReader struct {
61+
r io.Reader
62+
}
63+
64+
func (nsr nonSeekableReader) Read(b []byte) (int, error) {
65+
return nsr.r.Read(b)
66+
}
67+
68+
func (s *ReaderSuite) TestDecodeNoSeekable(c *C) {
69+
fixtures.Basic().ByTag("packfile").Test(c, func(f *fixtures.Fixture) {
70+
reader := nonSeekableReader{
71+
r: f.Packfile(),
72+
}
73+
74+
scanner := NewScanner(reader)
75+
storage := memory.NewStorage()
76+
d, err := NewDecoder(scanner, storage)
77+
c.Assert(err, IsNil)
78+
defer d.Close()
79+
80+
ch, err := d.Decode()
81+
c.Assert(err, IsNil)
82+
c.Assert(ch, Equals, f.PackfileHash)
83+
84+
assertObjects(c, storage, expectedHashes)
85+
})
86+
}
87+
6088
var expectedHashes = []string{
6189
"918c48b83bd081e863dbe1b80f8998f058cd8294",
6290
"af2d6a6954d532f8ffb47615169c8fdf9d383a1a",

0 commit comments

Comments
 (0)