GitHub API Compliance Fixestags/v1.2.0-rc1
@@ -67,7 +67,7 @@ func (label *Label) APIFormat() *api.Label { | |||||
return &api.Label{ | return &api.Label{ | ||||
ID: label.ID, | ID: label.ID, | ||||
Name: label.Name, | Name: label.Name, | ||||
Color: label.Color, | |||||
Color: strings.TrimLeft(label.Color, "#"), | |||||
} | } | ||||
} | } | ||||
@@ -102,6 +102,27 @@ func NewLabels(labels ...*Label) error { | |||||
return err | return err | ||||
} | } | ||||
// getLabelInRepoByName returns a label by Name in given repository. | |||||
// If pass repoID as 0, then ORM will ignore limitation of repository | |||||
// and can return arbitrary label with any valid ID. | |||||
func getLabelInRepoByName(e Engine, repoID int64, labelName string) (*Label, error) { | |||||
if len(labelName) <= 0 { | |||||
return nil, ErrLabelNotExist{0, repoID} | |||||
} | |||||
l := &Label{ | |||||
Name: labelName, | |||||
RepoID: repoID, | |||||
} | |||||
has, err := x.Get(l) | |||||
if err != nil { | |||||
return nil, err | |||||
} else if !has { | |||||
return nil, ErrLabelNotExist{0, l.RepoID} | |||||
} | |||||
return l, nil | |||||
} | |||||
// getLabelInRepoByID returns a label by ID in given repository. | // getLabelInRepoByID returns a label by ID in given repository. | ||||
// If pass repoID as 0, then ORM will ignore limitation of repository | // If pass repoID as 0, then ORM will ignore limitation of repository | ||||
// and can return arbitrary label with any valid ID. | // and can return arbitrary label with any valid ID. | ||||
@@ -128,6 +149,11 @@ func GetLabelByID(id int64) (*Label, error) { | |||||
return getLabelInRepoByID(x, 0, id) | return getLabelInRepoByID(x, 0, id) | ||||
} | } | ||||
// GetLabelInRepoByName returns a label by name in given repository. | |||||
func GetLabelInRepoByName(repoID int64, labelName string) (*Label, error) { | |||||
return getLabelInRepoByName(x, repoID, labelName) | |||||
} | |||||
// GetLabelInRepoByID returns a label by ID in given repository. | // GetLabelInRepoByID returns a label by ID in given repository. | ||||
func GetLabelInRepoByID(repoID, labelID int64) (*Label, error) { | func GetLabelInRepoByID(repoID, labelID int64) (*Label, error) { | ||||
return getLabelInRepoByID(x, repoID, labelID) | return getLabelInRepoByID(x, repoID, labelID) | ||||
@@ -35,6 +35,9 @@ func SignedInID(ctx *macaron.Context, sess session.Store) int64 { | |||||
// Check access token. | // Check access token. | ||||
if IsAPIPath(ctx.Req.URL.Path) { | if IsAPIPath(ctx.Req.URL.Path) { | ||||
tokenSHA := ctx.Query("token") | tokenSHA := ctx.Query("token") | ||||
if len(tokenSHA) <= 0 { | |||||
tokenSHA = ctx.Query("access_token") | |||||
} | |||||
if len(tokenSHA) == 0 { | if len(tokenSHA) == 0 { | ||||
// Well, check with header again. | // Well, check with header again. | ||||
auHead := ctx.Req.Header.Get("Authorization") | auHead := ctx.Req.Header.Get("Authorization") | ||||
@@ -243,6 +243,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
m.Get("/search", repo.Search) | m.Get("/search", repo.Search) | ||||
}) | }) | ||||
m.Combo("/repositories/:id", reqToken()).Get(repo.GetByID) | |||||
m.Group("/repos", func() { | m.Group("/repos", func() { | ||||
m.Post("/migrate", bind(auth.MigrateRepoForm{}), repo.Migrate) | m.Post("/migrate", bind(auth.MigrateRepoForm{}), repo.Migrate) | ||||
m.Combo("/:username/:reponame", context.ExtractOwnerAndRepo()). | m.Combo("/:username/:reponame", context.ExtractOwnerAndRepo()). | ||||
@@ -17,14 +17,26 @@ import ( | |||||
// ListIssues list the issues of a repository | // ListIssues list the issues of a repository | ||||
func ListIssues(ctx *context.APIContext) { | func ListIssues(ctx *context.APIContext) { | ||||
issues, err := models.Issues(&models.IssuesOptions{ | |||||
RepoID: ctx.Repo.Repository.ID, | |||||
Page: ctx.QueryInt("page"), | |||||
}) | |||||
issueOpts := models.IssuesOptions{ | |||||
RepoID: ctx.Repo.Repository.ID, | |||||
Page: ctx.QueryInt("page"), | |||||
IsClosed: ctx.Query("state") == "closed", | |||||
} | |||||
issues, err := models.Issues(&issueOpts) | |||||
if err != nil { | if err != nil { | ||||
ctx.Error(500, "Issues", err) | ctx.Error(500, "Issues", err) | ||||
return | return | ||||
} | } | ||||
if ctx.Query("state") == "all" { | |||||
issueOpts.IsClosed = !issueOpts.IsClosed | |||||
tempIssues, err := models.Issues(&issueOpts) | |||||
if err != nil { | |||||
ctx.Error(500, "Issues", err) | |||||
return | |||||
} | |||||
issues = append(issues, tempIssues...) | |||||
} | |||||
// FIXME: use IssueList to improve performance. | // FIXME: use IssueList to improve performance. | ||||
apiIssues := make([]*api.Issue, len(issues)) | apiIssues := make([]*api.Issue, len(issues)) | ||||
@@ -5,6 +5,8 @@ | |||||
package repo | package repo | ||||
import ( | import ( | ||||
"strconv" | |||||
api "code.gitea.io/sdk/gitea" | api "code.gitea.io/sdk/gitea" | ||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
@@ -28,7 +30,16 @@ func ListLabels(ctx *context.APIContext) { | |||||
// GetLabel get label by repository and label id | // GetLabel get label by repository and label id | ||||
func GetLabel(ctx *context.APIContext) { | func GetLabel(ctx *context.APIContext) { | ||||
label, err := models.GetLabelInRepoByID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | |||||
var ( | |||||
label *models.Label | |||||
err error | |||||
) | |||||
strID := ctx.Params(":id") | |||||
if intID, err2 := strconv.ParseInt(strID, 10, 64); err2 != nil { | |||||
label, err = models.GetLabelInRepoByName(ctx.Repo.Repository.ID, strID) | |||||
} else { | |||||
label, err = models.GetLabelInRepoByID(ctx.Repo.Repository.ID, intID) | |||||
} | |||||
if err != nil { | if err != nil { | ||||
if models.IsErrLabelNotExist(err) { | if models.IsErrLabelNotExist(err) { | ||||
ctx.Status(404) | ctx.Status(404) | ||||
@@ -141,7 +141,7 @@ func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateR | |||||
ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true})) | ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true})) | ||||
} | } | ||||
// Create create one repository of mine | |||||
// Create one repository of mine | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#create | // see https://github.com/gogits/go-gogs-client/wiki/Repositories#create | ||||
func Create(ctx *context.APIContext, opt api.CreateRepoOption) { | func Create(ctx *context.APIContext, opt api.CreateRepoOption) { | ||||
// Shouldn't reach this condition, but just in case. | // Shouldn't reach this condition, but just in case. | ||||
@@ -244,14 +244,29 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) { | |||||
ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true})) | ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true})) | ||||
} | } | ||||
// Get get one repository | |||||
// Get one repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#get | // see https://github.com/gogits/go-gogs-client/wiki/Repositories#get | ||||
func Get(ctx *context.APIContext) { | func Get(ctx *context.APIContext) { | ||||
repo := ctx.Repo.Repository | repo := ctx.Repo.Repository | ||||
ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true})) | ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true})) | ||||
} | } | ||||
// Delete delete one repository | |||||
// GetByID returns a single Repository | |||||
func GetByID(ctx *context.APIContext) { | |||||
repo, err := models.GetRepositoryByID(ctx.ParamsInt64(":id")) | |||||
if err != nil { | |||||
if models.IsErrRepoNotExist(err) { | |||||
ctx.Status(404) | |||||
} else { | |||||
ctx.Error(500, "GetRepositoryByID", err) | |||||
} | |||||
return | |||||
} | |||||
ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true})) | |||||
} | |||||
// Delete one repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#delete | // see https://github.com/gogits/go-gogs-client/wiki/Repositories#delete | ||||
func Delete(ctx *context.APIContext) { | func Delete(ctx *context.APIContext) { | ||||
owner := ctx.Repo.Owner | owner := ctx.Repo.Owner | ||||