package kiln
import (
"encoding/json"
"fmt"
"strings"
)
// Represents the error JSON returned by Kiln API requests
type KilnError struct {
// Guaranteed-unique code for Kiln errors
Code string `json:"codeError"`
// Human-readable description
Description string `json:"sError"`
}
// Represents the project JSON returned from the Kiln API
type KilnProject struct {
Id int64 `json:"ixProject"`
Slug string `json:"sSlug"`
Name string `json:"sName"`
Description string `json:"sDescription"`
DefaultPermission string `json:"permissionDefault"`
RepoGroups []KilnRepoGroup
}
type KilnRepoGroup struct {
Id int64 `json:"ixRepoGroup"`
ProjectId int64 `json:"ixProject"`
Slug string `json:"sSlug"`
Name string `json:"sName"`
Repos []KilnRepo `json:"repos"`
}
type KilnRepo struct {
Id int64 `json:"ixRepo"`
RepoGroupId int64 `json:"ixRepoGroup"`
ParentId int64 `json:"ixParent"`
IsCentral bool `json:"fCentral"`
Slug string `json:"sSlug"`
GroupSlug string `json:"sGroupSlug"`
ProjectSlug string `json:"sProjectSlug"`
GitUrl string `json:"sGitUrl"`
GitSshUrl string `json:"sGitSshUrl"`
Name string `json:"sName"`
Description string `json:"sDescription"`
Status string `json:"sStatus"`
Size int64 `json:"bytesSize"`
Vcs int `json:"vcs"`
Creator KilnPerson `json:"personCreator"`
DefaultPermission string `json:"permissionDefault"`
Branches []KilnRepo `json:"repoBranches"`
}
type KilnPerson struct {
Id int64 `json:"ixPerson"`
Name string `json:"sName"`
Email string `json:"sEmail"`
}
func (k *KilnClient) Projects() (projects []KilnProject, err error) {
if resp, err := k.apiGet("Project", apiParams{}); err == nil {
err = json.Unmarshal(resp, &projects)
}
return
}
func (k *KilnClient) IdForRepo(repoPath string) (repoId int64, err error) {
parts := strings.Split(repoPath, "/")
if len(parts) != 3 {
err = fmt.Errorf("unknown repository target: %v", repoPath)
return
}
var projects []KilnProject
if projects, err = k.Projects(); err == nil {
for _, project := range projects {
for _, repoGroup := range project.RepoGroups {
for _, repo := range repoGroup.Repos {
if strings.EqualFold(repo.ProjectSlug, parts[0]) &&
strings.EqualFold(repo.GroupSlug, parts[1]) &&
strings.EqualFold(repo.Slug, parts[2]) {
repoId = repo.Id
return
}
}
}
}
}
err = fmt.Errorf("repository not found")
return
}
func (k *KilnClient) RelatedRepos(repoId int64) (repos []KilnRepo, err error) {
resp, err := k.apiGet(fmt.Sprintf("Repo/%v/Related", repoId), apiParams{})
if err == nil {
err = json.Unmarshal(resp, &repos)
}
return
}
|
Loading...