ghorg/vendor/github.com/ktrysmt/go-bitbucket/repositories.go
dependabot[bot] fe846062e4
Bump github.com/ktrysmt/go-bitbucket from 0.9.80 to 0.9.81 (#469)
Bumps [github.com/ktrysmt/go-bitbucket](https://github.com/ktrysmt/go-bitbucket) from 0.9.80 to 0.9.81.
- [Release notes](https://github.com/ktrysmt/go-bitbucket/releases)
- [Commits](https://github.com/ktrysmt/go-bitbucket/compare/v0.9.80...v0.9.81)

---
updated-dependencies:
- dependency-name: github.com/ktrysmt/go-bitbucket
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: gabrie30 <gabrie30@users.noreply.github.com>
2024-11-01 08:34:02 -07:00

123 lines
2.9 KiB
Go

package bitbucket
import (
"errors"
"fmt"
"net/url"
)
//"github.com/k0kubun/pp"
type Repositories struct {
c *Client
PullRequests *PullRequests
Issues *Issues
Pipelines *Pipelines
Repository *Repository
Commits *Commits
Diff *Diff
BranchRestrictions *BranchRestrictions
Webhooks *Webhooks
Downloads *Downloads
DeployKeys *DeployKeys
repositories
}
type RepositoriesRes struct {
Page int32
Pagelen int32
Size int32
Items []Repository
}
func (r *Repositories) ListForAccount(ro *RepositoriesOptions) (*RepositoriesRes, error) {
urlPath := "/repositories"
if ro.Owner != "" {
urlPath += fmt.Sprintf("/%s", ro.Owner)
}
urlStr := r.c.requestUrl(urlPath)
urlAsUrl, err := url.Parse(urlStr)
if err != nil {
return nil, err
}
q := urlAsUrl.Query()
if ro.Role != "" {
q.Set("role", ro.Role)
}
if ro.Keyword != nil && *ro.Keyword != "" {
// https://developer.atlassian.com/cloud/bitbucket/rest/intro/#operators
query := fmt.Sprintf("full_name ~ \"%s\"", *ro.Keyword)
q.Set("q", query)
}
urlAsUrl.RawQuery = q.Encode()
urlStr = urlAsUrl.String()
repos, err := r.c.executePaginated("GET", urlStr, "", ro.Page)
if err != nil {
return nil, err
}
return decodeRepositories(repos)
}
// Deprecated: Use ListForAccount instead
func (r *Repositories) ListForTeam(ro *RepositoriesOptions) (*RepositoriesRes, error) {
return r.ListForAccount(ro)
}
// Return all repositories that belong to a project
func (r *Repositories) ListProject(ro *RepositoriesOptions) (*RepositoriesRes, error) {
urlPath := r.c.requestUrl("/repositories")
urlPath += fmt.Sprintf("/%s/?q=project.key=\"%s\"", ro.Owner, ro.Project)
repos, err := r.c.executePaginated("GET", urlPath, "", nil)
if err != nil {
return nil, err
}
return decodeRepositories(repos)
}
func (r *Repositories) ListPublic() (*RepositoriesRes, error) {
urlStr := r.c.requestUrl("/repositories/")
repos, err := r.c.executePaginated("GET", urlStr, "", nil)
if err != nil {
return nil, err
}
return decodeRepositories(repos)
}
func decodeRepositories(reposResponse interface{}) (*RepositoriesRes, error) {
reposResponseMap, ok := reposResponse.(map[string]interface{})
if !ok {
return nil, errors.New("Not a valid format")
}
repoArray := reposResponseMap["values"].([]interface{})
var repos []Repository
for _, repoEntry := range repoArray {
repo, err := decodeRepository(repoEntry)
if err == nil {
repos = append(repos, *repo)
}
}
page, ok := reposResponseMap["page"].(float64)
if !ok {
page = 0
}
pagelen, ok := reposResponseMap["pagelen"].(float64)
if !ok {
pagelen = 0
}
size, ok := reposResponseMap["size"].(float64)
if !ok {
size = 0
}
repositories := RepositoriesRes{
Page: int32(page),
Pagelen: int32(pagelen),
Size: int32(size),
Items: repos,
}
return &repositories, nil
}