bitbucket

package module
v0.9.62 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 24, 2023 License: Apache-2.0 Imports: 19 Imported by: 0

README

go-bitbucket

Bitbucket-API library for golang.

Support Bitbucket API v2.0.

And the response type is json format defined Bitbucket API.

Install

go get github.com/elvenworks/go-bitbucket

Usage

create a pullrequest
package main

import (
        "fmt"

        "github.com/elvenworks/go-bitbucket"
)

func main() {
        c := bitbucket.NewBasicAuth("username", "password")

        opt := &bitbucket.PullRequestsOptions{
                Owner:             "your-team",
                RepoSlug:          "awesome-project",
                SourceBranch:      "develop",
                DestinationBranch: "master",
                Title:             "fix bug. #9999",
                CloseSourceBranch: true,
        }

        res, err := c.Repositories.PullRequests.Create(opt)
        if err != nil {
                panic(err)
        }

        fmt.Println(res)
}
create a repository
package main

import (
        "fmt"

        "github.com/elvenworks/go-bitbucket"
)

func main() {
        c := bitbucket.NewBasicAuth("username", "password")

        opt := &bitbucket.RepositoryOptions{
                Owner:    "project_name",
                RepoSlug: "repo_name",
                Scm:      "git",
        }

        res, err := c.Repositories.Repository.Create(opt)
        if err != nil {
                panic(err)
        }

        fmt.Println(res)
}

FAQ

Support Bitbucket API v1.0 ?

It does not correspond yet. Because there are many differences between v2.0 and v1.0.

It is officially recommended to use v2.0. But unfortunately Bitbucket Server (formerly: Stash) API is still v1.0. And The API v1.0 covers resources that the v2.0 API and API v2.0 is yet to cover.

Development

Get dependencies

It's using go mod.

How to testing

Set your available user account to Global Env.

export BITBUCKET_TEST_USERNAME=<your_username>
export BITBUCKET_TEST_PASSWORD=<your_password>
export BITBUCKET_TEST_OWNER=<your_repo_owner>
export BITBUCKET_TEST_REPOSLUG=<your_repo_name>

And just run;

make test

If you want to test individually;

go test -v ./tests/diff_test.go

License

Apache License 2.0

Author

ktrysmt

Documentation

Index

Constants

View Source
const (
	RepoPushEvent                  string = "repo:push"
	RepoForkEvent                  string = "repo:fork"
	RepoUpdatedEvent               string = "repo:updated"
	RepoCommitCommentCreatedEvent  string = "repo:commit_comment_created"
	RepoCommitStatusCreatedEvent   string = "repo:commit_status_created"
	RepoCommitStatusUpdatedEvent   string = "repo:commit_status_updated"
	IssueCreatedEvent              string = "issue:created"
	IssueUpdatedEvent              string = "issue:updated"
	IssueCommentCreatedEvent       string = "issue:comment_created"
	PullRequestCreatedEvent        string = "pullrequest:created"
	PullRequestUpdatedEvent        string = "pullrequest:updated"
	PullRequestApprovedEvent       string = "pullrequest:approved"
	PullRequestUnapprovedEvent     string = "pullrequest:unapproved"
	PullRequestMergedEvent         string = "pullrequest:fulfilled"
	PullRequestDeclinedEvent       string = "pullrequest:rejected"
	PullRequestCommentCreatedEvent string = "pullrequest:comment_created"
	PullRequestCommentUpdatedEvent string = "pullrequest:comment_updated"
	PullRequestCommentDeletedEvent string = "pullrequest:comment_deleted"
)
View Source
const DEFAULT_BITBUCKET_API_BASE_URL = "https://api.bitbucket.org/2.0"
View Source
const DEFAULT_LIMIT_PAGES = 0
View Source
const DEFAULT_MAX_DEPTH = 1
View Source
const DEFAULT_PAGE_LENGTH = 10

Variables

This section is empty.

Functions

func DecodeError

func DecodeError(e map[string]interface{}) error

Types

type Addons

type Addons struct {
	// contains filtered or unexported fields
}

func (*Addons) Delete

func (addons *Addons) Delete() error

type BitbucketError

type BitbucketError struct {
	Message string
	Fields  map[string][]string
}

type BranchModel

type BranchModel struct {
	Name           string
	Branch         RepositoryBranch
	Use_Mainbranch bool
}

type BranchRestrictions

type BranchRestrictions struct {
	ID      int
	Pattern string
	Kind    string
	Value   *int
	// contains filtered or unexported fields
}

func (*BranchRestrictions) Create

func (*BranchRestrictions) Delete

func (b *BranchRestrictions) Delete(bo *BranchRestrictionsOptions) (interface{}, error)

func (*BranchRestrictions) Get

func (*BranchRestrictions) Gets

func (b *BranchRestrictions) Gets(bo *BranchRestrictionsOptions) (interface{}, error)

func (*BranchRestrictions) Update

func (b *BranchRestrictions) Update(bo *BranchRestrictionsOptions) (interface{}, error)

type BranchRestrictionsOptions

type BranchRestrictionsOptions struct {
	Owner    string            `json:"owner"`
	RepoSlug string            `json:"repo_slug"`
	ID       string            `json:"id"`
	Groups   map[string]string `json:"groups"`
	Pattern  string            `json:"pattern"`
	Users    []string          `json:"users"`
	Kind     string            `json:"kind"`
	FullSlug string            `json:"full_slug"`
	Name     string            `json:"name"`
	Value    interface{}       `json:"value"`
}

type BranchType

type BranchType struct {
	Kind   string
	Prefix string
}

type BranchingModel

type BranchingModel struct {
	Type         string
	Branch_Types []BranchType
	Development  BranchModel
	Production   BranchModel
}

type Client

type Client struct {
	Auth         *auth
	Users        users
	User         user
	Teams        teams
	Repositories *Repositories
	Workspaces   *Workspace
	Addons       *Addons
	Pagelen      int
	MaxDepth     int
	// LimitPages limits the number of pages for a request
	//	default value as 0 -- disable limits
	LimitPages int
	// DisableAutoPaging allows you to disable the default behavior of automatically requesting
	// all the pages for a paginated response.
	DisableAutoPaging bool

	HttpClient         *http.Client
	IsCustomHttpClient bool
	// contains filtered or unexported fields
}

func NewBasicAuth

func NewBasicAuth(u, p string) *Client

func NewOAuth

func NewOAuth(i, s string) *Client

func NewOAuthClientCredentials

func NewOAuthClientCredentials(i, s string) *Client

Uses the Client Credentials Grant oauth2 flow to authenticate to Bitbucket

func NewOAuthWithCode

func NewOAuthWithCode(i, s, c string) (*Client, string)

NewOAuthWithCode finishes the OAuth handshake with a given code and returns a *Client

func NewOAuthWithRefreshToken

func NewOAuthWithRefreshToken(i, s, rt string) (*Client, string)

NewOAuthWithRefreshToken obtains a new access token with a given refresh token and returns a *Client

func NewOAuthbearerToken

func NewOAuthbearerToken(t string) *Client

func NewWithCustomHttpClient

func NewWithCustomHttpClient(client *http.Client) *Client

func (*Client) GetApiBaseURL

func (c *Client) GetApiBaseURL() string

func (*Client) GetApiHostnameURL

func (c *Client) GetApiHostnameURL() string

func (*Client) GetOAuthToken

func (c *Client) GetOAuthToken() oauth2.Token

func (*Client) SetApiBaseURL

func (c *Client) SetApiBaseURL(urlStr url.URL)

type CommitStatusOptions

type CommitStatusOptions struct {
	Key         string `json:"key"`
	Url         string `json:"url"`
	State       string `json:"state"`
	Name        string `json:"name"`
	Description string `json:"description"`
}

type Commits

type Commits struct {
	// contains filtered or unexported fields
}

func (*Commits) CreateCommitStatus

func (cm *Commits) CreateCommitStatus(cmo *CommitsOptions, cso *CommitStatusOptions) (interface{}, error)

func (*Commits) GetCommit

func (cm *Commits) GetCommit(cmo *CommitsOptions) (interface{}, error)

func (*Commits) GetCommitComment

func (cm *Commits) GetCommitComment(cmo *CommitsOptions) (interface{}, error)

func (*Commits) GetCommitComments

func (cm *Commits) GetCommitComments(cmo *CommitsOptions) (interface{}, error)

func (*Commits) GetCommitStatus

func (cm *Commits) GetCommitStatus(cmo *CommitsOptions, commitStatusKey string) (interface{}, error)

func (*Commits) GetCommitStatuses

func (cm *Commits) GetCommitStatuses(cmo *CommitsOptions) (interface{}, error)

func (*Commits) GetCommits

func (cm *Commits) GetCommits(cmo *CommitsOptions) (interface{}, error)

func (*Commits) GiveApprove

func (cm *Commits) GiveApprove(cmo *CommitsOptions) (interface{}, error)

func (*Commits) RemoveApprove

func (cm *Commits) RemoveApprove(cmo *CommitsOptions) (interface{}, error)

type CommitsOptions

type CommitsOptions struct {
	Owner       string `json:"owner"`
	RepoSlug    string `json:"repo_slug"`
	Revision    string `json:"revision"`
	Branchortag string `json:"branchortag"`
	Include     string `json:"include"`
	Exclude     string `json:"exclude"`
	CommentID   string `json:"comment_id"`
}

type DefaultReviewer

type DefaultReviewer struct {
	Nickname    string
	DisplayName string `mapstructure:"display_name"`
	Type        string
	Uuid        string
	AccountId   string `mapstructure:"account_id"`
	Links       map[string]map[string]string
}

type DefaultReviewers

type DefaultReviewers struct {
	Page             int
	Pagelen          int
	MaxDepth         int
	Size             int
	Next             string
	DefaultReviewers []DefaultReviewer
}

type DeployKey

type DeployKey struct {
	Id      int    `json:"id"`
	Label   string `json:"label"`
	Key     string `json:"key"`
	Comment string `json:"comment"`
}

type DeployKeyOptions

type DeployKeyOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Id       int    `json:"id"`
	Label    string `json:"label"`
	Key      string `json:"key"`
}

type DeployKeys

type DeployKeys struct {
	// contains filtered or unexported fields
}

func (*DeployKeys) Create

func (dk *DeployKeys) Create(opt *DeployKeyOptions) (*DeployKey, error)

func (*DeployKeys) Delete

func (dk *DeployKeys) Delete(opt *DeployKeyOptions) (interface{}, error)

func (*DeployKeys) Get

func (dk *DeployKeys) Get(opt *DeployKeyOptions) (*DeployKey, error)

type DeploymentVariable

type DeploymentVariable struct {
	Type    string
	Uuid    string
	Key     string
	Value   string
	Secured bool
}

type DeploymentVariables

type DeploymentVariables struct {
	Page      int
	Pagelen   int
	MaxDepth  int
	Size      int
	Next      string
	Variables []DeploymentVariable
}

type Diff

type Diff struct {
	// contains filtered or unexported fields
}

func (*Diff) GetDiff

func (d *Diff) GetDiff(do *DiffOptions) (interface{}, error)

func (*Diff) GetDiffStat

func (d *Diff) GetDiffStat(dso *DiffStatOptions) (*DiffStatRes, error)

func (*Diff) GetPatch

func (d *Diff) GetPatch(do *DiffOptions) (interface{}, error)

type DiffOptions

type DiffOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Spec     string `json:"spec"`
}

type DiffStat

type DiffStat struct {
	Type         string                 `json:"type,omitempty"`
	Status       string                 `json:"status,omitempty"`
	LinesRemoved int                    `json:"lines_removed,omitempty"`
	LinedAdded   int                    `json:"lines_added,omitempty"`
	Old          map[string]interface{} `json:"old,omitempty"`
	New          map[string]interface{} `json:"new,omitempty"`
}

type DiffStatOptions

type DiffStatOptions struct {
	Owner      string `json:"owner"`
	RepoSlug   string `json:"repo_slug"`
	Spec       string `json:"spec"`
	Whitespace bool   `json:"ignore_whitespace"`
	Merge      bool   `json:"merge"`
	Path       string `json:"path"`
	Renames    bool   `json:"renames"`
	PageNum    int    `json:"page"`
	Pagelen    int    `json:"pagelen"`
	MaxDepth   int    `json:"max_depth"`
	Fields     []string
}

type DiffStatRes

type DiffStatRes struct {
	Page      int         `json:"page,omitempty"`
	Pagelen   int         `json:"pagelen,omitempty"`
	Size      int         `json:"size,omitempty"`
	Next      string      `json:"next,omitempty"`
	Previous  string      `json:"previous,omitempty"`
	DiffStats []*DiffStat `json:"values,omitempty"`
}

type Downloads

type Downloads struct {
	// contains filtered or unexported fields
}

func (*Downloads) Create

func (dl *Downloads) Create(do *DownloadsOptions) (interface{}, error)

func (*Downloads) List

func (dl *Downloads) List(do *DownloadsOptions) (interface{}, error)

type DownloadsOptions

type DownloadsOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	FilePath string `json:"filepath"`
	FileName string `json:"filename"`
}

type Environment

type Environment struct {
	Uuid            string
	Name            string
	EnvironmentType EnvironmentType
	Rank            int
	Type            string
}

type EnvironmentType

type EnvironmentType struct {
	Name string
	Rank int
	Type string
}

type Environments

type Environments struct {
	Page         int
	Pagelen      int
	MaxDepth     int
	Size         int
	Next         string
	Environments []Environment
}

type Group

type Group struct {
	AccountPrivilege        string `mapstructure:"account_privilege"`
	DefaultPermission       string `mapstructure:"default_permission"`
	EmailForwardingDisabled bool   `mapstructure:"email_forwarding_disabled"`
	FullSlug                string `mapstructure:"full_slug"`
	Links                   map[string]map[string]string
	Name                    string                 `mapstructure:"name"`
	Slug                    string                 `mapstructure:"slug"`
	Type                    string                 `mapstructure:"type"`
	Workspace               map[string]interface{} `mapstructure:"workspace"`
	Owner                   map[string]interface{}
}

type GroupPermission

type GroupPermission struct {
	Type       string
	Group      Group
	Permission string
	Links      map[string]map[string]string
}

type GroupPermissions

type GroupPermissions struct {
	Page             int
	Pagelen          int
	MaxDepth         int
	Size             int
	Next             string
	GroupPermissions []GroupPermission
}

type IssueChangesOptions

type IssueChangesOptions struct {
	IssuesOptions
	Query    string `json:"query"`
	Sort     string `json:"sort"`
	Message  string `json:"message"`
	ChangeID string `json:"change_id"`
	Changes  []struct {
		Type     string
		NewValue string
	} `json:"changes"`
}

type IssueCommentsOptions

type IssueCommentsOptions struct {
	IssuesOptions
	Query          string `json:"query"`
	Sort           string `json:"sort"`
	CommentContent string `json:"comment_content"`
	CommentID      string `json:"comment_id"`
}

type Issues

type Issues struct {
	// contains filtered or unexported fields
}

func (*Issues) Create

func (p *Issues) Create(io *IssuesOptions) (interface{}, error)

func (*Issues) CreateChange

func (p *Issues) CreateChange(ico *IssueChangesOptions) (interface{}, error)

func (*Issues) CreateComment

func (p *Issues) CreateComment(ico *IssueCommentsOptions) (interface{}, error)

func (*Issues) Delete

func (p *Issues) Delete(io *IssuesOptions) (interface{}, error)

func (*Issues) DeleteComment

func (p *Issues) DeleteComment(ico *IssueCommentsOptions) (interface{}, error)

func (*Issues) DeleteVote

func (p *Issues) DeleteVote(io *IssuesOptions) error

func (*Issues) DeleteWatch

func (p *Issues) DeleteWatch(io *IssuesOptions) error

func (*Issues) Get

func (p *Issues) Get(io *IssuesOptions) (interface{}, error)

func (*Issues) GetChange

func (p *Issues) GetChange(ico *IssueChangesOptions) (interface{}, error)

func (*Issues) GetChanges

func (p *Issues) GetChanges(ico *IssueChangesOptions) (interface{}, error)

func (*Issues) GetComment

func (p *Issues) GetComment(ico *IssueCommentsOptions) (interface{}, error)

func (*Issues) GetComments

func (p *Issues) GetComments(ico *IssueCommentsOptions) (interface{}, error)

func (*Issues) GetVote

func (p *Issues) GetVote(io *IssuesOptions) (bool, interface{}, error)

func (*Issues) GetWatch

func (p *Issues) GetWatch(io *IssuesOptions) (bool, interface{}, error)

func (*Issues) Gets

func (p *Issues) Gets(io *IssuesOptions) (interface{}, error)

func (*Issues) PutVote

func (p *Issues) PutVote(io *IssuesOptions) error

func (*Issues) PutWatch

func (p *Issues) PutWatch(io *IssuesOptions) error

func (*Issues) Update

func (p *Issues) Update(io *IssuesOptions) (interface{}, error)

func (*Issues) UpdateComment

func (p *Issues) UpdateComment(ico *IssueCommentsOptions) (interface{}, error)

type IssuesOptions

type IssuesOptions struct {
	ID        string   `json:"id"`
	Owner     string   `json:"owner"`
	RepoSlug  string   `json:"repo_slug"`
	States    []string `json:"states"`
	Query     string   `json:"query"`
	Sort      string   `json:"sort"`
	Title     string   `json:"title"`
	Content   string   `json:"content"`
	State     string   `json:"state"`
	Kind      string   `json:"kind"`
	Milestone string   `json:"milestone"`
	Component string   `json:"component"`
	Priority  string   `json:"priority"`
	Version   string   `json:"version"`
	Assignee  string   `json:"assignee"`
}

type PageRes

type PageRes struct {
	Page     int32 `json:"page"`
	PageLen  int32 `json:"pagelen"`
	MaxDepth int32 `json:"max_depth"`
	Size     int32 `json:"size"`
}

type Permission

type Permission struct {
	Type string
	// contains filtered or unexported fields
}

func (*Permission) GetUserPermissions

func (t *Permission) GetUserPermissions(organization, member string) (*Permission, error)

func (*Permission) GetUserPermissionsByUuid

func (t *Permission) GetUserPermissionsByUuid(organization, member string) (*Permission, error)

type Pipeline

type Pipeline struct {
	Type       string
	Enabled    bool
	Repository Repository
}

type PipelineBuildNumber

type PipelineBuildNumber struct {
	Type string
	Next int
}

type PipelineKeyPair

type PipelineKeyPair struct {
	Type       string
	Public_key string
}

type PipelineVariable

type PipelineVariable struct {
	Type    string
	Uuid    string
	Key     string
	Value   string
	Secured bool
}

type PipelineVariables

type PipelineVariables struct {
	Page      int
	Pagelen   int
	MaxDepth  int
	Size      int
	Next      string
	Variables []PipelineVariable
}

type Pipelines

type Pipelines struct {
	// contains filtered or unexported fields
}

func (*Pipelines) Get

func (p *Pipelines) Get(po *PipelinesOptions) (interface{}, error)

func (*Pipelines) GetLog

func (p *Pipelines) GetLog(po *PipelinesOptions) (string, error)

func (*Pipelines) GetStep

func (p *Pipelines) GetStep(po *PipelinesOptions) (interface{}, error)

func (*Pipelines) List

func (p *Pipelines) List(po *PipelinesOptions) (interface{}, error)

func (*Pipelines) ListSteps

func (p *Pipelines) ListSteps(po *PipelinesOptions) (interface{}, error)

type PipelinesOptions

type PipelinesOptions struct {
	Owner    string `json:"owner"`
	Page     int    `json:"page"`
	RepoSlug string `json:"repo_slug"`
	Query    string `json:"query"`
	Sort     string `json:"sort"`
	IDOrUuid string `json:"ID"`
	StepUuid string `json:"StepUUID"`
}

type Project

type Project struct {
	Uuid        string
	Key         string
	Name        string
	Description string
	Is_private  bool
	// contains filtered or unexported fields
}

type ProjectOptions

type ProjectOptions struct {
	Uuid        string `json:"uuid"`
	Owner       string `json:"owner"`
	Name        string `json:"name"`
	Key         string `json:"key"`
	Description string `json:"description"`
	IsPrivate   bool   `json:"is_private"`
}

type ProjectsRes

type ProjectsRes struct {
	Page     int32
	Pagelen  int32
	MaxDepth int32
	Size     int32
	Items    []Project
}

type PullRequestCommentOptions

type PullRequestCommentOptions struct {
	Owner         string `json:"owner"`
	RepoSlug      string `json:"repo_slug"`
	PullRequestID string `json:"id"`
	Content       string `json:"content"`
	CommentId     string `json:"-"`
}

type PullRequests

type PullRequests struct {
	// contains filtered or unexported fields
}

func (*PullRequests) Activities

func (p *PullRequests) Activities(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Activity

func (p *PullRequests) Activity(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) AddComment

func (p *PullRequests) AddComment(co *PullRequestCommentOptions) (interface{}, error)

func (*PullRequests) Approve

func (p *PullRequests) Approve(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Commits

func (p *PullRequests) Commits(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Create

func (p *PullRequests) Create(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Decline

func (p *PullRequests) Decline(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Diff

func (p *PullRequests) Diff(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Get

func (p *PullRequests) Get(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) GetComment

func (p *PullRequests) GetComment(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) GetComments

func (p *PullRequests) GetComments(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Gets

func (p *PullRequests) Gets(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Merge

func (p *PullRequests) Merge(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Patch

func (p *PullRequests) Patch(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) RequestChanges

func (p *PullRequests) RequestChanges(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Statuses

func (p *PullRequests) Statuses(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) UnApprove

func (p *PullRequests) UnApprove(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) UnRequestChanges

func (p *PullRequests) UnRequestChanges(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) Update

func (p *PullRequests) Update(po *PullRequestsOptions) (interface{}, error)

func (*PullRequests) UpdateComment

func (p *PullRequests) UpdateComment(co *PullRequestCommentOptions) (interface{}, error)

type PullRequestsOptions

type PullRequestsOptions struct {
	ID                string   `json:"id"`
	CommentID         string   `json:"comment_id"`
	Owner             string   `json:"owner"`
	RepoSlug          string   `json:"repo_slug"`
	Title             string   `json:"title"`
	Description       string   `json:"description"`
	CloseSourceBranch bool     `json:"close_source_branch"`
	SourceBranch      string   `json:"source_branch"`
	SourceRepository  string   `json:"source_repository"`
	DestinationBranch string   `json:"destination_branch"`
	DestinationCommit string   `json:"destination_repository"`
	Message           string   `json:"message"`
	Reviewers         []string `json:"reviewers"`
	States            []string `json:"states"`
	Query             string   `json:"query"`
	Sort              string   `json:"sort"`
}

type Repositories

type Repositories struct {
	PullRequests       *PullRequests
	Issues             *Issues
	Pipelines          *Pipelines
	Repository         *Repository
	Commits            *Addons
	Diff               *Diff
	BranchRestrictions *BranchRestrictions
	Webhooks           *Webhooks
	Downloads          *Downloads
	DeployKeys         *DeployKeys
	// contains filtered or unexported fields
}

func (*Repositories) ListForAccount

func (r *Repositories) ListForAccount(ro *RepositoriesOptions) (*RepositoriesRes, error)

func (*Repositories) ListForTeam deprecated

func (r *Repositories) ListForTeam(ro *RepositoriesOptions) (*RepositoriesRes, error)

Deprecated: Use ListForAccount instead

func (*Repositories) ListPublic

func (r *Repositories) ListPublic() (*RepositoriesRes, error)

type RepositoriesOptions

type RepositoriesOptions struct {
	Owner string `json:"owner"`
	Role  string `json:"role"` // role=[owner|admin|contributor|member]
}

type RepositoriesRes

type RepositoriesRes struct {
	Page    int32
	Pagelen int32
	Size    int32
	Items   []Repository
}

type Repository

type Repository struct {
	Project     Project
	Uuid        string
	Name        string
	Slug        string
	Full_name   string
	Description string
	Fork_policy string
	Language    string
	Is_private  bool
	Has_issues  bool
	Has_wiki    bool
	Mainbranch  RepositoryBranch
	Type        string
	CreatedOn   string `mapstructure:"created_on"`
	UpdatedOn   string `mapstructure:"updated_on"`
	Owner       map[string]interface{}
	Links       map[string]interface{}
	Parent      *Repository
	// contains filtered or unexported fields
}

func (*Repository) AddDefaultReviewer

func (r *Repository) AddDefaultReviewer(rdro *RepositoryDefaultReviewerOptions) (*DefaultReviewer, error)

func (*Repository) AddDeploymentVariable

func (r *Repository) AddDeploymentVariable(opt *RepositoryDeploymentVariableOptions) (*DeploymentVariable, error)

func (*Repository) AddEnvironment

func (r *Repository) AddEnvironment(opt *RepositoryEnvironmentOptions) (*Environment, error)

func (*Repository) AddPipelineKeyPair

func (r *Repository) AddPipelineKeyPair(rpkpo *RepositoryPipelineKeyPairOptions) (*PipelineKeyPair, error)

func (*Repository) AddPipelineVariable

func (r *Repository) AddPipelineVariable(rpvo *RepositoryPipelineVariableOptions) (*PipelineVariable, error)

func (*Repository) BranchingModel

func (r *Repository) BranchingModel(rbmo *RepositoryBranchingModelOptions) (*BranchingModel, error)

func (*Repository) Create

func (r *Repository) Create(ro *RepositoryOptions) (*Repository, error)

func (*Repository) CreateBranch

func (*Repository) CreateTag

func (*Repository) Delete

func (r *Repository) Delete(ro *RepositoryOptions) (interface{}, error)

func (*Repository) DeleteDefaultReviewer

func (r *Repository) DeleteDefaultReviewer(rdro *RepositoryDefaultReviewerOptions) (interface{}, error)

func (*Repository) DeleteDeploymentVariable

func (r *Repository) DeleteDeploymentVariable(opt *RepositoryDeploymentVariableDeleteOptions) (interface{}, error)

func (*Repository) DeleteEnvironment

func (r *Repository) DeleteEnvironment(opt *RepositoryEnvironmentDeleteOptions) (interface{}, error)

func (*Repository) DeleteGroupPermissions

func (r *Repository) DeleteGroupPermissions(rgo *RepositoryGroupPermissionsOptions) (interface{}, error)

func (*Repository) DeletePipelineKeyPair

func (r *Repository) DeletePipelineKeyPair(rpkpo *RepositoryPipelineKeyPairOptions) (interface{}, error)

func (*Repository) DeletePipelineVariable

func (r *Repository) DeletePipelineVariable(opt *RepositoryPipelineVariableDeleteOptions) (interface{}, error)

func (*Repository) DeleteUserPermissions

func (r *Repository) DeleteUserPermissions(rgo *RepositoryUserPermissionsOptions) (interface{}, error)

func (*Repository) Fork

func (*Repository) Get

func (r *Repository) Get(ro *RepositoryOptions) (*Repository, error)

func (*Repository) GetBranch

func (*Repository) GetDefaultReviewer

func (r *Repository) GetDefaultReviewer(rdro *RepositoryDefaultReviewerOptions) (*DefaultReviewer, error)

func (*Repository) GetEnvironment

func (r *Repository) GetEnvironment(opt *RepositoryEnvironmentOptions) (*Environment, error)

func (*Repository) GetFileBlob

func (r *Repository) GetFileBlob(ro *RepositoryBlobOptions) (*RepositoryBlob, error)

func (*Repository) GetFileContent

func (r *Repository) GetFileContent(ro *RepositoryFilesOptions) ([]byte, error)

func (*Repository) GetGroupPermissions

func (r *Repository) GetGroupPermissions(rgo *RepositoryGroupPermissionsOptions) (*GroupPermission, error)

func (*Repository) GetPipelineConfig

func (r *Repository) GetPipelineConfig(rpo *RepositoryPipelineOptions) (*Pipeline, error)

func (*Repository) GetPipelineKeyPair

func (r *Repository) GetPipelineKeyPair(rpkpo *RepositoryPipelineKeyPairOptions) (*PipelineKeyPair, error)

func (*Repository) GetPipelineVariable

func (r *Repository) GetPipelineVariable(opt *RepositoryPipelineVariableOptions) (*PipelineVariable, error)

func (*Repository) GetUserPermissions

func (r *Repository) GetUserPermissions(rgo *RepositoryUserPermissionsOptions) (*UserPermission, error)

func (*Repository) ListBranches

func (r *Repository) ListBranches(rbo *RepositoryBranchOptions) (*RepositoryBranches, error)

func (*Repository) ListDefaultReviewers

func (r *Repository) ListDefaultReviewers(ro *RepositoryOptions) (*DefaultReviewers, error)

func (*Repository) ListDeploymentVariables

func (r *Repository) ListDeploymentVariables(opt *RepositoryDeploymentVariablesOptions) (*DeploymentVariables, error)

func (*Repository) ListEnvironments

func (r *Repository) ListEnvironments(opt *RepositoryEnvironmentsOptions) (*Environments, error)

func (*Repository) ListFiles

func (r *Repository) ListFiles(ro *RepositoryFilesOptions) ([]RepositoryFile, error)

func (*Repository) ListForks

func (r *Repository) ListForks(ro *RepositoryOptions) (interface{}, error)

func (*Repository) ListGroupPermissions

func (r *Repository) ListGroupPermissions(ro *RepositoryOptions) (*GroupPermissions, error)

func (*Repository) ListPipelineVariables

func (r *Repository) ListPipelineVariables(opt *RepositoryPipelineVariablesOptions) (*PipelineVariables, error)

func (*Repository) ListRefs

func (r *Repository) ListRefs(rbo *RepositoryRefOptions) (*RepositoryRefs, error)

ListRefs gets all refs in the Bitbucket repository and returns them as a RepositoryRefs. It takes in a RepositoryRefOptions instance as its only parameter.

func (*Repository) ListTags

func (r *Repository) ListTags(rbo *RepositoryTagOptions) (*RepositoryTags, error)

func (*Repository) ListUserPermissions

func (r *Repository) ListUserPermissions(ro *RepositoryOptions) (*UserPermissions, error)

func (*Repository) ListWatchers

func (r *Repository) ListWatchers(ro *RepositoryOptions) (interface{}, error)

func (*Repository) SetGroupPermissions

func (r *Repository) SetGroupPermissions(rgo *RepositoryGroupPermissionsOptions) (*GroupPermission, error)

func (*Repository) SetUserPermissions

func (r *Repository) SetUserPermissions(rgo *RepositoryUserPermissionsOptions) (*UserPermission, error)

func (*Repository) Update

func (r *Repository) Update(ro *RepositoryOptions) (*Repository, error)

func (*Repository) UpdateDeploymentVariable

func (r *Repository) UpdateDeploymentVariable(opt *RepositoryDeploymentVariableOptions) (*DeploymentVariable, error)

func (*Repository) UpdatePipelineBuildNumber

func (r *Repository) UpdatePipelineBuildNumber(rpbno *RepositoryPipelineBuildNumberOptions) (*PipelineBuildNumber, error)

func (*Repository) UpdatePipelineConfig

func (r *Repository) UpdatePipelineConfig(rpo *RepositoryPipelineOptions) (*Pipeline, error)

func (*Repository) UpdatePipelineVariable

func (r *Repository) UpdatePipelineVariable(opt *RepositoryPipelineVariableOptions) (*PipelineVariable, error)

func (*Repository) WriteFileBlob

func (r *Repository) WriteFileBlob(ro *RepositoryBlobWriteOptions) error

type RepositoryBlob

type RepositoryBlob struct {
	Content []byte
}

func (RepositoryBlob) String

func (rb RepositoryBlob) String() string

type RepositoryBlobOptions

type RepositoryBlobOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Ref      string `json:"ref"`
	Path     string `json:"path"`
}

type RepositoryBlobWriteOptions

type RepositoryBlobWriteOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	FilePath string `json:"filepath"`
	FileName string `json:"filename"`
	Author   string `json:"author"`
	Message  string `json:"message"`
	Branch   string `json:"branch"`
}

Based on https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/src#post

type RepositoryBranch

type RepositoryBranch struct {
	Type                   string
	Name                   string
	Default_Merge_Strategy string
	Merge_Strategies       []string
	Links                  map[string]interface{}
	Target                 map[string]interface{}
	Heads                  []map[string]interface{}
}

type RepositoryBranchCreationOptions

type RepositoryBranchCreationOptions struct {
	Owner    string                 `json:"owner"`
	RepoSlug string                 `json:"repo_slug"`
	Name     string                 `json:"name"`
	Target   RepositoryBranchTarget `json:"target"`
}

type RepositoryBranchDeleteOptions

type RepositoryBranchDeleteOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	RepoUUID string `json:"uuid"`
	RefName  string `json:"name"`
	RefUUID  string `json:uuid`
}

type RepositoryBranchOptions

type RepositoryBranchOptions struct {
	Owner      string `json:"owner"`
	RepoSlug   string `json:"repo_slug"`
	Query      string `json:"query"`
	Sort       string `json:"sort"`
	PageNum    int    `json:"page"`
	Pagelen    int    `json:"pagelen"`
	MaxDepth   int    `json:"max_depth"`
	BranchName string `json:"branch_name"`
}

type RepositoryBranchTarget

type RepositoryBranchTarget struct {
	Hash string `json:"hash"`
}

type RepositoryBranches

type RepositoryBranches struct {
	Page     int
	Pagelen  int
	MaxDepth int
	Size     int
	Next     string
	Branches []RepositoryBranch
}

type RepositoryBranchingModelOptions

type RepositoryBranchingModelOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
}

type RepositoryDefaultReviewerOptions

type RepositoryDefaultReviewerOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Username string `json:"username"`
}

type RepositoryDeploymentVariableDeleteOptions

type RepositoryDeploymentVariableDeleteOptions struct {
	Owner       string       `json:"owner"`
	RepoSlug    string       `json:"repo_slug"`
	Environment *Environment `json:"environment"`
	Uuid        string       `json:"uuid"`
}

type RepositoryDeploymentVariableOptions

type RepositoryDeploymentVariableOptions struct {
	Owner       string       `json:"owner"`
	RepoSlug    string       `json:"repo_slug"`
	Environment *Environment `json:"environment"`
	Uuid        string       `json:"uuid"`
	Key         string       `json:"key"`
	Value       string       `json:"value"`
	Secured     bool         `json:"secured"`
}

type RepositoryDeploymentVariablesOptions

type RepositoryDeploymentVariablesOptions struct {
	Owner       string       `json:"owner"`
	RepoSlug    string       `json:"repo_slug"`
	Environment *Environment `json:"environment"`
	Query       string       `json:"q"`
	Sort        string       `json:"sort"`
	PageNum     int          `json:"page"`
	Pagelen     int          `json:"pagelen"`
	MaxDepth    int          `json:"max_depth"`
}

type RepositoryEnvironmentDeleteOptions

type RepositoryEnvironmentDeleteOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Uuid     string `json:"uuid"`
}

type RepositoryEnvironmentOptions

type RepositoryEnvironmentOptions struct {
	Owner           string                          `json:"owner"`
	RepoSlug        string                          `json:"repo_slug"`
	Uuid            string                          `json:"uuid"`
	Name            string                          `json:"name"`
	EnvironmentType RepositoryEnvironmentTypeOption `json:"environment_type"`
	Rank            int                             `json:"rank"`
}

type RepositoryEnvironmentTypeOption

type RepositoryEnvironmentTypeOption int
const (
	Test RepositoryEnvironmentTypeOption = iota
	Staging
	Production
)

func (RepositoryEnvironmentTypeOption) String

type RepositoryEnvironmentsOptions

type RepositoryEnvironmentsOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
}

type RepositoryFile

type RepositoryFile struct {
	Mimetype   string
	Links      map[string]interface{}
	Path       string
	Commit     map[string]interface{}
	Attributes []string
	Type       string
	Size       int
}

func (RepositoryFile) String

func (rf RepositoryFile) String() string

type RepositoryFilesOptions

type RepositoryFilesOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Ref      string `json:"ref"`
	Path     string `json:"path"`
	MaxDepth int    `json:"max_depth"`
}

type RepositoryForkOptions

type RepositoryForkOptions struct {
	FromOwner string `json:"from_owner"`
	FromSlug  string `json:"from_slug"`
	Owner     string `json:"owner"`
	// TODO: does the API supports specifying  slug on forks?
	// see: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/forks#post
	Name        string `json:"name"`
	IsPrivate   string `json:"is_private"`
	Description string `json:"description"`
	ForkPolicy  string `json:"fork_policy"`
	Language    string `json:"language"`
	HasIssues   string `json:"has_issues"`
	HasWiki     string `json:"has_wiki"`
	Project     string `json:"project"`
}

type RepositoryGroupPermissionsOptions

type RepositoryGroupPermissionsOptions struct {
	Owner      string `json:"owner"`
	RepoSlug   string `json:"repo_slug"`
	Group      string `json:"group"`
	Permission string `json:"permission"`
}

type RepositoryOptions

type RepositoryOptions struct {
	Uuid     string `json:"uuid"`
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Scm      string `json:"scm"`
	//	Name        string `json:"name"`
	IsPrivate   string `json:"is_private"`
	Description string `json:"description"`
	ForkPolicy  string `json:"fork_policy"`
	Language    string `json:"language"`
	HasIssues   string `json:"has_issues"`
	HasWiki     string `json:"has_wiki"`
	Project     string `json:"project"`
}

type RepositoryPipelineBuildNumberOptions

type RepositoryPipelineBuildNumberOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Next     int    `json:"next"`
}

type RepositoryPipelineKeyPairOptions

type RepositoryPipelineKeyPairOptions struct {
	Owner      string `json:"owner"`
	RepoSlug   string `json:"repo_slug"`
	PrivateKey string `json:"private_key"`
	PublicKey  string `json:"public_key"`
}

type RepositoryPipelineOptions

type RepositoryPipelineOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Enabled  bool   `json:"has_pipelines"`
}

type RepositoryPipelineVariableDeleteOptions

type RepositoryPipelineVariableDeleteOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Uuid     string `json:"uuid"`
}

type RepositoryPipelineVariableOptions

type RepositoryPipelineVariableOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Uuid     string `json:"uuid"`
	Key      string `json:"key"`
	Value    string `json:"value"`
	Secured  bool   `json:"secured"`
}

type RepositoryPipelineVariablesOptions

type RepositoryPipelineVariablesOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Query    string `json:"q"`
	Sort     string `json:"sort"`
	PageNum  int    `json:"page"`
	Pagelen  int    `json:"pagelen"`
	MaxDepth int    `json:"max_depth"`
}

type RepositoryRefOptions

type RepositoryRefOptions struct {
	Owner     string `json:"owner"`
	RepoSlug  string `json:"repo_slug"`
	Query     string `json:"query"`
	Sort      string `json:"sort"`
	PageNum   int    `json:"page"`
	Pagelen   int    `json:"pagelen"`
	MaxDepth  int    `json:"max_depth"`
	Name      string `json:"name"`
	BranchFlg bool
}

RepositoryRefOptions represents the options for describing a repository's refs (i.e. tags and branches). The field BranchFlg is a boolean that is indicates whether a specific RepositoryRefOptions instance is meant for Branch specific set of api methods.

type RepositoryRefs

type RepositoryRefs struct {
	Page     int
	Pagelen  int
	MaxDepth int
	Size     int
	Next     string
	Refs     []map[string]interface{}
}

type RepositoryTag

type RepositoryTag struct {
	Type   string
	Name   string
	Links  map[string]interface{}
	Target map[string]interface{}
	Heads  []map[string]interface{}
}

type RepositoryTagCreationOptions

type RepositoryTagCreationOptions struct {
	Owner    string              `json:"owner"`
	RepoSlug string              `json:"repo_slug"`
	Name     string              `json:"name"`
	Target   RepositoryTagTarget `json:"target"`
}

type RepositoryTagOptions

type RepositoryTagOptions struct {
	Owner    string `json:"owner"`
	RepoSlug string `json:"repo_slug"`
	Query    string `json:"q"`
	Sort     string `json:"sort"`
	PageNum  int    `json:"page"`
	Pagelen  int    `json:"pagelen"`
	MaxDepth int    `json:"max_depth"`
}

type RepositoryTagTarget

type RepositoryTagTarget struct {
	Hash string `json:"hash"`
}

type RepositoryTags

type RepositoryTags struct {
	Page     int
	Pagelen  int
	MaxDepth int
	Size     int
	Next     string
	Tags     []RepositoryTag
}

type RepositoryUserPermissionsOptions

type RepositoryUserPermissionsOptions struct {
	Owner      string `json:"owner"`
	RepoSlug   string `json:"repo_slug"`
	User       string `json:"user"`
	Permission string `json:"permission"`
}

type Response

type Response struct {
	Size     int           `json:"size"`
	Page     int           `json:"page"`
	Pagelen  int           `json:"pagelen"`
	Next     string        `json:"next"`
	Previous string        `json:"previous"`
	Values   []interface{} `json:"values"`
}

type Teams

type Teams struct {
	// contains filtered or unexported fields
}

func (*Teams) Followers

func (t *Teams) Followers(teamname string) (interface{}, error)

func (*Teams) Following

func (t *Teams) Following(teamname string) (interface{}, error)

func (*Teams) List

func (t *Teams) List(role string) (interface{}, error)

func (*Teams) Members

func (t *Teams) Members(teamname string) (interface{}, error)

func (*Teams) Profile

func (t *Teams) Profile(teamname string) (interface{}, error)

func (*Teams) Projects

func (t *Teams) Projects(teamname string) (interface{}, error)

func (*Teams) Repositories

func (t *Teams) Repositories(teamname string) (interface{}, error)

type UnexpectedResponseStatusError

type UnexpectedResponseStatusError struct {
	Status string
	Body   []byte
}

UnexpectedResponseStatusError represents an unexpected status code returned from the API, along with the body, if it could be read. If the body could not be read, the body contains the error message trying to read it.

func (*UnexpectedResponseStatusError) Error

func (*UnexpectedResponseStatusError) ErrorWithBody

func (e *UnexpectedResponseStatusError) ErrorWithBody() error

ErrorWithBody returns an error with the given status and body.

type User

type User struct {
	Uuid          string
	Username      string
	Nickname      string
	Website       string
	AccountId     string `mapstructure:"account_id"`
	AccountStatus string `mapstructure:"account_status"`
	DisplayName   string `mapstructure:"display_name"`
	CreatedOn     string `mapstructure:"created_on"`
	Has2faEnabled bool   `mapstructure:"has_2fa_enabled"`
	Links         map[string]interface{}
	// contains filtered or unexported fields
}

User is the sub struct of Client Reference: https://developer.atlassian.com/bitbucket/api/2/reference/resource/user

func (*User) Emails

func (u *User) Emails() (interface{}, error)

Emails is getting user's emails

func (*User) Profile

func (u *User) Profile() (*User, error)

Profile is getting the user data

type UserPermission

type UserPermission struct {
	Type       string
	User       User
	Permission string
	Links      map[string]map[string]string
}

type UserPermissions

type UserPermissions struct {
	Page            int
	Pagelen         int
	MaxDepth        int
	Size            int
	Next            string
	UserPermissions []UserPermission
}

type Users

type Users struct {
	// contains filtered or unexported fields
}

func (*Users) Followers

func (u *Users) Followers(t string) (interface{}, error)

func (*Users) Following

func (u *Users) Following(t string) (interface{}, error)

func (*Users) Get

func (u *Users) Get(t string) (*User, error)

func (*Users) Repositories

func (u *Users) Repositories(t string) (interface{}, error)

type Webhook

type Webhook struct {
	Owner       string   `json:"owner"`
	RepoSlug    string   `json:"repo_slug"`
	Uuid        string   `json:"uuid"`
	Description string   `json:"description"`
	Url         string   `json:"url"`
	Active      bool     `json:"active"`
	Events      []string `json:"events"` // EX: {'repo:push','issue:created',..} REF: https://bit.ly/3FjRHHu
}

type Webhooks

type Webhooks struct {
	// contains filtered or unexported fields
}

func (*Webhooks) Create

func (r *Webhooks) Create(ro *WebhooksOptions) (*Webhook, error)

func (*Webhooks) Delete

func (r *Webhooks) Delete(ro *WebhooksOptions) (interface{}, error)

func (*Webhooks) Get

func (r *Webhooks) Get(ro *WebhooksOptions) (*Webhook, error)

func (*Webhooks) Gets

func (r *Webhooks) Gets(ro *WebhooksOptions) (interface{}, error)

Deprecate Gets for List call

func (*Webhooks) List

func (r *Webhooks) List(ro *WebhooksOptions) ([]Webhook, error)

func (*Webhooks) Update

func (r *Webhooks) Update(ro *WebhooksOptions) (*Webhook, error)

type WebhooksOptions

type WebhooksOptions struct {
	Owner       string   `json:"owner"`
	RepoSlug    string   `json:"repo_slug"`
	Uuid        string   `json:"uuid"`
	Description string   `json:"description"`
	Url         string   `json:"url"`
	Active      bool     `json:"active"`
	Events      []string `json:"events"` // EX: {'repo:push','issue:created',..} REF: https://bit.ly/3FjRHHu
}

type Workspace

type Workspace struct {
	Repositories *Repositories
	Permissions  *Permission

	UUID       string
	Type       string
	Slug       string
	Is_Private bool
	Name       string
	// contains filtered or unexported fields
}

func (*Workspace) CreateProject

func (t *Workspace) CreateProject(opt *ProjectOptions) (*Project, error)

func (*Workspace) DeleteProject

func (t *Workspace) DeleteProject(opt *ProjectOptions) (interface{}, error)

func (*Workspace) Get

func (t *Workspace) Get(workspace string) (*Workspace, error)

func (*Workspace) GetProject

func (t *Workspace) GetProject(opt *ProjectOptions) (*Project, error)

func (*Workspace) List

func (t *Workspace) List() (*WorkspaceList, error)

func (*Workspace) Members

func (w *Workspace) Members(teamname string) (*WorkspaceMembers, error)

func (*Workspace) Projects

func (w *Workspace) Projects(teamname string) (*ProjectsRes, error)

func (*Workspace) UpdateProject

func (t *Workspace) UpdateProject(opt *ProjectOptions) (*Project, error)

type WorkspaceList

type WorkspaceList struct {
	Page       int
	Pagelen    int
	MaxDepth   int
	Size       int
	Next       string
	Workspaces []Workspace
}

type WorkspaceMembers

type WorkspaceMembers struct {
	Page    int
	Pagelen int
	Size    int
	Members []User
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL