diff --git a/bitbucket.go b/bitbucket.go index 241330d..ed2a054 100644 --- a/bitbucket.go +++ b/bitbucket.go @@ -39,6 +39,7 @@ type repository interface { ListFiles(opt RepositoryFilesOptions) (*[]RepositoryFile, error) GetFileBlob(opt RepositoryBlobOptions) (*RepositoryBlob, error) ListBranches(opt RepositoryBranchOptions) (*RepositoryBranches, error) + BranchingModel(opt RepositoryBranchingModelOptions) (*BranchingModel, error) } type repositories interface { @@ -236,6 +237,11 @@ type RepositoryPipelineBuildNumberOptions struct { Next int `json:"next"` } +type RepositoryBranchingModelOptions struct { + Owner string `json:"owner"` + RepoSlug string `json:"repo_slug"` +} + type DownloadsOptions struct { Owner string `json:"owner"` RepoSlug string `json:"repo_slug"` diff --git a/repository.go b/repository.go index 5960d06..d909605 100644 --- a/repository.go +++ b/repository.go @@ -105,6 +105,23 @@ type PipelineBuildNumber struct { Next int } +type BranchingModel struct { + Type string + Branch_Types []BranchType + Development BranchDevelopment +} + +type BranchType struct { + Kind string + Prefix string +} + +type BranchDevelopment struct { + Name string + Branch RepositoryBranch + Use_Mainbranch bool +} + func (r *Repository) Create(ro *RepositoryOptions) (*Repository, error) { data := r.buildRepositoryBody(ro) urlStr := r.c.requestUrl("/repositories/%s/%s", ro.Owner, ro.RepoSlug) @@ -276,6 +293,15 @@ func (r *Repository) UpdatePipelineBuildNumber(rpbno *RepositoryPipelineBuildNum return decodePipelineBuildNumberRepository(response) } +func (r *Repository) BranchingModel(rbmo *RepositoryBranchingModelOptions) (*BranchingModel, error) { + urlStr := r.c.requestUrl("/repositories/%s/%s/branching-model", rbmo.Owner, rbmo.RepoSlug) + response, err := r.c.execute("GET", urlStr, "") + if err != nil { + return nil, err + } + return decodeBranchingModel(response) +} + func (r *Repository) buildJsonBody(body map[string]interface{}) string { data, err := json.Marshal(body) @@ -570,6 +596,22 @@ func decodePipelineBuildNumberRepository(repoResponse interface{}) (*PipelineBui return pipelineBuildNumber, nil } +func decodeBranchingModel(branchingModelResponse interface{}) (*BranchingModel, error) { + branchingModelMap := branchingModelResponse.(map[string]interface{}) + + if branchingModelMap["type"] == "error" { + return nil, DecodeError(branchingModelMap) + } + + var branchingModel = new(BranchingModel) + err := mapstructure.Decode(branchingModelMap, branchingModel) + if err != nil { + return nil, err + } + + return branchingModel, nil +} + func (rf RepositoryFile) String() string { return rf.Path }