2016-11-07 19:23:13 +05:30
// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
2019-05-11 15:51:34 +05:30
package structs
2016-11-07 19:23:13 +05:30
import (
2020-09-09 23:59:10 +05:30
"strings"
2016-11-07 19:23:13 +05:30
"time"
)
2017-11-13 12:32:25 +05:30
// Permission represents a set of permissions
2016-11-07 19:23:13 +05:30
type Permission struct {
Admin bool ` json:"admin" `
Push bool ` json:"push" `
Pull bool ` json:"pull" `
}
2019-10-02 15:00:41 +05:30
// InternalTracker represents settings for internal tracker
// swagger:model
type InternalTracker struct {
// Enable time tracking (Built-in issue tracker)
EnableTimeTracker bool ` json:"enable_time_tracker" `
// Let only contributors track time (Built-in issue tracker)
AllowOnlyContributorsToTrackTime bool ` json:"allow_only_contributors_to_track_time" `
// Enable dependencies for issues and pull requests (Built-in issue tracker)
EnableIssueDependencies bool ` json:"enable_issue_dependencies" `
}
// ExternalTracker represents settings for external tracker
// swagger:model
type ExternalTracker struct {
// URL of external issue tracker.
ExternalTrackerURL string ` json:"external_tracker_url" `
// External Issue Tracker URL Format. Use the placeholders {user}, {repo} and {index} for the username, repository name and issue index.
ExternalTrackerFormat string ` json:"external_tracker_format" `
// External Issue Tracker Number Format, either `numeric` or `alphanumeric`
ExternalTrackerStyle string ` json:"external_tracker_style" `
}
// ExternalWiki represents setting for external wiki
// swagger:model
type ExternalWiki struct {
// URL of external wiki.
ExternalWikiURL string ` json:"external_wiki_url" `
}
2017-11-13 12:32:25 +05:30
// Repository represents a repository
2016-11-07 19:23:13 +05:30
type Repository struct {
ID int64 ` json:"id" `
Owner * User ` json:"owner" `
Name string ` json:"name" `
FullName string ` json:"full_name" `
Description string ` json:"description" `
2017-05-05 08:25:54 +05:30
Empty bool ` json:"empty" `
2016-11-07 19:23:13 +05:30
Private bool ` json:"private" `
Fork bool ` json:"fork" `
2019-11-11 20:45:29 +05:30
Template bool ` json:"template" `
2017-05-12 08:39:26 +05:30
Parent * Repository ` json:"parent" `
2017-02-23 05:23:33 +05:30
Mirror bool ` json:"mirror" `
2017-05-05 08:25:54 +05:30
Size int ` json:"size" `
2016-11-07 19:23:13 +05:30
HTMLURL string ` json:"html_url" `
SSHURL string ` json:"ssh_url" `
CloneURL string ` json:"clone_url" `
2019-07-08 07:44:12 +05:30
OriginalURL string ` json:"original_url" `
2016-11-07 19:23:13 +05:30
Website string ` json:"website" `
Stars int ` json:"stars_count" `
Forks int ` json:"forks_count" `
Watchers int ` json:"watchers_count" `
OpenIssues int ` json:"open_issues_count" `
2019-11-29 20:44:24 +05:30
OpenPulls int ` json:"open_pr_counter" `
2019-12-01 00:58:47 +05:30
Releases int ` json:"release_counter" `
2016-11-07 19:23:13 +05:30
DefaultBranch string ` json:"default_branch" `
2018-10-29 03:33:02 +05:30
Archived bool ` json:"archived" `
2017-11-13 12:32:25 +05:30
// swagger:strfmt date-time
2018-03-06 06:52:16 +05:30
Created time . Time ` json:"created_at" `
2017-11-13 12:32:25 +05:30
// swagger:strfmt date-time
2019-10-02 15:00:41 +05:30
Updated time . Time ` json:"updated_at" `
Permissions * Permission ` json:"permissions,omitempty" `
HasIssues bool ` json:"has_issues" `
InternalTracker * InternalTracker ` json:"internal_tracker,omitempty" `
ExternalTracker * ExternalTracker ` json:"external_tracker,omitempty" `
HasWiki bool ` json:"has_wiki" `
ExternalWiki * ExternalWiki ` json:"external_wiki,omitempty" `
HasPullRequests bool ` json:"has_pull_requests" `
2020-08-17 08:37:38 +05:30
HasProjects bool ` json:"has_projects" `
2019-10-02 15:00:41 +05:30
IgnoreWhitespaceConflicts bool ` json:"ignore_whitespace_conflicts" `
AllowMerge bool ` json:"allow_merge_commits" `
AllowRebase bool ` json:"allow_rebase" `
AllowRebaseMerge bool ` json:"allow_rebase_explicit" `
AllowSquash bool ` json:"allow_squash_merge" `
2021-03-27 20:25:40 +05:30
DefaultMergeStyle string ` json:"default_merge_style" `
2019-10-02 15:00:41 +05:30
AvatarURL string ` json:"avatar_url" `
2020-06-05 17:11:06 +05:30
Internal bool ` json:"internal" `
2021-01-03 05:17:47 +05:30
MirrorInterval string ` json:"mirror_interval" `
2021-12-24 09:56:52 +05:30
RepoTransfer * RepoTransfer ` json:"repo_transfer" `
2016-11-07 19:23:13 +05:30
}
2016-11-29 13:39:17 +05:30
// CreateRepoOption options when creating repository
2017-11-13 12:32:25 +05:30
// swagger:model
2016-11-07 19:23:13 +05:30
type CreateRepoOption struct {
2017-05-02 19:05:59 +05:30
// Name of the repository to create
//
2017-11-13 12:32:25 +05:30
// required: true
2017-05-02 19:05:59 +05:30
// unique: true
Name string ` json:"name" binding:"Required;AlphaDashDot;MaxSize(100)" `
// Description of the repository to create
2016-11-07 19:23:13 +05:30
Description string ` json:"description" binding:"MaxSize(255)" `
2017-11-13 12:32:25 +05:30
// Whether the repository is private
2017-05-02 19:05:59 +05:30
Private bool ` json:"private" `
2021-01-19 01:30:50 +05:30
// Label-Set to use
2019-09-08 13:58:40 +05:30
IssueLabels string ` json:"issue_labels" `
2017-11-13 12:32:25 +05:30
// Whether the repository should be auto-intialized?
2017-05-02 19:05:59 +05:30
AutoInit bool ` json:"auto_init" `
2020-09-25 10:48:37 +05:30
// Whether the repository is template
Template bool ` json:"template" `
2017-05-02 19:05:59 +05:30
// Gitignores to use
Gitignores string ` json:"gitignores" `
// License to use
License string ` json:"license" `
// Readme of the repository to create
Readme string ` json:"readme" `
2020-03-27 00:44:51 +05:30
// DefaultBranch of the repository (used when initializes and in template)
DefaultBranch string ` json:"default_branch" binding:"GitRefName;MaxSize(100)" `
2020-09-19 22:14:55 +05:30
// TrustModel of the repository
// enum: default,collaborator,committer,collaboratorcommitter
TrustModel string ` json:"trust_model" `
2016-11-07 19:23:13 +05:30
}
2019-05-11 15:51:34 +05:30
// EditRepoOption options when editing a repository's properties
// swagger:model
type EditRepoOption struct {
2019-05-30 20:39:05 +05:30
// name of the repository
2019-05-11 15:51:34 +05:30
// unique: true
2019-05-30 20:39:05 +05:30
Name * string ` json:"name,omitempty" binding:"OmitEmpty;AlphaDashDot;MaxSize(100);" `
// a short description of the repository.
2019-05-11 15:51:34 +05:30
Description * string ` json:"description,omitempty" binding:"MaxSize(255)" `
2019-05-30 20:39:05 +05:30
// a URL with more information about the repository.
2019-05-11 15:51:34 +05:30
Website * string ` json:"website,omitempty" binding:"MaxSize(255)" `
2019-05-30 20:39:05 +05:30
// either `true` to make the repository private or `false` to make it public.
// Note: you will get a 422 error if the organization restricts changing repository visibility to organization
2019-05-11 15:51:34 +05:30
// owners and a non-owner tries to change the value of private.
Private * bool ` json:"private,omitempty" `
2019-11-11 20:45:29 +05:30
// either `true` to make this repository a template or `false` to make it a normal repository
Template * bool ` json:"template,omitempty" `
2019-05-30 20:39:05 +05:30
// either `true` to enable issues for this repository or `false` to disable them.
HasIssues * bool ` json:"has_issues,omitempty" `
2019-10-02 15:00:41 +05:30
// set this structure to configure internal issue tracker (requires has_issues)
InternalTracker * InternalTracker ` json:"internal_tracker,omitempty" `
// set this structure to use external issue tracker (requires has_issues)
ExternalTracker * ExternalTracker ` json:"external_tracker,omitempty" `
2019-05-30 20:39:05 +05:30
// either `true` to enable the wiki for this repository or `false` to disable it.
HasWiki * bool ` json:"has_wiki,omitempty" `
2019-10-02 15:00:41 +05:30
// set this structure to use external wiki instead of internal (requires has_wiki)
ExternalWiki * ExternalWiki ` json:"external_wiki,omitempty" `
2019-05-30 20:39:05 +05:30
// sets the default branch for this repository.
2019-05-11 15:51:34 +05:30
DefaultBranch * string ` json:"default_branch,omitempty" `
2019-05-30 20:39:05 +05:30
// either `true` to allow pull requests, or `false` to prevent pull request.
HasPullRequests * bool ` json:"has_pull_requests,omitempty" `
2020-08-17 08:37:38 +05:30
// either `true` to enable project unit, or `false` to disable them.
HasProjects * bool ` json:"has_projects,omitempty" `
2019-05-30 20:39:05 +05:30
// either `true` to ignore whitespace for conflicts, or `false` to not ignore whitespace. `has_pull_requests` must be `true`.
IgnoreWhitespaceConflicts * bool ` json:"ignore_whitespace_conflicts,omitempty" `
// either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits. `has_pull_requests` must be `true`.
2019-05-11 15:51:34 +05:30
AllowMerge * bool ` json:"allow_merge_commits,omitempty" `
2019-05-30 20:39:05 +05:30
// either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging. `has_pull_requests` must be `true`.
2019-05-11 15:51:34 +05:30
AllowRebase * bool ` json:"allow_rebase,omitempty" `
2019-05-30 20:39:05 +05:30
// either `true` to allow rebase with explicit merge commits (--no-ff), or `false` to prevent rebase with explicit merge commits. `has_pull_requests` must be `true`.
2019-05-11 15:51:34 +05:30
AllowRebaseMerge * bool ` json:"allow_rebase_explicit,omitempty" `
2019-05-30 20:39:05 +05:30
// either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging. `has_pull_requests` must be `true`.
AllowSquash * bool ` json:"allow_squash_merge,omitempty" `
2021-03-04 09:11:23 +05:30
// either `true` to allow mark pr as merged manually, or `false` to prevent it. `has_pull_requests` must be `true`.
AllowManualMerge * bool ` json:"allow_manual_merge,omitempty" `
// either `true` to enable AutodetectManualMerge, or `false` to prevent it. `has_pull_requests` must be `true`, Note: In some special cases, misjudgments can occur.
AutodetectManualMerge * bool ` json:"autodetect_manual_merge,omitempty" `
2021-07-13 04:56:25 +05:30
// set to `true` to delete pr branch after merge by default
DefaultDeleteBranchAfterMerge * bool ` json:"default_delete_branch_after_merge,omitempty" `
2021-03-27 20:25:40 +05:30
// set to a merge style to be used by this repository: "merge", "rebase", "rebase-merge", or "squash". `has_pull_requests` must be `true`.
DefaultMergeStyle * string ` json:"default_merge_style,omitempty" `
2019-05-30 20:39:05 +05:30
// set to `true` to archive this repository.
2019-05-11 15:51:34 +05:30
Archived * bool ` json:"archived,omitempty" `
2021-01-03 05:17:47 +05:30
// set to a string like `8h30m0s` to set the mirror interval time
MirrorInterval * string ` json:"mirror_interval,omitempty" `
2016-11-07 19:23:13 +05:30
}
2021-07-05 20:59:08 +05:30
// GenerateRepoOption options when creating repository using a template
// swagger:model
type GenerateRepoOption struct {
// The organization or person who will own the new repository
//
// required: true
Owner string ` json:"owner" `
// Name of the repository to create
//
// required: true
// unique: true
Name string ` json:"name" binding:"Required;AlphaDashDot;MaxSize(100)" `
// Description of the repository to create
Description string ` json:"description" binding:"MaxSize(255)" `
// Whether the repository is private
Private bool ` json:"private" `
// include git content of default branch in template repo
GitContent bool ` json:"git_content" `
// include topics in template repo
Topics bool ` json:"topics" `
// include git hooks in template repo
GitHooks bool ` json:"git_hooks" `
// include webhooks in template repo
Webhooks bool ` json:"webhooks" `
// include avatar of the template repo
Avatar bool ` json:"avatar" `
// include labels in template repo
Labels bool ` json:"labels" `
}
2020-05-29 23:46:20 +05:30
// CreateBranchRepoOption options when creating a branch in a repository
// swagger:model
type CreateBranchRepoOption struct {
// Name of the branch to create
//
// required: true
// unique: true
BranchName string ` json:"new_branch_name" binding:"Required;GitRefName;MaxSize(100)" `
// Name of the old branch to create from
//
// unique: true
OldBranchName string ` json:"old_branch_name" binding:"GitRefName;MaxSize(100)" `
}
2020-01-31 21:19:04 +05:30
// TransferRepoOption options when transfer a repository's ownership
// swagger:model
type TransferRepoOption struct {
// required: true
NewOwner string ` json:"new_owner" `
// ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.
TeamIDs * [ ] int64 ` json:"team_ids" `
}
2019-10-14 11:40:42 +05:30
// GitServiceType represents a git service
type GitServiceType int
// enumerate all GitServiceType
const (
2021-11-15 00:41:10 +05:30
NotMigrated GitServiceType = iota // 0 not migrated from external sites
PlainGitService // 1 plain git service
GithubService // 2 github.com
GiteaService // 3 gitea service
GitlabService // 4 gitlab service
GogsService // 5 gogs service
OneDevService // 6 onedev service
GitBucketService // 7 gitbucket service
2021-12-03 03:54:02 +05:30
CodebaseService // 8 codebase service
2019-10-14 11:40:42 +05:30
)
// Name represents the service type's name
// WARNNING: the name have to be equal to that on goth's library
func ( gt GitServiceType ) Name ( ) string {
2020-09-09 23:59:10 +05:30
return strings . ToLower ( gt . Title ( ) )
2019-10-14 11:40:42 +05:30
}
2020-08-28 07:06:37 +05:30
// Title represents the service type's proper title
func ( gt GitServiceType ) Title ( ) string {
switch gt {
case GithubService :
return "GitHub"
case GiteaService :
return "Gitea"
case GitlabService :
return "GitLab"
case GogsService :
return "Gogs"
2021-08-22 04:17:45 +05:30
case OneDevService :
return "OneDev"
2021-11-15 00:41:10 +05:30
case GitBucketService :
return "GitBucket"
2021-12-03 03:54:02 +05:30
case CodebaseService :
return "Codebase"
2020-08-28 07:06:37 +05:30
case PlainGitService :
return "Git"
}
return ""
}
2020-09-11 03:59:19 +05:30
// MigrateRepoOptions options for migrating repository's
// this is used to interact with api v1
type MigrateRepoOptions struct {
// required: true
CloneAddr string ` json:"clone_addr" binding:"Required" `
// deprecated (only for backwards compatibility)
RepoOwnerID int64 ` json:"uid" `
// Name of User or Organisation who will own Repo after migration
RepoOwner string ` json:"repo_owner" `
// required: true
RepoName string ` json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)" `
// enum: git,github,gitea,gitlab
Service string ` json:"service" `
AuthUsername string ` json:"auth_username" `
AuthPassword string ` json:"auth_password" `
AuthToken string ` json:"auth_token" `
2021-01-03 05:17:47 +05:30
Mirror bool ` json:"mirror" `
2021-04-09 03:55:57 +05:30
LFS bool ` json:"lfs" `
LFSEndpoint string ` json:"lfs_endpoint" `
2021-01-03 05:17:47 +05:30
Private bool ` json:"private" `
Description string ` json:"description" binding:"MaxSize(255)" `
Wiki bool ` json:"wiki" `
Milestones bool ` json:"milestones" `
Labels bool ` json:"labels" `
Issues bool ` json:"issues" `
PullRequests bool ` json:"pull_requests" `
Releases bool ` json:"releases" `
MirrorInterval string ` json:"mirror_interval" `
2020-09-11 03:59:19 +05:30
}
2020-08-28 07:06:37 +05:30
// TokenAuth represents whether a service type supports token-based auth
func ( gt GitServiceType ) TokenAuth ( ) bool {
switch gt {
case GithubService , GiteaService , GitlabService :
return true
}
return false
}
2019-10-14 11:40:42 +05:30
var (
// SupportedFullGitService represents all git services supported to migrate issues/labels/prs and etc.
// TODO: add to this list after new git service added
SupportedFullGitService = [ ] GitServiceType {
GithubService ,
2020-04-19 21:14:11 +05:30
GitlabService ,
2020-10-14 09:36:00 +05:30
GiteaService ,
2021-01-22 01:03:58 +05:30
GogsService ,
2021-08-22 04:17:45 +05:30
OneDevService ,
2021-11-15 00:41:10 +05:30
GitBucketService ,
2021-12-03 03:54:02 +05:30
CodebaseService ,
2019-10-14 11:40:42 +05:30
}
)
2021-12-24 09:56:52 +05:30
// RepoTransfer represents a pending repo transfer
type RepoTransfer struct {
Doer * User ` json:"doer" `
Recipient * User ` json:"recipient" `
Teams [ ] * Team ` json:"teams" `
}