diff --git a/api/publish.go b/api/publish.go index 110dbe546..1cd0f009e 100644 --- a/api/publish.go +++ b/api/publish.go @@ -61,7 +61,7 @@ func apiPublishList(c *gin.Context) { result := make([]*deb.PublishedRepo, 0, collection.Len()) err := collection.ForEach(func(repo *deb.PublishedRepo) error { - err := collection.LoadComplete(repo, collectionFactory) + err := collection.LoadShallow(repo, collectionFactory) if err != nil { return err } diff --git a/cmd/publish_list.go b/cmd/publish_list.go index f4bbb2afb..e3a1d1a8f 100644 --- a/cmd/publish_list.go +++ b/cmd/publish_list.go @@ -34,7 +34,7 @@ func aptlyPublishListTxt(cmd *commander.Command, _ []string) error { published := make([]string, 0, collectionFactory.PublishedRepoCollection().Len()) err = collectionFactory.PublishedRepoCollection().ForEach(func(repo *deb.PublishedRepo) error { - e := collectionFactory.PublishedRepoCollection().LoadComplete(repo, collectionFactory) + e := collectionFactory.PublishedRepoCollection().LoadShallow(repo, collectionFactory) if e != nil { fmt.Fprintf(os.Stderr, "Error found on one publish (prefix:%s / distribution:%s / component:%s\n)", repo.StoragePrefix(), repo.Distribution, repo.Components()) diff --git a/deb/publish.go b/deb/publish.go index 19f216b1c..337fd0069 100644 --- a/deb/publish.go +++ b/deb/publish.go @@ -284,7 +284,7 @@ func NewPublishedRepo(storage, prefix, distribution string, architectures []stri return result, nil } -// MarshalJSON requires object to be "loaded completely" +// MarshalJSON requires object to filled by "LoadShallow" or "LoadComplete" func (p *PublishedRepo) MarshalJSON() ([]byte, error) { type sourceInfo struct { Component, Name string @@ -990,8 +990,11 @@ func (collection *PublishedRepoCollection) Update(repo *PublishedRepo) error { return batch.Write() } -// LoadComplete loads additional information for remote repo -func (collection *PublishedRepoCollection) LoadComplete(repo *PublishedRepo, collectionFactory *CollectionFactory) (err error) { +// LoadShallow loads basic information on the repo's sources +// +// This does not *fully* load in the sources themselves and their packages. +// It's useful if you just want to use JSON serialization without loading in unnecessary things. +func (collection *PublishedRepoCollection) LoadShallow(repo *PublishedRepo, collectionFactory *CollectionFactory) (err error) { repo.sourceItems = make(map[string]repoSourceItem) if repo.SourceKind == SourceSnapshot { @@ -1002,10 +1005,6 @@ func (collection *PublishedRepoCollection) LoadComplete(repo *PublishedRepo, col if err != nil { return } - err = collectionFactory.SnapshotCollection().LoadComplete(item.snapshot) - if err != nil { - return - } repo.sourceItems[component] = item } @@ -1017,6 +1016,30 @@ func (collection *PublishedRepoCollection) LoadComplete(repo *PublishedRepo, col if err != nil { return } + + item.packageRefs = &PackageRefList{} + repo.sourceItems[component] = item + } + } else { + panic("unknown SourceKind") + } + + return +} + +// LoadComplete loads complete information on the sources of the repo *and* their packages +func (collection *PublishedRepoCollection) LoadComplete(repo *PublishedRepo, collectionFactory *CollectionFactory) (err error) { + collection.LoadShallow(repo, collectionFactory) + + if repo.SourceKind == SourceSnapshot { + for _, item := range repo.sourceItems { + err = collectionFactory.SnapshotCollection().LoadComplete(item.snapshot) + if err != nil { + return + } + } + } else if repo.SourceKind == SourceLocalRepo { + for component, item := range repo.sourceItems { err = collectionFactory.LocalRepoCollection().LoadComplete(item.localRepo) if err != nil { return @@ -1035,13 +1058,10 @@ func (collection *PublishedRepoCollection) LoadComplete(repo *PublishedRepo, col } } - item.packageRefs = &PackageRefList{} err = item.packageRefs.Decode(encoded) if err != nil { return } - - repo.sourceItems[component] = item } } else { panic("unknown SourceKind")