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 10 kB

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
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
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
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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. "time"
  7. )
  8. // Permission represents a set of permissions
  9. type Permission struct {
  10. Admin bool `json:"admin"`
  11. Push bool `json:"push"`
  12. Pull bool `json:"pull"`
  13. }
  14. // InternalTracker represents settings for internal tracker
  15. // swagger:model
  16. type InternalTracker struct {
  17. // Enable time tracking (Built-in issue tracker)
  18. EnableTimeTracker bool `json:"enable_time_tracker"`
  19. // Let only contributors track time (Built-in issue tracker)
  20. AllowOnlyContributorsToTrackTime bool `json:"allow_only_contributors_to_track_time"`
  21. // Enable dependencies for issues and pull requests (Built-in issue tracker)
  22. EnableIssueDependencies bool `json:"enable_issue_dependencies"`
  23. }
  24. // ExternalTracker represents settings for external tracker
  25. // swagger:model
  26. type ExternalTracker struct {
  27. // URL of external issue tracker.
  28. ExternalTrackerURL string `json:"external_tracker_url"`
  29. // External Issue Tracker URL Format. Use the placeholders {user}, {repo} and {index} for the username, repository name and issue index.
  30. ExternalTrackerFormat string `json:"external_tracker_format"`
  31. // External Issue Tracker Number Format, either `numeric` or `alphanumeric`
  32. ExternalTrackerStyle string `json:"external_tracker_style"`
  33. }
  34. // ExternalWiki represents setting for external wiki
  35. // swagger:model
  36. type ExternalWiki struct {
  37. // URL of external wiki.
  38. ExternalWikiURL string `json:"external_wiki_url"`
  39. }
  40. // Repository represents a repository
  41. type Repository struct {
  42. ID int64 `json:"id"`
  43. Owner *User `json:"owner"`
  44. Name string `json:"name"`
  45. Alias string `json:"alias"`
  46. FullName string `json:"full_name"`
  47. FullDisplayName string `json:"full_display_name"`
  48. Description string `json:"description"`
  49. Empty bool `json:"empty"`
  50. Private bool `json:"private"`
  51. Fork bool `json:"fork"`
  52. Template bool `json:"template"`
  53. Parent *Repository `json:"parent"`
  54. Mirror bool `json:"mirror"`
  55. Size int `json:"size"`
  56. HTMLURL string `json:"html_url"`
  57. SSHURL string `json:"ssh_url"`
  58. CloneURL string `json:"clone_url"`
  59. OriginalURL string `json:"original_url"`
  60. Website string `json:"website"`
  61. Stars int `json:"stars_count"`
  62. Forks int `json:"forks_count"`
  63. Watchers int `json:"watchers_count"`
  64. OpenIssues int `json:"open_issues_count"`
  65. OpenPulls int `json:"open_pr_counter"`
  66. Releases int `json:"release_counter"`
  67. DefaultBranch string `json:"default_branch"`
  68. Archived bool `json:"archived"`
  69. // swagger:strfmt date-time
  70. Created time.Time `json:"created_at"`
  71. // swagger:strfmt date-time
  72. Updated time.Time `json:"updated_at"`
  73. Permissions *Permission `json:"permissions,omitempty"`
  74. HasIssues bool `json:"has_issues"`
  75. InternalTracker *InternalTracker `json:"internal_tracker,omitempty"`
  76. ExternalTracker *ExternalTracker `json:"external_tracker,omitempty"`
  77. HasWiki bool `json:"has_wiki"`
  78. ExternalWiki *ExternalWiki `json:"external_wiki,omitempty"`
  79. HasPullRequests bool `json:"has_pull_requests"`
  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. Status int `json:"status"`
  87. }
  88. // CreateRepoOption options when creating repository
  89. // swagger:model
  90. type CreateRepoOption struct {
  91. // Name of the repository to create
  92. //
  93. // required: true
  94. // unique: true
  95. Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(100)"`
  96. // Alias of the repository to create
  97. // required: false
  98. // unique: true
  99. Alias string `json:"alias" binding:"AlphaDashDotChinese;MaxSize(100)"`
  100. // Description of the repository to create
  101. Description string `json:"description" binding:"MaxSize(255)"`
  102. // Whether the repository is private
  103. Private bool `json:"private"`
  104. // Issue Label set to use
  105. IssueLabels string `json:"issue_labels"`
  106. // Whether the repository should be auto-intialized?
  107. AutoInit bool `json:"auto_init"`
  108. // Gitignores to use
  109. Gitignores string `json:"gitignores"`
  110. // License to use
  111. License string `json:"license"`
  112. // Readme of the repository to create
  113. Readme string `json:"readme"`
  114. // DefaultBranch of the repository (used when initializes and in template)
  115. DefaultBranch string `json:"default_branch" binding:"GitRefName;MaxSize(100)"`
  116. }
  117. // EditRepoOption options when editing a repository's properties
  118. // swagger:model
  119. type EditRepoOption struct {
  120. // name of the repository
  121. // unique: true
  122. Name *string `json:"name,omitempty" binding:"OmitEmpty;AlphaDashDot;MaxSize(100);"`
  123. // a short description of the repository.
  124. Description *string `json:"description,omitempty" binding:"MaxSize(255)"`
  125. // a URL with more information about the repository.
  126. Website *string `json:"website,omitempty" binding:"MaxSize(255)"`
  127. // either `true` to make the repository private or `false` to make it public.
  128. // Note: you will get a 422 error if the organization restricts changing repository visibility to organization
  129. // owners and a non-owner tries to change the value of private.
  130. Private *bool `json:"private,omitempty"`
  131. // either `true` to make this repository a template or `false` to make it a normal repository
  132. Template *bool `json:"template,omitempty"`
  133. // either `true` to enable issues for this repository or `false` to disable them.
  134. HasIssues *bool `json:"has_issues,omitempty"`
  135. // set this structure to configure internal issue tracker (requires has_issues)
  136. InternalTracker *InternalTracker `json:"internal_tracker,omitempty"`
  137. // set this structure to use external issue tracker (requires has_issues)
  138. ExternalTracker *ExternalTracker `json:"external_tracker,omitempty"`
  139. // either `true` to enable the wiki for this repository or `false` to disable it.
  140. HasWiki *bool `json:"has_wiki,omitempty"`
  141. // set this structure to use external wiki instead of internal (requires has_wiki)
  142. ExternalWiki *ExternalWiki `json:"external_wiki,omitempty"`
  143. // sets the default branch for this repository.
  144. DefaultBranch *string `json:"default_branch,omitempty"`
  145. // either `true` to allow pull requests, or `false` to prevent pull request.
  146. HasPullRequests *bool `json:"has_pull_requests,omitempty"`
  147. // either `true` to ignore whitespace for conflicts, or `false` to not ignore whitespace. `has_pull_requests` must be `true`.
  148. IgnoreWhitespaceConflicts *bool `json:"ignore_whitespace_conflicts,omitempty"`
  149. // 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`.
  150. AllowMerge *bool `json:"allow_merge_commits,omitempty"`
  151. // either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging. `has_pull_requests` must be `true`.
  152. AllowRebase *bool `json:"allow_rebase,omitempty"`
  153. // 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`.
  154. AllowRebaseMerge *bool `json:"allow_rebase_explicit,omitempty"`
  155. // either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging. `has_pull_requests` must be `true`.
  156. AllowSquash *bool `json:"allow_squash_merge,omitempty"`
  157. // set to `true` to archive this repository.
  158. Archived *bool `json:"archived,omitempty"`
  159. }
  160. // TransferRepoOption options when transfer a repository's ownership
  161. // swagger:model
  162. type TransferRepoOption struct {
  163. // required: true
  164. NewOwner string `json:"new_owner"`
  165. // ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.
  166. TeamIDs *[]int64 `json:"team_ids"`
  167. }
  168. // GitServiceType represents a git service
  169. type GitServiceType int
  170. // enumerate all GitServiceType
  171. const (
  172. NotMigrated GitServiceType = iota // 0 not migrated from external sites
  173. PlainGitService // 1 plain git service
  174. GithubService // 2 github.com
  175. GiteaService // 3 gitea service
  176. GitlabService // 4 gitlab service
  177. GogsService // 5 gogs service
  178. )
  179. // Name represents the service type's name
  180. // WARNNING: the name have to be equal to that on goth's library
  181. func (gt GitServiceType) Name() string {
  182. switch gt {
  183. case GithubService:
  184. return "github"
  185. case GiteaService:
  186. return "gitea"
  187. case GitlabService:
  188. return "gitlab"
  189. case GogsService:
  190. return "gogs"
  191. }
  192. return ""
  193. }
  194. var (
  195. // SupportedFullGitService represents all git services supported to migrate issues/labels/prs and etc.
  196. // TODO: add to this list after new git service added
  197. SupportedFullGitService = []GitServiceType{
  198. GithubService,
  199. GitlabService,
  200. }
  201. )
  202. // MigrateRepoOption options for migrating a repository from an external service
  203. type MigrateRepoOption struct {
  204. // required: true
  205. CloneAddr string `json:"clone_addr" binding:"Required"`
  206. AuthUsername string `json:"auth_username"`
  207. AuthPassword string `json:"auth_password"`
  208. // required: true
  209. UID int `json:"uid" binding:"Required"`
  210. // required: true
  211. RepoName string `json:"repo_name" binding:"Required"`
  212. Alias string `json:"alias" binding:"Required"`
  213. Mirror bool `json:"mirror"`
  214. Private bool `json:"private"`
  215. Description string `json:"description"`
  216. OriginalURL string
  217. GitServiceType GitServiceType
  218. Wiki bool
  219. Issues bool
  220. Milestones bool
  221. Labels bool
  222. Releases bool
  223. Comments bool
  224. PullRequests bool
  225. MigrateToRepoID int64
  226. PaperUrl string
  227. }