diff --git a/deb/local.go b/deb/local.go index 4be460769..e0da96f1f 100644 --- a/deb/local.go +++ b/deb/local.go @@ -168,6 +168,8 @@ func (collection *LocalRepoCollection) Update(repo *LocalRepo) error { // LoadComplete loads additional information for local repo func (collection *LocalRepoCollection) LoadComplete(repo *LocalRepo) error { + repo.packageRefs = &PackageRefList{} + encoded, err := collection.db.Get(repo.RefKey()) if err == database.ErrNotFound { return nil @@ -176,7 +178,6 @@ func (collection *LocalRepoCollection) LoadComplete(repo *LocalRepo) error { return err } - repo.packageRefs = &PackageRefList{} return repo.packageRefs.Decode(encoded) } diff --git a/deb/local_test.go b/deb/local_test.go index 07f818c3d..4a40f6bdd 100644 --- a/deb/local_test.go +++ b/deb/local_test.go @@ -133,6 +133,18 @@ func (s *LocalRepoCollectionSuite) TestByUUID(c *C) { c.Assert(r.String(), Equals, repo.String()) } +func (s *LocalRepoCollectionSuite) TestLoadCompleteNoRefKey(c *C) { + repo := NewLocalRepo("local1", "Comment 1") + c.Assert(s.collection.Update(repo), IsNil) + + r, err := s.collection.ByName("local1") + c.Assert(err, IsNil) + + c.Assert(s.collection.LoadComplete(r), IsNil) + c.Assert(r.packageRefs, NotNil) + c.Assert(r.NumPackages(), Equals, 0) +} + func (s *LocalRepoCollectionSuite) TestUpdateLoadComplete(c *C) { repo := NewLocalRepo("local1", "Comment 1") c.Assert(s.collection.Update(repo), IsNil) diff --git a/deb/reflist.go b/deb/reflist.go index e559cad4f..0a5c1831e 100644 --- a/deb/reflist.go +++ b/deb/reflist.go @@ -79,6 +79,9 @@ func (l *PackageRefList) Decode(input []byte) error { // ForEach calls handler for each package ref in list func (l *PackageRefList) ForEach(handler func([]byte) error) error { + if l == nil { + return nil + } var err error for _, p := range l.Refs { err = handler(p) diff --git a/deb/reflist_test.go b/deb/reflist_test.go index 65a9794aa..3a7297ea7 100644 --- a/deb/reflist_test.go +++ b/deb/reflist_test.go @@ -130,6 +130,17 @@ func (s *PackageRefListSuite) TestPackageRefListForeach(c *C) { c.Check(err, Equals, e) } +func (s *PackageRefListSuite) TestForEachNilList(c *C) { + var l *PackageRefList + called := false + err := l.ForEach(func([]byte) error { + called = true + return nil + }) + c.Assert(err, IsNil) + c.Assert(called, Equals, false) +} + func (s *PackageRefListSuite) TestHas(c *C) { _ = s.list.Add(s.p1) _ = s.list.Add(s.p3)