in build-index/tagserver/server.go [290:330]
func (s *Server) listRepositoryHandler(w http.ResponseWriter, r *http.Request) error {
repo, err := httputil.ParseParam(r, "repo")
if err != nil {
return err
}
client, err := s.backends.GetClient(repo)
if err != nil {
return handler.Errorf("backend manager: %s", err)
}
opts, err := buildPaginationOptions(r.URL)
if err != nil {
return err
}
result, err := client.List(path.Join(repo, "_manifests/tags"), opts...)
if err != nil {
return handler.Errorf("error listing from backend: %s", err)
}
var tags []string
for _, name := range result.Names {
// Strip repo prefix.
parts := strings.Split(name, ":")
if len(parts) != 2 {
log.With("name", name).Warn("Repo list skipping name, expected repo:tag format")
continue
}
tags = append(tags, parts[1])
}
resp, err := buildPaginationResponse(r.URL, result.ContinuationToken, tags)
if err != nil {
return err
}
if err := json.NewEncoder(w).Encode(resp); err != nil {
return handler.Errorf("json encode: %s", err)
}
return nil
}