2016-09-05 22:44:19 -04:00
|
|
|
package registry
|
|
|
|
|
2016-12-20 01:38:36 -05:00
|
|
|
import "github.com/peterhellberg/link"
|
2016-12-20 01:36:05 -05:00
|
|
|
|
2016-09-05 22:44:19 -04:00
|
|
|
type catalogResponse struct {
|
|
|
|
Repositories []string `json:"repositories"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Catalog returns the repositories in a registry.
|
2016-12-20 01:36:05 -05:00
|
|
|
func (r *Registry) Catalog(u string) ([]string, error) {
|
|
|
|
if u == "" {
|
|
|
|
u = "/v2/_catalog"
|
|
|
|
}
|
|
|
|
url := r.url(u)
|
2016-09-05 22:44:19 -04:00
|
|
|
r.Logf("registry.catalog url=%s", url)
|
|
|
|
|
|
|
|
var response catalogResponse
|
2016-12-20 01:36:05 -05:00
|
|
|
h, err := r.getJSON(url, &response)
|
|
|
|
if err != nil {
|
2016-09-05 22:44:19 -04:00
|
|
|
return nil, err
|
|
|
|
}
|
2016-12-20 01:36:05 -05:00
|
|
|
|
|
|
|
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...)
|
|
|
|
}
|
|
|
|
}
|
2016-09-05 22:44:19 -04:00
|
|
|
|
|
|
|
return response.Repositories, nil
|
|
|
|
}
|