From a2a51358f9953e35c8cfd385d8aa654bcf32d196 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Wed, 18 Dec 2013 12:11:19 +0400 Subject: [PATCH] Package equality, string representation. --- debian/package.go | 17 ++++++++++++++++- debian/package_test.go | 21 ++++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/debian/package.go b/debian/package.go index 8ae62bcf..42e4b39d 100644 --- a/debian/package.go +++ b/debian/package.go @@ -2,6 +2,8 @@ package debian import ( "bytes" + "fmt" + "github.com/smira/aptly/utils" debc "github.com/smira/godebiancontrol" "github.com/ugorji/go/codec" "strings" @@ -59,7 +61,7 @@ func NewPackageFromControlFile(input debc.Paragraph) *Package { // Key returns unique key identifying package func (p *Package) Key() []byte { - return []byte(p.Name + " " + p.Version + " " + p.Architecture) + return []byte("P" + p.Name + " " + p.Version + " " + p.Architecture) } // Encode does msgpack encoding of Package @@ -77,3 +79,16 @@ func (p *Package) Decode(input []byte) error { decoder := codec.NewDecoderBytes(input, &codec.MsgpackHandle{}) return decoder.Decode(p) } + +// String creates readable representation +func (p *Package) String() string { + return fmt.Sprintf("%s-%s_%s", p.Name, p.Version, p.Architecture) +} + +// Equals compares two packages to be identical +func (p *Package) Equals(p2 *Package) bool { + return p.Name == p2.Name && p.Version == p2.Version && p.Filename == p2.Filename && + p.Architecture == p2.Architecture && utils.StrSlicesEqual(p.Depends, p2.Depends) && + utils.StrSlicesEqual(p.PreDepends, p2.PreDepends) && utils.StrSlicesEqual(p.Suggests, p2.Suggests) && + utils.StrSlicesEqual(p.Recommends, p2.Recommends) && utils.StrMapsEqual(p.Extra, p2.Extra) +} diff --git a/debian/package_test.go b/debian/package_test.go index 93b4e570..f47a6b83 100644 --- a/debian/package_test.go +++ b/debian/package_test.go @@ -34,7 +34,7 @@ func (s *PackageSuite) TestNewFromPara(c *C) { func (s *PackageSuite) TestKey(c *C) { p := NewPackageFromControlFile(s.para) - c.Check(p.Key(), DeepEquals, []byte("alien-arena-common 7.40-2 i386")) + c.Check(p.Key(), DeepEquals, []byte("Palien-arena-common 7.40-2 i386")) } func (s *PackageSuite) TestEncodeDecode(c *C) { @@ -46,3 +46,22 @@ func (s *PackageSuite) TestEncodeDecode(c *C) { c.Assert(err, IsNil) c.Assert(p2, DeepEquals, p) } + +func (s *PackageSuite) TestString(c *C) { + p := NewPackageFromControlFile(s.para) + c.Assert(p.String(), Equals, "alien-arena-common-7.40-2_i386") +} + +func (s *PackageSuite) TestEquals(c *C) { + p := NewPackageFromControlFile(s.para) + + para2 := make(debc.Paragraph) + for k, v := range packagePara { + para2[k] = v + } + p2 := NewPackageFromControlFile(para2) + c.Check(p.Equals(p2), Equals, true) + + p2.Depends = []string{"package1"} + c.Check(p.Equals(p2), Equals, false) +}