func()

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
}