aboutsummaryrefslogtreecommitdiffstats
path: root/plumbing
diff options
context:
space:
mode:
authorJavi Fontan <jfontan@gmail.com>2018-01-25 10:29:46 +0100
committerJavi Fontan <jfontan@gmail.com>2018-01-25 10:29:46 +0100
commitd5f74d2d3cd63325c6d16f5e93f78d6462ec9308 (patch)
tree8dc803bf7c1d8a9a6f628375da1daee126cd1b01 /plumbing
parent522327b572276fe94e76ff9bb5e41b1efdf69dee (diff)
downloadgo-git-d5f74d2d3cd63325c6d16f5e93f78d6462ec9308.tar.gz
plumbing: format/packfile, check nil objects in ObjectToPack
SetOriginal now skips setting resolved values if the provided object is nil. BackToOriginal also skips nil Original objects. Signed-off-by: Javi Fontan <jfontan@gmail.com>
Diffstat (limited to 'plumbing')
-rw-r--r--plumbing/format/packfile/encoder_test.go4
-rw-r--r--plumbing/format/packfile/object_pack.go16
2 files changed, 12 insertions, 8 deletions
diff --git a/plumbing/format/packfile/encoder_test.go b/plumbing/format/packfile/encoder_test.go
index 06cb1c6..63dfafa 100644
--- a/plumbing/format/packfile/encoder_test.go
+++ b/plumbing/format/packfile/encoder_test.go
@@ -233,10 +233,10 @@ func (s *EncoderSuite) deltaOverDeltaCyclicTest(c *C) {
// is nil.
po1.SetOriginal(po1.Original)
pd2.SetOriginal(pd2.Original)
- pd2.Original = nil
+ pd2.SetOriginal(nil)
pd3.SetOriginal(pd3.Original)
- pd3.Original = nil
+ pd3.SetOriginal(nil)
pd4.SetOriginal(pd4.Original)
diff --git a/plumbing/format/packfile/object_pack.go b/plumbing/format/packfile/object_pack.go
index 284871f..877581e 100644
--- a/plumbing/format/packfile/object_pack.go
+++ b/plumbing/format/packfile/object_pack.go
@@ -53,7 +53,7 @@ func newDeltaObjectToPack(base *ObjectToPack, original, delta plumbing.EncodedOb
// BackToOriginal converts that ObjectToPack to a non-deltified object if it was one
func (o *ObjectToPack) BackToOriginal() {
- if o.IsDelta() {
+ if o.IsDelta() && o.Original != nil {
o.Object = o.Original
o.Base = nil
o.Depth = 0
@@ -77,13 +77,17 @@ func (o *ObjectToPack) WantWrite() bool {
return o.Offset == 1
}
-// SetOriginal sets both Original and saves size, type and hash
+// SetOriginal sets both Original and saves size, type and hash. If object
+// is nil Original is set but previous resolved values are kept
func (o *ObjectToPack) SetOriginal(obj plumbing.EncodedObject) {
o.Original = obj
- o.originalSize = obj.Size()
- o.originalType = obj.Type()
- o.originalHash = obj.Hash()
- o.resolvedOriginal = true
+
+ if obj != nil {
+ o.originalSize = obj.Size()
+ o.originalType = obj.Type()
+ o.originalHash = obj.Hash()
+ o.resolvedOriginal = true
+ }
}
func (o *ObjectToPack) Type() plumbing.ObjectType {