Documentation
¶
Index ¶
Constants ¶
const MaxDiffSize = 4 << 20 // 4 MiB
MaxDiffSize is the maximum number of bytes read from a diff response. Diffs exceeding this limit are rejected with ErrDiffTooLarge.
const ( // Adding padding to our retry times to guard against over-consumption of request quotas. RateLimitPadding = 5 * time.Minute )
Variables ¶
var ErrDiffTooLarge = xerrors.Errorf("diff exceeds maximum size of %d bytes", MaxDiffSize)
ErrDiffTooLarge is returned when a diff exceeds MaxDiffSize.
Functions ¶
Types ¶
type Option ¶
type Option func(*providerOptions)
Option configures optional behavior for a Provider.
type PRRef ¶
type PRRef struct {
// Owner is the repository owner / project / workspace.
Owner string
// Repo is the repository name or slug.
Repo string
// Number is the PR number / IID / index.
Number int
}
PRRef identifies a pull request on any provider.
type PRState ¶
type PRState string
PRState is the normalized state of a pull/merge request across all providers.
type PRStatus ¶
type PRStatus struct {
// Title is the PR's title/subject line.
Title string
// State is the PR's lifecycle state.
State PRState
// Draft indicates the PR is marked as draft/WIP.
Draft bool
// HeadSHA is the SHA of the head commit.
HeadSHA string
// HeadBranch is the name of the branch containing the PR changes.
HeadBranch string
// DiffStats summarizes additions/deletions/files changed.
DiffStats DiffStats
// ChangesRequested is a convenience boolean: true if any
// reviewer's current state is "changes_requested".
ChangesRequested bool
// AuthorLogin is the login/username of the PR author.
AuthorLogin string
// AuthorAvatarURL is the avatar URL of the PR author.
AuthorAvatarURL string
// BaseBranch is the target branch the PR will merge into.
BaseBranch string
// PRNumber is the PR number (e.g. 1347).
PRNumber int
// Commits is the number of commits in the PR.
Commits int32
// Approved is true when at least one reviewer has approved
// and no reviewer has outstanding changes requested.
Approved bool
// ReviewerCount is the number of distinct reviewers who
// have left a decisive review (approved, changes_requested,
// or dismissed).
ReviewerCount int32
// FetchedAt is when this status was fetched.
FetchedAt time.Time
}
PRStatus is the complete status of a pull/merge request. This is the universal return type that all providers populate.
type Provider ¶
type Provider interface {
// FetchPullRequestStatus retrieves the complete status of a
// pull request in the minimum number of API calls for this
// provider.
FetchPullRequestStatus(ctx context.Context, token string, ref PRRef) (*PRStatus, error)
// ResolveBranchPullRequest finds the open PR (if any) for
// the given branch. Returns nil, nil if no open PR exists.
ResolveBranchPullRequest(ctx context.Context, token string, ref BranchRef) (*PRRef, error)
// FetchPullRequestDiff returns the raw unified diff for a
// pull request. This uses the PR's actual base branch (which
// may differ from the repo default branch, e.g. a PR
// targeting "staging" instead of "main"), so it matches what
// the provider shows on the PR's "Files changed" tab.
// Returns ErrDiffTooLarge if the diff exceeds MaxDiffSize.
FetchPullRequestDiff(ctx context.Context, token string, ref PRRef) (string, error)
// FetchBranchDiff returns the diff of a branch compared
// against the repository's default branch. This is the
// fallback when no pull request exists yet (e.g. the agent
// pushed a branch but hasn't opened a PR). Returns
// ErrDiffTooLarge if the diff exceeds MaxDiffSize.
FetchBranchDiff(ctx context.Context, token string, ref BranchRef) (string, error)
// ParseRepositoryOrigin parses a remote origin URL (HTTPS
// or SSH) into owner and repo components, returning the
// normalized HTTPS URL. Returns false if the URL does not
// match this provider.
ParseRepositoryOrigin(raw string) (owner, repo, normalizedOrigin string, ok bool)
// ParsePullRequestURL parses a pull request URL into a
// PRRef. Returns false if the URL does not match this
// provider.
ParsePullRequestURL(raw string) (PRRef, bool)
// NormalizePullRequestURL normalizes a pull request URL,
// stripping trailing punctuation, query strings, and
// fragments. Returns empty string if the URL does not
// match this provider.
NormalizePullRequestURL(raw string) string
// BuildBranchURL constructs a URL to view a branch on
// the provider's web UI.
BuildBranchURL(owner, repo, branch string) string
// BuildRepositoryURL constructs a URL to view a repository
// on the provider's web UI.
BuildRepositoryURL(owner, repo string) string
// BuildPullRequestURL constructs a URL to view a pull
// request on the provider's web UI.
BuildPullRequestURL(ref PRRef) string
}
Provider defines the interface that all Git hosting providers implement. Each method is designed to minimize API round-trips for the specific provider.
type RateLimitError ¶
RateLimitError indicates the git provider's API rate limit was hit.
func (*RateLimitError) Error ¶
func (e *RateLimitError) Error() string