// Copyright 2017 Drone.IO Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package gitlab import ( "net/url" "strconv" "strings" "git.awesome-for.me/liuzhiguo/go-scm/scm" ) func encode(s string) string { return strings.Replace(s, "/", "%2F", -1) } func encodePath(s string) string { // Gitlab documentation provides inconsistent example for whether '.' should be escaped: // https://docs.gitlab.com/ee/api/README.html#file-path-branches-and-tags-name-encoding // https://docs.gitlab.com/ee/api/repository_files.html#get-file-from-repository // Although not escaping '.' seems to work, we still escape it here to be safe. return strings.Replace(url.PathEscape(s), ".", "%2E", -1) } func encodeBranchListOptions(opts scm.BranchListOptions) string { params := url.Values{} if opts.SearchTerm != "" { params.Set("search", opts.SearchTerm) } if opts.PageListOptions != (scm.ListOptions{}) { if opts.PageListOptions.Page != 0 { params.Set("page", strconv.Itoa(opts.PageListOptions.Page)) } if opts.PageListOptions.Size != 0 { params.Set("per_page", strconv.Itoa(opts.PageListOptions.Size)) } } return params.Encode() } func encodeListOptions(opts scm.ListOptions) string { params := url.Values{} if opts.Page != 0 { params.Set("page", strconv.Itoa(opts.Page)) } if opts.Size != 0 { params.Set("per_page", strconv.Itoa(opts.Size)) } return params.Encode() } func encodeMemberListOptions(opts scm.ListOptions) string { params := url.Values{} params.Set("membership", "true") if opts.Page != 0 { params.Set("page", strconv.Itoa(opts.Page)) } if opts.Size != 0 { params.Set("per_page", strconv.Itoa(opts.Size)) } return params.Encode() } func encodeRepoListOptions(opts scm.RepoListOptions) string { params := url.Values{} params.Set("membership", "true") if opts.RepoSearchTerm != (scm.RepoSearchTerm{}) { if opts.RepoSearchTerm.RepoName != "" { params.Set("search", opts.RepoSearchTerm.RepoName) } } if opts.ListOptions != (scm.ListOptions{}) { if opts.ListOptions.Page != 0 { params.Set("page", strconv.Itoa(opts.ListOptions.Page)) } if opts.ListOptions.Size != 0 { params.Set("per_page", strconv.Itoa(opts.ListOptions.Size)) } } return params.Encode() } func encodeCommitListOptions(opts scm.CommitListOptions) string { params := url.Values{} if opts.Page != 0 { params.Set("page", strconv.Itoa(opts.Page)) } if opts.Size != 0 { params.Set("per_page", strconv.Itoa(opts.Size)) } if opts.Ref != "" { params.Set("ref_name", opts.Ref) } if opts.Path != "" { params.Set("path", opts.Path) } return params.Encode() } func encodeIssueListOptions(opts scm.IssueListOptions) string { params := url.Values{} if opts.Page != 0 { params.Set("page", strconv.Itoa(opts.Page)) } if opts.Size != 0 { params.Set("per_page", strconv.Itoa(opts.Size)) } if opts.Open && opts.Closed { params.Set("state", "all") } else if opts.Closed { params.Set("state", "closed") } else if opts.Open { params.Set("state", "opened") } return params.Encode() } func encodePullRequestListOptions(opts scm.PullRequestListOptions) string { params := url.Values{} if opts.Page != 0 { params.Set("page", strconv.Itoa(opts.Page)) } if opts.Size != 0 { params.Set("per_page", strconv.Itoa(opts.Size)) } if opts.Open && opts.Closed { params.Set("state", "all") } else if opts.Closed { params.Set("state", "closed") } else if opts.Open { params.Set("state", "opened") } return params.Encode() } func encodeMilestoneListOptions(opts scm.MilestoneListOptions) string { params := url.Values{} if opts.Page != 0 { params.Set("page", strconv.Itoa(opts.Page)) } if opts.Size != 0 { params.Set("per_page", strconv.Itoa(opts.Size)) } if opts.Open && opts.Closed { params.Set("state", "all") } else if opts.Closed { params.Set("state", "closed") } return params.Encode() }