Skip to content

Commit 01c428c

Browse files
authored
Merge pull request src-d#744 from jfontan/fix/make-sure-original-data-is-saved-before-creanup
plumbing: format/packfile, fix panic retrieving object hash.
2 parents 3a9d5e2 + 37c7c2b commit 01c428c

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

plumbing/format/packfile/delta_selector.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func (dw *deltaSelector) objectsToPack(
103103

104104
otp := newObjectToPack(o)
105105
if _, ok := o.(plumbing.DeltaObject); ok {
106-
otp.Original = nil
106+
otp.CleanOriginal()
107107
}
108108

109109
objectsToPack = append(objectsToPack, otp)
@@ -231,7 +231,8 @@ func (dw *deltaSelector) walk(
231231
delete(indexMap, obj.Hash())
232232

233233
if obj.IsDelta() {
234-
obj.Original = nil
234+
obj.SaveOriginalMetadata()
235+
obj.CleanOriginal()
235236
}
236237
}
237238

plumbing/format/packfile/encoder_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,10 @@ func (s *EncoderSuite) deltaOverDeltaCyclicTest(c *C) {
233233
// is nil.
234234
po1.SetOriginal(po1.Original)
235235
pd2.SetOriginal(pd2.Original)
236-
pd2.SetOriginal(nil)
236+
pd2.CleanOriginal()
237237

238238
pd3.SetOriginal(pd3.Original)
239-
pd3.SetOriginal(nil)
239+
pd3.CleanOriginal()
240240

241241
pd4.SetOriginal(pd4.Original)
242242

plumbing/format/packfile/object_pack.go

+13-4
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,24 @@ func (o *ObjectToPack) WantWrite() bool {
8181
// is nil Original is set but previous resolved values are kept
8282
func (o *ObjectToPack) SetOriginal(obj plumbing.EncodedObject) {
8383
o.Original = obj
84+
o.SaveOriginalMetadata()
85+
}
8486

85-
if obj != nil {
86-
o.originalSize = obj.Size()
87-
o.originalType = obj.Type()
88-
o.originalHash = obj.Hash()
87+
// SaveOriginalMetadata saves size, type and hash of Original object
88+
func (o *ObjectToPack) SaveOriginalMetadata() {
89+
if o.Original != nil {
90+
o.originalSize = o.Original.Size()
91+
o.originalType = o.Original.Type()
92+
o.originalHash = o.Original.Hash()
8993
o.resolvedOriginal = true
9094
}
9195
}
9296

97+
// CleanOriginal sets Original to nil
98+
func (o *ObjectToPack) CleanOriginal() {
99+
o.Original = nil
100+
}
101+
93102
func (o *ObjectToPack) Type() plumbing.ObjectType {
94103
if o.Original != nil {
95104
return o.Original.Type()

0 commit comments

Comments
 (0)