From e451b94f87b49b3b1d9cc06795b102eb1efb6e26 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 19 Dec 2016 22:36:05 -0800 Subject: [PATCH] update Signed-off-by: Jess Frazelle --- main.go | 2 +- registry/catalog.go | 27 ++++++++++++++++++++++++--- server/server.go | 2 +- vendor/manifest | 8 ++++++++ 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index 0b76e683..7562bf84 100644 --- a/main.go +++ b/main.go @@ -105,7 +105,7 @@ func main() { Usage: "list all repositories", Action: func(c *cli.Context) error { // get the repositories via catalog - repos, err := r.Catalog() + repos, err := r.Catalog("") if err != nil { return err } diff --git a/registry/catalog.go b/registry/catalog.go index 376f1b4b..203006cb 100644 --- a/registry/catalog.go +++ b/registry/catalog.go @@ -1,18 +1,39 @@ package registry +import ( + "fmt" + + "github.com/peterhellberg/link" +) + type catalogResponse struct { Repositories []string `json:"repositories"` } // Catalog returns the repositories in a registry. -func (r *Registry) Catalog() ([]string, error) { - url := r.url("/v2/_catalog") +func (r *Registry) Catalog(u string) ([]string, error) { + if u == "" { + u = "/v2/_catalog" + } + url := r.url(u) r.Logf("registry.catalog url=%s", url) var response catalogResponse - if _, err := r.getJSON(url, &response); err != nil { + h, err := r.getJSON(url, &response) + if err != nil { return nil, err } + fmt.Printf("header: %#v\n", h) + + for _, l := range link.ParseHeader(h) { + if l.Rel == "next" { + repos, err := r.Catalog(l.URI) + if err != nil { + return nil, err + } + response.Repositories = append(response.Repositories, repos...) + } + } return response.Repositories, nil } diff --git a/server/server.go b/server/server.go index 825952f4..0998addd 100644 --- a/server/server.go +++ b/server/server.go @@ -240,7 +240,7 @@ type v1Compatibility struct { func createStaticIndex(r *registry.Registry, staticDir string) error { updating = true logrus.Info("fetching catalog") - repoList, err := r.Catalog() + repoList, err := r.Catalog("") if err != nil { return fmt.Errorf("getting catalog failed: %v", err) } diff --git a/vendor/manifest b/vendor/manifest index 55c46103..a70f3f90 100644 --- a/vendor/manifest +++ b/vendor/manifest @@ -104,6 +104,14 @@ "path": "/libcontainer/user", "notests": true }, + { + "importpath": "github.com/peterhellberg/link", + "repository": "https://github.com/peterhellberg/link", + "vcs": "git", + "revision": "d1cebc7ea14a5fc0de7cb4a45acae773161642c6", + "branch": "master", + "notests": true + }, { "importpath": "github.com/urfave/cli", "repository": "https://github.com/urfave/cli",