/
client_tag.go
49 lines (42 loc) · 1.25 KB
/
client_tag.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package bitbucketcloud
import (
"context"
"fmt"
"net/url"
"strings"
"github.com/ovh/cds/sdk"
)
// Tags returns list of tags for a repo
func (client *bitbucketcloudClient) Tags(ctx context.Context, fullname string) ([]sdk.VCSTag, error) {
var tags []Tag
path := fmt.Sprintf("/repositories/%s/refs/tags", fullname)
params := url.Values{}
params.Set("pagelen", "100")
var response Tags
if err := client.do(ctx, "GET", "core", path, params, nil, &response); err != nil {
return nil, sdk.WrapError(err, "Unable to get tags")
}
if cap(tags) == 0 {
tags = make([]Tag, 0, response.Size)
}
tags = append(tags, response.Values...)
responseTags := make([]sdk.VCSTag, 0, len(tags))
for _, tag := range tags {
email := strings.Trim(rawEmailCommitRegexp.FindString(tag.Target.Author.Raw), "<>")
t := sdk.VCSTag{
Tag: tag.Name,
Hash: tag.Target.Hash,
Message: tag.Message,
Sha: tag.Target.Hash,
Tagger: sdk.VCSAuthor{
Avatar: tag.Target.Author.User.Links.Avatar.Href,
DisplayName: tag.Target.Author.User.DisplayName,
Email: email,
Name: tag.Target.Author.User.Nickname,
ID: tag.Target.Author.User.UUID,
},
}
responseTags = append(responseTags, t)
}
return responseTags, nil
}