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

plumbing: object/{commit,tag} add EncodeWithoutSignature, Implement #1116 #1127

Merged
merged 1 commit into from
Apr 24, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion plumbing/object/commit.go
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,11 @@ func (b *Commit) Encode(o plumbing.EncodedObject) error {
return b.encode(o, true)
}

// EncodeWithoutSignature export a Commit into a plumbing.EncodedObject without the signature (correspond to the payload of the PGP signature).
func (b *Commit) EncodeWithoutSignature(o plumbing.EncodedObject) error {
return b.encode(o, false)
}

func (b *Commit) encode(o plumbing.EncodedObject, includeSig bool) (err error) {
o.SetType(plumbing.CommitObject)
w, err := o.Writer()
Expand Down Expand Up @@ -349,7 +354,7 @@ func (c *Commit) Verify(armoredKeyRing string) (*openpgp.Entity, error) {

encoded := &plumbing.MemoryObject{}
// Encode commit components, excluding signature and get a reader object.
if err := c.encode(encoded, false); err != nil {
if err := c.EncodeWithoutSignature(encoded); err != nil {
return nil, err
}
er, err := encoded.Reader()
Expand Down
23 changes: 22 additions & 1 deletion plumbing/object/commit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@ import (
"bytes"
"context"
"io"
"io/ioutil"
"strings"
"time"

fixtures "gopkg.in/src-d/go-git-fixtures.v3"
"gopkg.in/src-d/go-git.v4/plumbing"
"gopkg.in/src-d/go-git.v4/plumbing/cache"

. "gopkg.in/check.v1"
"gopkg.in/src-d/go-git-fixtures.v3"
"gopkg.in/src-d/go-git.v4/storage/filesystem"
)

Expand Down Expand Up @@ -495,3 +496,23 @@ func (s *SuiteCommit) TestMalformedHeader(c *C) {
err = decoded.Decode(encoded)
c.Assert(err, IsNil)
}

func (s *SuiteCommit) TestEncodeWithoutSignature(c *C) {
//Similar to TestString since no signature
encoded := &plumbing.MemoryObject{}
err := s.Commit.EncodeWithoutSignature(encoded)
c.Assert(err, IsNil)
er, err := encoded.Reader()
c.Assert(err, IsNil)
payload, err := ioutil.ReadAll(er)
c.Assert(err, IsNil)

c.Assert(string(payload), Equals, ""+
"tree eba74343e2f15d62adedfd8c883ee0262b5c8021\n"+
"parent 35e85108805c84807bc66a02d91535e1e24b38b9\n"+
"parent a5b8b09e2f8fcb0bb99d3ccb0958157b40890d69\n"+
"author Máximo Cuadros Ortiz <mcuadros@gmail.com> 1427802494 +0200\n"+
"committer Máximo Cuadros Ortiz <mcuadros@gmail.com> 1427802494 +0200\n"+
"\n"+
"Merge branch 'master' of github.com:tyba/git-fixture\n")
}
7 changes: 6 additions & 1 deletion plumbing/object/tag.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,11 @@ func (t *Tag) Encode(o plumbing.EncodedObject) error {
return t.encode(o, true)
}

// EncodeWithoutSignature export a Tag into a plumbing.EncodedObject without the signature (correspond to the payload of the PGP signature).
func (t *Tag) EncodeWithoutSignature(o plumbing.EncodedObject) error {
return t.encode(o, false)
}

func (t *Tag) encode(o plumbing.EncodedObject, includeSig bool) (err error) {
o.SetType(plumbing.TagObject)
w, err := o.Writer()
Expand Down Expand Up @@ -291,7 +296,7 @@ func (t *Tag) Verify(armoredKeyRing string) (*openpgp.Entity, error) {

encoded := &plumbing.MemoryObject{}
// Encode tag components, excluding signature and get a reader object.
if err := t.encode(encoded, false); err != nil {
if err := t.EncodeWithoutSignature(encoded); err != nil {
return nil, err
}
er, err := encoded.Reader()
Expand Down
24 changes: 23 additions & 1 deletion plumbing/object/tag_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,17 @@ package object
import (
"fmt"
"io"
"io/ioutil"
"strings"
"time"

fixtures "gopkg.in/src-d/go-git-fixtures.v3"
"gopkg.in/src-d/go-git.v4/plumbing"
"gopkg.in/src-d/go-git.v4/plumbing/cache"
"gopkg.in/src-d/go-git.v4/storage/filesystem"
"gopkg.in/src-d/go-git.v4/storage/memory"

. "gopkg.in/check.v1"
"gopkg.in/src-d/go-git-fixtures.v3"
)

type TagSuite struct {
Expand Down Expand Up @@ -447,3 +448,24 @@ HdzbB2ak/HxIeCqmHVlmUqa+WfTMUJcsgOm3/ZFPCSoL6l0bz9Z1XVbiyD03
_, err = tag.Verify(armoredKeyRing)
c.Assert(err, IsNil)
}

func (s *TagSuite) TestEncodeWithoutSignature(c *C) {
//Similar to TestString since no signature
encoded := &plumbing.MemoryObject{}
tag := s.tag(c, plumbing.NewHash("b742a2a9fa0afcfa9a6fad080980fbc26b007c69"))
err := tag.EncodeWithoutSignature(encoded)
c.Assert(err, IsNil)
er, err := encoded.Reader()
c.Assert(err, IsNil)
payload, err := ioutil.ReadAll(er)
c.Assert(err, IsNil)

c.Assert(string(payload), Equals, ""+
"object f7b877701fbf855b44c0a9e86f3fdce2c298b07f\n"+
"type commit\n"+
"tag annotated-tag\n"+
"tagger Máximo Cuadros <mcuadros@gmail.com> 1474485215 +0200\n"+
"\n"+
"example annotated tag\n",
)
}