2014-11-14 22:07:41 +00:00
// 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.
2015-08-26 14:34:27 +01:00
package gitea
2014-11-14 22:07:41 +00:00
2014-12-13 01:29:51 +00:00
import (
"bytes"
"encoding/json"
"fmt"
2016-07-11 22:02:42 +01:00
"time"
2014-12-13 01:29:51 +00:00
)
2017-11-12 09:10:33 +00:00
// Permission represents a set of permissions
2014-11-14 22:07:41 +00:00
type Permission struct {
Admin bool ` json:"admin" `
Push bool ` json:"push" `
Pull bool ` json:"pull" `
}
2017-11-12 09:10:33 +00:00
// Repository represents a repository
2014-11-14 22:07:41 +00:00
type Repository struct {
2016-08-14 11:32:53 +01:00
ID int64 ` json:"id" `
Owner * User ` json:"owner" `
Name string ` json:"name" `
FullName string ` json:"full_name" `
Description string ` json:"description" `
2017-05-04 14:38:15 +01:00
Empty bool ` json:"empty" `
2016-08-14 11:32:53 +01:00
Private bool ` json:"private" `
Fork bool ` json:"fork" `
2017-05-06 02:37:21 +01:00
Parent * Repository ` json:"parent" `
2017-02-18 16:09:11 +00:00
Mirror bool ` json:"mirror" `
2017-05-04 14:38:15 +01:00
Size int ` json:"size" `
2016-08-14 11:32:53 +01:00
HTMLURL string ` json:"html_url" `
SSHURL string ` json:"ssh_url" `
CloneURL string ` json:"clone_url" `
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" `
DefaultBranch string ` json:"default_branch" `
2018-10-05 21:59:49 +01:00
Archived bool ` json:"archived" `
2017-11-12 09:10:33 +00:00
// swagger:strfmt date-time
2018-01-09 00:26:05 +00:00
Created time . Time ` json:"created_at" `
2017-11-12 09:10:33 +00:00
// swagger:strfmt date-time
2018-01-09 00:26:05 +00:00
Updated time . Time ` json:"updated_at" `
Permissions * Permission ` json:"permissions,omitempty" `
2014-11-14 22:07:41 +00:00
}
// ListMyRepos lists all repositories for the authenticated user that has access to.
func ( c * Client ) ListMyRepos ( ) ( [ ] * Repository , error ) {
repos := make ( [ ] * Repository , 0 , 10 )
2015-12-17 07:15:29 +00:00
return repos , c . getParsedResponse ( "GET" , "/user/repos" , nil , nil , & repos )
2014-11-14 22:07:41 +00:00
}
2014-12-13 01:29:51 +00:00
2016-11-10 09:44:00 +00:00
// ListUserRepos list all repositories of one user by user's name
2016-08-28 13:35:23 +01:00
func ( c * Client ) ListUserRepos ( user string ) ( [ ] * Repository , error ) {
repos := make ( [ ] * Repository , 0 , 10 )
return repos , c . getParsedResponse ( "GET" , fmt . Sprintf ( "/users/%s/repos" , user ) , nil , nil , & repos )
}
2016-11-10 09:44:00 +00:00
// ListOrgRepos list all repositories of one organization by organization's name
2016-08-28 13:35:23 +01:00
func ( c * Client ) ListOrgRepos ( org string ) ( [ ] * Repository , error ) {
repos := make ( [ ] * Repository , 0 , 10 )
return repos , c . getParsedResponse ( "GET" , fmt . Sprintf ( "/orgs/%s/repos" , org ) , nil , nil , & repos )
2014-11-14 22:07:41 +00:00
}
2014-12-13 01:29:51 +00:00
2016-11-10 09:44:00 +00:00
// CreateRepoOption options when creating repository
2017-11-12 09:10:33 +00:00
// swagger:model
2014-12-13 01:29:51 +00:00
type CreateRepoOption struct {
2017-04-30 16:33:16 +01:00
// Name of the repository to create
//
2017-11-12 09:10:33 +00:00
// required: true
2017-04-30 16:33:16 +01:00
// unique: true
Name string ` json:"name" binding:"Required;AlphaDashDot;MaxSize(100)" `
// Description of the repository to create
2014-12-13 01:29:51 +00:00
Description string ` json:"description" binding:"MaxSize(255)" `
2017-11-12 09:10:33 +00:00
// Whether the repository is private
2017-04-30 16:33:16 +01:00
Private bool ` json:"private" `
2017-11-12 09:10:33 +00:00
// Whether the repository should be auto-intialized?
2017-04-30 16:33:16 +01:00
AutoInit bool ` json:"auto_init" `
// Gitignores to use
Gitignores string ` json:"gitignores" `
// License to use
License string ` json:"license" `
// Readme of the repository to create
Readme string ` json:"readme" `
2014-12-13 01:29:51 +00:00
}
// CreateRepo creates a repository for authenticated user.
func ( c * Client ) CreateRepo ( opt CreateRepoOption ) ( * Repository , error ) {
body , err := json . Marshal ( & opt )
if err != nil {
return nil , err
}
repo := new ( Repository )
2016-07-17 01:46:54 +01:00
return repo , c . getParsedResponse ( "POST" , "/user/repos" , jsonHeader , bytes . NewReader ( body ) , repo )
2014-12-13 01:29:51 +00:00
}
// CreateOrgRepo creates an organization repository for authenticated user.
func ( c * Client ) CreateOrgRepo ( org string , opt CreateRepoOption ) ( * Repository , error ) {
body , err := json . Marshal ( & opt )
if err != nil {
return nil , err
}
repo := new ( Repository )
2016-07-17 01:46:54 +01:00
return repo , c . getParsedResponse ( "POST" , fmt . Sprintf ( "/org/%s/repos" , org ) , jsonHeader , bytes . NewReader ( body ) , repo )
2014-12-13 01:29:51 +00:00
}
2015-10-09 02:00:46 +01:00
2015-10-22 22:42:42 +01:00
// GetRepo returns information of a repository of given owner.
func ( c * Client ) GetRepo ( owner , reponame string ) ( * Repository , error ) {
repo := new ( Repository )
2015-12-17 07:15:29 +00:00
return repo , c . getParsedResponse ( "GET" , fmt . Sprintf ( "/repos/%s/%s" , owner , reponame ) , nil , nil , repo )
2015-10-22 22:42:42 +01:00
}
2019-05-10 23:30:00 +01:00
// EditRepoOption options when editing a repository's properties
// swagger:model
type EditRepoOption struct {
// Name of the repository
//
// required: true
// unique: true
Name * string ` json:"name" binding:"Required;AlphaDashDot;MaxSize(100)" `
// A short description of the repository.
Description * string ` json:"description,omitempty" binding:"MaxSize(255)" `
// A URL with more information about the repository.
Website * string ` json:"website,omitempty" binding:"MaxSize(255)" `
// 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
// owners and a non-owner tries to change the value of private.
Private * bool ` json:"private,omitempty" `
// Either `true` to enable issues for this repository or `false` to disable them.
EnableIssues * bool ` json:"enable_issues,omitempty" `
// Either `true` to enable the wiki for this repository or `false` to disable it.
EnableWiki * bool ` json:"enable_wiki,omitempty" `
// Updates the default branch for this repository.
DefaultBranch * string ` json:"default_branch,omitempty" `
// Either `true` to allow pull requests, or `false` to prevent pull request.
EnablePullRequests * bool ` json:"enable_pull_requests,omitempty" `
// Either `true` to ignore whitepace for conflicts, or `false` to not ignore whitespace. `enabled_pull_requests` must be `true`.
IgnoreWhitespaceConflicts * bool ` json:"ignore_whitespace,omitempty" `
// Either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits. `enabled_pull_requests` must be `true`.
AllowMerge * bool ` json:"allow_merge_commits,omitempty" `
// Either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging. `enabled_pull_requests` must be `true`.
AllowRebase * bool ` json:"allow_rebase,omitempty" `
// Either `true` to allow rebase with explicit merge commits (--no-ff), or `false` to prevent rebase with explicit merge commits. `enabled_pull_requests` must be `true`.
AllowRebaseMerge * bool ` json:"allow_rebase_explicit,omitempty" `
// Either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging. `enabled_pull_requests` must be `true`.
AllowSquashMerge * bool ` json:"allow_squash_merge,omitempty" `
// `true` to archive this repository. Note: You cannot unarchive repositories through the API.
Archived * bool ` json:"archived,omitempty" `
}
// EditRepo edit the properties of a repository
func ( c * Client ) EditRepo ( owner , reponame string , opt EditRepoOption ) ( * Repository , error ) {
body , err := json . Marshal ( & opt )
if err != nil {
return nil , err
}
repo := new ( Repository )
return repo , c . getParsedResponse ( "PATCH" , fmt . Sprintf ( "/repos/%s/%s" , owner , reponame ) , jsonHeader , bytes . NewReader ( body ) , repo )
}
2015-10-09 02:00:46 +01:00
// DeleteRepo deletes a repository of user or organization.
func ( c * Client ) DeleteRepo ( owner , repo string ) error {
2015-10-09 03:34:54 +01:00
_ , err := c . getResponse ( "DELETE" , fmt . Sprintf ( "/repos/%s/%s" , owner , repo ) , nil , nil )
return err
2015-10-09 02:00:46 +01:00
}
2015-10-28 16:04:48 +00:00
2017-11-12 09:10:33 +00:00
// MigrateRepoOption options for migrating a repository from an external service
2015-10-28 16:04:48 +00:00
type MigrateRepoOption struct {
2017-11-12 09:10:33 +00:00
// required: true
2018-01-09 00:26:05 +00:00
CloneAddr string ` json:"clone_addr" binding:"Required" `
2015-10-28 16:04:48 +00:00
AuthUsername string ` json:"auth_username" `
AuthPassword string ` json:"auth_password" `
2017-11-12 09:10:33 +00:00
// required: true
2017-08-21 09:23:17 +01:00
UID int ` json:"uid" binding:"Required" `
2017-11-12 09:10:33 +00:00
// required: true
2018-01-09 00:26:05 +00:00
RepoName string ` json:"repo_name" binding:"Required" `
Mirror bool ` json:"mirror" `
Private bool ` json:"private" `
2017-08-21 09:23:17 +01:00
Description string ` json:"description" `
2015-10-28 16:04:48 +00:00
}
// MigrateRepo migrates a repository from other Git hosting sources for the
// authenticated user.
//
// To migrate a repository for a organization, the authenticated user must be a
// owner of the specified organization.
func ( c * Client ) MigrateRepo ( opt MigrateRepoOption ) ( * Repository , error ) {
body , err := json . Marshal ( & opt )
if err != nil {
return nil , err
}
repo := new ( Repository )
2016-07-17 01:46:54 +01:00
return repo , c . getParsedResponse ( "POST" , "/repos/migrate" , jsonHeader , bytes . NewReader ( body ) , repo )
2014-12-13 01:29:51 +00:00
}
2017-05-02 16:01:11 +01:00
// MirrorSync adds a mirrored repository to the mirror sync queue.
func ( c * Client ) MirrorSync ( owner , repo string ) error {
_ , err := c . getResponse ( "POST" , fmt . Sprintf ( "/repos/%s/%s/mirror-sync" , owner , repo ) , nil , nil )
return err
}