Merge pull request #751 from mcuadros/redirect

transport: http, fix services redirecting only info/refs
diff --git a/plumbing/format/packfile/delta_selector.go b/plumbing/format/packfile/delta_selector.go
index 1d9fb5f..6710085 100644
--- a/plumbing/format/packfile/delta_selector.go
+++ b/plumbing/format/packfile/delta_selector.go
@@ -103,7 +103,7 @@
 
 		otp := newObjectToPack(o)
 		if _, ok := o.(plumbing.DeltaObject); ok {
-			otp.Original = nil
+			otp.CleanOriginal()
 		}
 
 		objectsToPack = append(objectsToPack, otp)
@@ -231,7 +231,8 @@
 			delete(indexMap, obj.Hash())
 
 			if obj.IsDelta() {
-				obj.Original = nil
+				obj.SaveOriginalMetadata()
+				obj.CleanOriginal()
 			}
 		}
 
diff --git a/plumbing/format/packfile/encoder_test.go b/plumbing/format/packfile/encoder_test.go
index 63dfafa..84d03fb 100644
--- a/plumbing/format/packfile/encoder_test.go
+++ b/plumbing/format/packfile/encoder_test.go
@@ -233,10 +233,10 @@
 	// is nil.
 	po1.SetOriginal(po1.Original)
 	pd2.SetOriginal(pd2.Original)
-	pd2.SetOriginal(nil)
+	pd2.CleanOriginal()
 
 	pd3.SetOriginal(pd3.Original)
-	pd3.SetOriginal(nil)
+	pd3.CleanOriginal()
 
 	pd4.SetOriginal(pd4.Original)
 
diff --git a/plumbing/format/packfile/object_pack.go b/plumbing/format/packfile/object_pack.go
index 877581e..dfea571 100644
--- a/plumbing/format/packfile/object_pack.go
+++ b/plumbing/format/packfile/object_pack.go
@@ -81,15 +81,24 @@
 // is nil Original is set but previous resolved values are kept
 func (o *ObjectToPack) SetOriginal(obj plumbing.EncodedObject) {
 	o.Original = obj
+	o.SaveOriginalMetadata()
+}
 
-	if obj != nil {
-		o.originalSize = obj.Size()
-		o.originalType = obj.Type()
-		o.originalHash = obj.Hash()
+// SaveOriginalMetadata saves size, type and hash of Original object
+func (o *ObjectToPack) SaveOriginalMetadata() {
+	if o.Original != nil {
+		o.originalSize = o.Original.Size()
+		o.originalType = o.Original.Type()
+		o.originalHash = o.Original.Hash()
 		o.resolvedOriginal = true
 	}
 }
 
+// CleanOriginal sets Original to nil
+func (o *ObjectToPack) CleanOriginal() {
+	o.Original = nil
+}
+
 func (o *ObjectToPack) Type() plumbing.ObjectType {
 	if o.Original != nil {
 		return o.Original.Type()
diff --git a/plumbing/transport/ssh/auth_method.go b/plumbing/transport/ssh/auth_method.go
index a092b29..0cdf2b7 100644
--- a/plumbing/transport/ssh/auth_method.go
+++ b/plumbing/transport/ssh/auth_method.go
@@ -231,7 +231,7 @@
 }
 
 // NewKnownHostsCallback returns ssh.HostKeyCallback based on a file based on a
-// know_hosts file. http://man.openbsd.org/sshd#SSH_KNOWN_HOSTS_FILE_FORMAT
+// known_hosts file. http://man.openbsd.org/sshd#SSH_KNOWN_HOSTS_FILE_FORMAT
 //
 // If files is empty, the list of files will be read from the SSH_KNOWN_HOSTS
 // environment variable, example:
@@ -286,7 +286,7 @@
 	}
 
 	if len(out) == 0 {
-		return nil, fmt.Errorf("unable to find any valid know_hosts file, set SSH_KNOWN_HOSTS env variable")
+		return nil, fmt.Errorf("unable to find any valid known_hosts file, set SSH_KNOWN_HOSTS env variable")
 	}
 
 	return out, nil
diff --git a/storage/filesystem/shallow.go b/storage/filesystem/shallow.go
index 394e6ed..4b2e2dc 100644
--- a/storage/filesystem/shallow.go
+++ b/storage/filesystem/shallow.go
@@ -26,7 +26,7 @@
 
 	defer ioutil.CheckClose(f, &err)
 	for _, h := range commits {
-		if _, err := fmt.Fprintf(f, "%s\n", h); err != err {
+		if _, err := fmt.Fprintf(f, "%s\n", h); err != nil {
 			return err
 		}
 	}