You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

repo.go 12 kB

Template Repositories (#8768) * Start work on templates Signed-off-by: jolheiser <john.olheiser@gmail.com> * Continue work Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix IsTemplate vs IsGenerated Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix tabs vs spaces * Tabs vs Spaces * Add templates to API & start adding tests Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix integration tests Signed-off-by: jolheiser <john.olheiser@gmail.com> * Remove unused User Signed-off-by: jolheiser <john.olheiser@gmail.com> * Move template tests to existing repos Signed-off-by: jolheiser <john.olheiser@gmail.com> * Minor re-check updates and cleanup Signed-off-by: jolheiser <john.olheiser@gmail.com> * make fmt Signed-off-by: jolheiser <john.olheiser@gmail.com> * Test cleanup Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix optionalbool Signed-off-by: jolheiser <john.olheiser@gmail.com> * make fmt Signed-off-by: jolheiser <john.olheiser@gmail.com> * Test fixes and icon change Signed-off-by: jolheiser <john.olheiser@gmail.com> * Add new user and repo for tests Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix tests (finally) Signed-off-by: jolheiser <john.olheiser@gmail.com> * Update meta repo with env variables Signed-off-by: jolheiser <john.olheiser@gmail.com> * Move generation to create page Combine with repo create template Modify API search to prioritize owner for repo Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix tests and coverage Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix swagger and JS lint Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix API searching for own private repos Signed-off-by: jolheiser <john.olheiser@gmail.com> * Change wording Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix repo search test. User had a private repo that didn't show up Signed-off-by: jolheiser <john.olheiser@gmail.com> * Another search test fix Signed-off-by: jolheiser <john.olheiser@gmail.com> * Clarify git content Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com> * Feedback updates Signed-off-by: jolheiser <john.olheiser@gmail.com> * Add topics WIP Signed-off-by: jolheiser <john.olheiser@gmail.com> * Finish adding topics Signed-off-by: jolheiser <john.olheiser@gmail.com> * Update locale Signed-off-by: jolheiser <john.olheiser@gmail.com>
5 years ago
Add Attachment API (#3478) * Add Attachment API * repos/:owner/:repo/releases (add attachments) * repos/:owner/:repo/releases/:id (add attachments) * repos/:owner/:repo/releases/:id/attachments * repos/:owner/:repo/releases/:id/attachments/:attachment_id Signed-off-by: Jonas Franz <info@jonasfranz.de> * Add unit tests for new attachment functions Fix comments Signed-off-by: Jonas Franz <info@jonasfranz.software> * fix lint * Update vendor.json Signed-off-by: Jonas Franz <info@jonasfranz.software> * remove version of sdk Signed-off-by: Jonas Franz <info@jonasfranz.software> * Fix unit tests Add missing license header Signed-off-by: Jonas Franz <info@jonasfranz.software> * Add CreateReleaseAttachment Add EditReleaseAttachment Add DeleteReleaseAttachment Signed-off-by: Jonas Franz <info@jonasfranz.software> * Add filename query parameter for choosing another name for an attachment Signed-off-by: Jonas Franz <info@jonasfranz.software> * Fix order of imports Signed-off-by: Jonas Franz <info@jonasfranz.software> * Restricting updatable attachment columns Signed-off-by: Jonas Franz <info@jonasfranz.software> * gofmt Signed-off-by: Jonas Franz <info@jonasfranz.software> * Update go-sdk Replace Attachments with Assets Signed-off-by: Jonas Franz <info@jonasfranz.de> * Update go-sdk Signed-off-by: Jonas Franz <info@jonasfranz.de> * Updating go-sdk and regenerating swagger Signed-off-by: Jonas Franz <info@jonasfranz.software> * Add missing file of go-sdk Signed-off-by: Jonas Franz <info@jonasfranz.software> * Change origin of code.gitea.io/sdk to code.gitea.io/sdk Update code.gitea.io/sdk Signed-off-by: Jonas Franz <info@jonasfranz.software> * Update swagger Signed-off-by: Jonas Franz <info@jonasfranz.software> * Update updateAttachment
7 years ago
Add configurable Trust Models (#11712) * Add configurable Trust Models Gitea's default signature verification model differs from GitHub. GitHub uses signatures to verify that the committer is who they say they are - meaning that when GitHub makes a signed commit it must be the committer. The GitHub model prevents re-publishing of commits after revocation of a key and prevents re-signing of other people's commits to create a completely trusted repository signed by one key or a set of trusted keys. The default behaviour of Gitea in contrast is to always display the avatar and information related to a signature. This allows signatures to be decoupled from the committer. That being said, allowing arbitary users to present other peoples commits as theirs is not necessarily desired therefore we have a trust model whereby signatures from collaborators are marked trusted, signatures matching the commit line are marked untrusted and signatures that match a user in the db but not the committer line are marked unmatched. The problem with this model is that this conflicts with Github therefore we need to provide an option to allow users to choose the Github model should they wish to. Signed-off-by: Andrew Thornton <art27@cantab.net> * Adjust locale strings Signed-off-by: Andrew Thornton <art27@cantab.net> * as per @6543 Co-authored-by: 6543 <6543@obermui.de> * Update models/gpg_key.go * Add migration for repository Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
4 years ago
Template Repositories (#8768) * Start work on templates Signed-off-by: jolheiser <john.olheiser@gmail.com> * Continue work Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix IsTemplate vs IsGenerated Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix tabs vs spaces * Tabs vs Spaces * Add templates to API & start adding tests Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix integration tests Signed-off-by: jolheiser <john.olheiser@gmail.com> * Remove unused User Signed-off-by: jolheiser <john.olheiser@gmail.com> * Move template tests to existing repos Signed-off-by: jolheiser <john.olheiser@gmail.com> * Minor re-check updates and cleanup Signed-off-by: jolheiser <john.olheiser@gmail.com> * make fmt Signed-off-by: jolheiser <john.olheiser@gmail.com> * Test cleanup Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix optionalbool Signed-off-by: jolheiser <john.olheiser@gmail.com> * make fmt Signed-off-by: jolheiser <john.olheiser@gmail.com> * Test fixes and icon change Signed-off-by: jolheiser <john.olheiser@gmail.com> * Add new user and repo for tests Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix tests (finally) Signed-off-by: jolheiser <john.olheiser@gmail.com> * Update meta repo with env variables Signed-off-by: jolheiser <john.olheiser@gmail.com> * Move generation to create page Combine with repo create template Modify API search to prioritize owner for repo Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix tests and coverage Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix swagger and JS lint Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix API searching for own private repos Signed-off-by: jolheiser <john.olheiser@gmail.com> * Change wording Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix repo search test. User had a private repo that didn't show up Signed-off-by: jolheiser <john.olheiser@gmail.com> * Another search test fix Signed-off-by: jolheiser <john.olheiser@gmail.com> * Clarify git content Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com> * Feedback updates Signed-off-by: jolheiser <john.olheiser@gmail.com> * Add topics WIP Signed-off-by: jolheiser <john.olheiser@gmail.com> * Finish adding topics Signed-off-by: jolheiser <john.olheiser@gmail.com> * Update locale Signed-off-by: jolheiser <john.olheiser@gmail.com>
5 years ago
Add support for migrating from Gitlab (#9084) * First stab at a Gitlab migrations interface. * Modify JS to show migration for Gitlab * Properly strip out #gitlab tag from repo name * Working Gitlab migrations! Still need to figure out how to hide tokens/etc from showing up in opts.CloneAddr * Try #2 at trying to hide credentials. CloneAddr was being used as OriginalURL. Now passing OriginalURL through from the form and saving it. * Add go-gitlab dependency * Vendor go-gitlab * Use gitlab.BasicAuthClient Correct CloneURL. This should be functioning! Previous commits fixed "Migrated from" from including the migration credentials. * Replaced repoPath with repoID globally. RepoID is grabbed in NewGitlabDownloader * Logging touchup * Properly set private repo status. Properly set milestone deadline time. Consistently use Gitlab username for 'Name'. * Add go-gitlab vendor cache * Fix PR migrations: - Count of issues is kept to set a non-conflicting PR.ID - Bool is used to tell whether to fetch Issue or PR comments * Ensure merged PRs are closed and set with the proper time * Remove copyright and some commented code * Rip out '#gitlab' based self-hosted Gitlab support * Hide given credentials for migrated repos. CloneAddr was being saved as OriginalURL. Now passing OriginalURL through from the form and saving it in it's place * Use asset.URL directly, no point in parsing. Opened PRs should fall through to false. * Fix importing Milestones. Allow importing using Personal Tokens or anonymous access. * Fix Gitlab Milestone migration if DueDate isn't set * Empty Milestone due dates properly return nil, not zero time * Add GITLAB_READ_TOKEN to drone unit-test step * Add working gitlab_test.go. A Personal Access Token, given in env variable GITLAB_READ_TOKEN is required to run the test. * Fix linting issues * Add modified JS files * Remove pre-build JS files * Only merged PRs are marged as merged/closed * Test topics * Skip test if gitlab is inaccessible * Grab personal token from username, not password. Matches Github migration implementation * Add SetContext() to GitlabDownloader. * Checking Updated field in Issues. * Actually fetch Issue Updated time from Gitlab * Add Gitlab migration GetReviews() stub * Fix Patch and Clone URLs * check Updated too * fix mod * make vendor with go1.14 Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. // Copyright 2014 The Gogs Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package structs
  5. import (
  6. "strings"
  7. "time"
  8. )
  9. // Permission represents a set of permissions
  10. type Permission struct {
  11. Admin bool `json:"admin"`
  12. Push bool `json:"push"`
  13. Pull bool `json:"pull"`
  14. }
  15. // InternalTracker represents settings for internal tracker
  16. // swagger:model
  17. type InternalTracker struct {
  18. // Enable time tracking (Built-in issue tracker)
  19. EnableTimeTracker bool `json:"enable_time_tracker"`
  20. // Let only contributors track time (Built-in issue tracker)
  21. AllowOnlyContributorsToTrackTime bool `json:"allow_only_contributors_to_track_time"`
  22. // Enable dependencies for issues and pull requests (Built-in issue tracker)
  23. EnableIssueDependencies bool `json:"enable_issue_dependencies"`
  24. }
  25. // ExternalTracker represents settings for external tracker
  26. // swagger:model
  27. type ExternalTracker struct {
  28. // URL of external issue tracker.
  29. ExternalTrackerURL string `json:"external_tracker_url"`
  30. // External Issue Tracker URL Format. Use the placeholders {user}, {repo} and {index} for the username, repository name and issue index.
  31. ExternalTrackerFormat string `json:"external_tracker_format"`
  32. // External Issue Tracker Number Format, either `numeric` or `alphanumeric`
  33. ExternalTrackerStyle string `json:"external_tracker_style"`
  34. }
  35. // ExternalWiki represents setting for external wiki
  36. // swagger:model
  37. type ExternalWiki struct {
  38. // URL of external wiki.
  39. ExternalWikiURL string `json:"external_wiki_url"`
  40. }
  41. // Repository represents a repository
  42. type Repository struct {
  43. ID int64 `json:"id"`
  44. Owner *User `json:"owner"`
  45. Name string `json:"name"`
  46. FullName string `json:"full_name"`
  47. Description string `json:"description"`
  48. Empty bool `json:"empty"`
  49. Private bool `json:"private"`
  50. Fork bool `json:"fork"`
  51. Template bool `json:"template"`
  52. Parent *Repository `json:"parent"`
  53. Mirror bool `json:"mirror"`
  54. Size int `json:"size"`
  55. HTMLURL string `json:"html_url"`
  56. SSHURL string `json:"ssh_url"`
  57. CloneURL string `json:"clone_url"`
  58. OriginalURL string `json:"original_url"`
  59. Website string `json:"website"`
  60. Stars int `json:"stars_count"`
  61. Forks int `json:"forks_count"`
  62. Watchers int `json:"watchers_count"`
  63. OpenIssues int `json:"open_issues_count"`
  64. OpenPulls int `json:"open_pr_counter"`
  65. Releases int `json:"release_counter"`
  66. DefaultBranch string `json:"default_branch"`
  67. Archived bool `json:"archived"`
  68. // swagger:strfmt date-time
  69. Created time.Time `json:"created_at"`
  70. // swagger:strfmt date-time
  71. Updated time.Time `json:"updated_at"`
  72. Permissions *Permission `json:"permissions,omitempty"`
  73. HasIssues bool `json:"has_issues"`
  74. InternalTracker *InternalTracker `json:"internal_tracker,omitempty"`
  75. ExternalTracker *ExternalTracker `json:"external_tracker,omitempty"`
  76. HasWiki bool `json:"has_wiki"`
  77. ExternalWiki *ExternalWiki `json:"external_wiki,omitempty"`
  78. HasPullRequests bool `json:"has_pull_requests"`
  79. HasProjects bool `json:"has_projects"`
  80. IgnoreWhitespaceConflicts bool `json:"ignore_whitespace_conflicts"`
  81. AllowMerge bool `json:"allow_merge_commits"`
  82. AllowRebase bool `json:"allow_rebase"`
  83. AllowRebaseMerge bool `json:"allow_rebase_explicit"`
  84. AllowSquash bool `json:"allow_squash_merge"`
  85. AvatarURL string `json:"avatar_url"`
  86. Internal bool `json:"internal"`
  87. MirrorInterval string `json:"mirror_interval"`
  88. }
  89. // CreateRepoOption options when creating repository
  90. // swagger:model
  91. type CreateRepoOption struct {
  92. // Name of the repository to create
  93. //
  94. // required: true
  95. // unique: true
  96. Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(100)"`
  97. // Description of the repository to create
  98. Description string `json:"description" binding:"MaxSize(255)"`
  99. // Whether the repository is private
  100. Private bool `json:"private"`
  101. // Label-Set to use
  102. IssueLabels string `json:"issue_labels"`
  103. // Whether the repository should be auto-intialized?
  104. AutoInit bool `json:"auto_init"`
  105. // Whether the repository is template
  106. Template bool `json:"template"`
  107. // Gitignores to use
  108. Gitignores string `json:"gitignores"`
  109. // License to use
  110. License string `json:"license"`
  111. // Readme of the repository to create
  112. Readme string `json:"readme"`
  113. // DefaultBranch of the repository (used when initializes and in template)
  114. DefaultBranch string `json:"default_branch" binding:"GitRefName;MaxSize(100)"`
  115. // TrustModel of the repository
  116. // enum: default,collaborator,committer,collaboratorcommitter
  117. TrustModel string `json:"trust_model"`
  118. }
  119. // EditRepoOption options when editing a repository's properties
  120. // swagger:model
  121. type EditRepoOption struct {
  122. // name of the repository
  123. // unique: true
  124. Name *string `json:"name,omitempty" binding:"OmitEmpty;AlphaDashDot;MaxSize(100);"`
  125. // a short description of the repository.
  126. Description *string `json:"description,omitempty" binding:"MaxSize(255)"`
  127. // a URL with more information about the repository.
  128. Website *string `json:"website,omitempty" binding:"MaxSize(255)"`
  129. // either `true` to make the repository private or `false` to make it public.
  130. // Note: you will get a 422 error if the organization restricts changing repository visibility to organization
  131. // owners and a non-owner tries to change the value of private.
  132. Private *bool `json:"private,omitempty"`
  133. // either `true` to make this repository a template or `false` to make it a normal repository
  134. Template *bool `json:"template,omitempty"`
  135. // either `true` to enable issues for this repository or `false` to disable them.
  136. HasIssues *bool `json:"has_issues,omitempty"`
  137. // set this structure to configure internal issue tracker (requires has_issues)
  138. InternalTracker *InternalTracker `json:"internal_tracker,omitempty"`
  139. // set this structure to use external issue tracker (requires has_issues)
  140. ExternalTracker *ExternalTracker `json:"external_tracker,omitempty"`
  141. // either `true` to enable the wiki for this repository or `false` to disable it.
  142. HasWiki *bool `json:"has_wiki,omitempty"`
  143. // set this structure to use external wiki instead of internal (requires has_wiki)
  144. ExternalWiki *ExternalWiki `json:"external_wiki,omitempty"`
  145. // sets the default branch for this repository.
  146. DefaultBranch *string `json:"default_branch,omitempty"`
  147. // either `true` to allow pull requests, or `false` to prevent pull request.
  148. HasPullRequests *bool `json:"has_pull_requests,omitempty"`
  149. // either `true` to enable project unit, or `false` to disable them.
  150. HasProjects *bool `json:"has_projects,omitempty"`
  151. // either `true` to ignore whitespace for conflicts, or `false` to not ignore whitespace. `has_pull_requests` must be `true`.
  152. IgnoreWhitespaceConflicts *bool `json:"ignore_whitespace_conflicts,omitempty"`
  153. // 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`.
  154. AllowMerge *bool `json:"allow_merge_commits,omitempty"`
  155. // either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging. `has_pull_requests` must be `true`.
  156. AllowRebase *bool `json:"allow_rebase,omitempty"`
  157. // 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`.
  158. AllowRebaseMerge *bool `json:"allow_rebase_explicit,omitempty"`
  159. // either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging. `has_pull_requests` must be `true`.
  160. AllowSquash *bool `json:"allow_squash_merge,omitempty"`
  161. // either `true` to allow mark pr as merged manually, or `false` to prevent it. `has_pull_requests` must be `true`.
  162. AllowManualMerge *bool `json:"allow_manual_merge,omitempty"`
  163. // either `true` to enable AutodetectManualMerge, or `false` to prevent it. `has_pull_requests` must be `true`, Note: In some special cases, misjudgments can occur.
  164. AutodetectManualMerge *bool `json:"autodetect_manual_merge,omitempty"`
  165. // set to `true` to archive this repository.
  166. Archived *bool `json:"archived,omitempty"`
  167. // set to a string like `8h30m0s` to set the mirror interval time
  168. MirrorInterval *string `json:"mirror_interval,omitempty"`
  169. }
  170. // CreateBranchRepoOption options when creating a branch in a repository
  171. // swagger:model
  172. type CreateBranchRepoOption struct {
  173. // Name of the branch to create
  174. //
  175. // required: true
  176. // unique: true
  177. BranchName string `json:"new_branch_name" binding:"Required;GitRefName;MaxSize(100)"`
  178. // Name of the old branch to create from
  179. //
  180. // unique: true
  181. OldBranchName string `json:"old_branch_name" binding:"GitRefName;MaxSize(100)"`
  182. }
  183. // TransferRepoOption options when transfer a repository's ownership
  184. // swagger:model
  185. type TransferRepoOption struct {
  186. // required: true
  187. NewOwner string `json:"new_owner"`
  188. // ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.
  189. TeamIDs *[]int64 `json:"team_ids"`
  190. }
  191. // GitServiceType represents a git service
  192. type GitServiceType int
  193. // enumerate all GitServiceType
  194. const (
  195. NotMigrated GitServiceType = iota // 0 not migrated from external sites
  196. PlainGitService // 1 plain git service
  197. GithubService // 2 github.com
  198. GiteaService // 3 gitea service
  199. GitlabService // 4 gitlab service
  200. GogsService // 5 gogs service
  201. )
  202. // Name represents the service type's name
  203. // WARNNING: the name have to be equal to that on goth's library
  204. func (gt GitServiceType) Name() string {
  205. return strings.ToLower(gt.Title())
  206. }
  207. // Title represents the service type's proper title
  208. func (gt GitServiceType) Title() string {
  209. switch gt {
  210. case GithubService:
  211. return "GitHub"
  212. case GiteaService:
  213. return "Gitea"
  214. case GitlabService:
  215. return "GitLab"
  216. case GogsService:
  217. return "Gogs"
  218. case PlainGitService:
  219. return "Git"
  220. }
  221. return ""
  222. }
  223. // MigrateRepoOptions options for migrating repository's
  224. // this is used to interact with api v1
  225. type MigrateRepoOptions struct {
  226. // required: true
  227. CloneAddr string `json:"clone_addr" binding:"Required"`
  228. // deprecated (only for backwards compatibility)
  229. RepoOwnerID int64 `json:"uid"`
  230. // Name of User or Organisation who will own Repo after migration
  231. RepoOwner string `json:"repo_owner"`
  232. // required: true
  233. RepoName string `json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)"`
  234. // enum: git,github,gitea,gitlab
  235. Service string `json:"service"`
  236. AuthUsername string `json:"auth_username"`
  237. AuthPassword string `json:"auth_password"`
  238. AuthToken string `json:"auth_token"`
  239. Mirror bool `json:"mirror"`
  240. Private bool `json:"private"`
  241. Description string `json:"description" binding:"MaxSize(255)"`
  242. Wiki bool `json:"wiki"`
  243. Milestones bool `json:"milestones"`
  244. Labels bool `json:"labels"`
  245. Issues bool `json:"issues"`
  246. PullRequests bool `json:"pull_requests"`
  247. Releases bool `json:"releases"`
  248. MirrorInterval string `json:"mirror_interval"`
  249. }
  250. // TokenAuth represents whether a service type supports token-based auth
  251. func (gt GitServiceType) TokenAuth() bool {
  252. switch gt {
  253. case GithubService, GiteaService, GitlabService:
  254. return true
  255. }
  256. return false
  257. }
  258. var (
  259. // SupportedFullGitService represents all git services supported to migrate issues/labels/prs and etc.
  260. // TODO: add to this list after new git service added
  261. SupportedFullGitService = []GitServiceType{
  262. GithubService,
  263. GitlabService,
  264. GiteaService,
  265. GogsService,
  266. }
  267. )