adding pagination of repositories on bitbucketserver
This commit is contained in:
parent
8eef2365ff
commit
ced1221ef6
1 changed files with 34 additions and 20 deletions
|
@ -4,6 +4,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
log "github.com/Sirupsen/logrus"
|
log "github.com/Sirupsen/logrus"
|
||||||
"github.com/drone/drone/model"
|
"github.com/drone/drone/model"
|
||||||
"github.com/mrjones/oauth"
|
"github.com/mrjones/oauth"
|
||||||
|
@ -16,7 +17,7 @@ const (
|
||||||
currentUserId = "%s/plugins/servlet/applinks/whoami"
|
currentUserId = "%s/plugins/servlet/applinks/whoami"
|
||||||
pathUser = "%s/rest/api/1.0/users/%s"
|
pathUser = "%s/rest/api/1.0/users/%s"
|
||||||
pathRepo = "%s/rest/api/1.0/projects/%s/repos/%s"
|
pathRepo = "%s/rest/api/1.0/projects/%s/repos/%s"
|
||||||
pathRepos = "%s/rest/api/1.0/repos?limit=%s"
|
pathRepos = "%s/rest/api/1.0/repos?start=%s&limit=%s"
|
||||||
pathHook = "%s/rest/api/1.0/projects/%s/repos/%s/settings/hooks/%s"
|
pathHook = "%s/rest/api/1.0/projects/%s/repos/%s/settings/hooks/%s"
|
||||||
pathSource = "%s/projects/%s/repos/%s/browse/%s?at=%s&raw"
|
pathSource = "%s/projects/%s/repos/%s/browse/%s?at=%s&raw"
|
||||||
hookName = "com.atlassian.stash.plugin.stash-web-post-receive-hooks-plugin:postReceiveHook"
|
hookName = "com.atlassian.stash.plugin.stash-web-post-receive-hooks-plugin:postReceiveHook"
|
||||||
|
@ -91,25 +92,7 @@ func (c *Client) FindRepo(owner string, name string) (*Repo, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) FindRepos() ([]*Repo, error) {
|
func (c *Client) FindRepos() ([]*Repo, error) {
|
||||||
requestUrl := fmt.Sprintf(pathRepos, c.base, "1000")
|
return c.paginatedRepos(0)
|
||||||
log.Debug(fmt.Printf("request :%s", requestUrl))
|
|
||||||
response, err := c.client.Get(requestUrl)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
defer response.Body.Close()
|
|
||||||
contents, err := ioutil.ReadAll(response.Body)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
var repoResponse Repos
|
|
||||||
err = json.Unmarshal(contents, &repoResponse)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
log.Debug(fmt.Printf("repoResponse: %+v\n", repoResponse))
|
|
||||||
|
|
||||||
return repoResponse.Values, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) FindRepoPerms(owner string, repo string) (*model.Perm, error) {
|
func (c *Client) FindRepoPerms(owner string, repo string) (*model.Perm, error) {
|
||||||
|
@ -213,3 +196,34 @@ func (c *Client) doDelete(url string) error {
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Helper function to get repos paginated
|
||||||
|
func (c *Client) paginatedRepos(start int) ([]*Repo, error) {
|
||||||
|
limit := 1000
|
||||||
|
requestUrl := fmt.Sprintf(pathRepos, c.base, strconv.Itoa(start), strconv.Itoa(limit))
|
||||||
|
log.Debug(fmt.Printf("request :%s", requestUrl))
|
||||||
|
response, err := c.client.Get(requestUrl)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
contents, err := ioutil.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var repoResponse Repos
|
||||||
|
err = json.Unmarshal(contents, &repoResponse)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Debug(fmt.Printf("repoResponse: %+v\n", repoResponse))
|
||||||
|
|
||||||
|
if(!repoResponse.IsLastPage){
|
||||||
|
reposList, err := c.paginatedRepos(start + limit);
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
repoResponse.Values = append(repoResponse.Values, reposList...)
|
||||||
|
}
|
||||||
|
return repoResponse.Values, nil
|
||||||
|
}
|
Loading…
Reference in a new issue