Changeset 0410d206e51e…
Parent 8d77cc754a6d…
by Benjamin Pollack <benjamin@fogcreek.com>
Changes to one file · Browse files at 0410d206e51e Showing diff from parent 8d77cc754a6d Diff from another changeset...
@@ -1,4 +1,10 @@ package kiln
+
+import (
+ "encoding/json"
+ "fmt"
+ "strings"
+)
// Represents the error JSON returned by Kiln API requests
type KilnError struct {
@@ -51,3 +57,43 @@ 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...