parent
9a938dc298
commit
51578d6418
5 changed files with 48 additions and 17 deletions
|
@ -5,9 +5,12 @@
|
||||||
package convert
|
package convert
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models"
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
api "code.gitea.io/gitea/modules/structs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -25,6 +28,9 @@ func ToAPIIssue(issue *models.Issue) *api.Issue {
|
||||||
if err := issue.LoadRepo(); err != nil {
|
if err := issue.LoadRepo(); err != nil {
|
||||||
return &api.Issue{}
|
return &api.Issue{}
|
||||||
}
|
}
|
||||||
|
if err := issue.Repo.GetOwner(); err != nil {
|
||||||
|
return &api.Issue{}
|
||||||
|
}
|
||||||
|
|
||||||
apiIssue := &api.Issue{
|
apiIssue := &api.Issue{
|
||||||
ID: issue.ID,
|
ID: issue.ID,
|
||||||
|
@ -35,7 +41,7 @@ func ToAPIIssue(issue *models.Issue) *api.Issue {
|
||||||
Title: issue.Title,
|
Title: issue.Title,
|
||||||
Body: issue.Content,
|
Body: issue.Content,
|
||||||
Ref: issue.Ref,
|
Ref: issue.Ref,
|
||||||
Labels: ToLabelList(issue.Labels),
|
Labels: ToLabelList(issue.Labels, issue.Repo, issue.Repo.Owner),
|
||||||
State: issue.State(),
|
State: issue.State(),
|
||||||
IsLocked: issue.IsLocked,
|
IsLocked: issue.IsLocked,
|
||||||
Comments: issue.NumComments,
|
Comments: issue.NumComments,
|
||||||
|
@ -168,20 +174,37 @@ func ToTrackedTimeList(tl models.TrackedTimeList) api.TrackedTimeList {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToLabel converts Label to API format
|
// ToLabel converts Label to API format
|
||||||
func ToLabel(label *models.Label) *api.Label {
|
func ToLabel(label *models.Label, repo *models.Repository, org *models.User) *api.Label {
|
||||||
return &api.Label{
|
result := &api.Label{
|
||||||
ID: label.ID,
|
ID: label.ID,
|
||||||
Name: label.Name,
|
Name: label.Name,
|
||||||
Color: strings.TrimLeft(label.Color, "#"),
|
Color: strings.TrimLeft(label.Color, "#"),
|
||||||
Description: label.Description,
|
Description: label.Description,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// calculate URL
|
||||||
|
if label.BelongsToRepo() && repo != nil {
|
||||||
|
if repo != nil {
|
||||||
|
result.URL = fmt.Sprintf("%s/labels/%d", repo.APIURL(), label.ID)
|
||||||
|
} else {
|
||||||
|
log.Error("ToLabel did not get repo to calculate url for label with id '%d'", label.ID)
|
||||||
|
}
|
||||||
|
} else { // BelongsToOrg
|
||||||
|
if org != nil {
|
||||||
|
result.URL = fmt.Sprintf("%sapi/v1/orgs/%s/labels/%d", setting.AppURL, org.Name, label.ID)
|
||||||
|
} else {
|
||||||
|
log.Error("ToLabel did not get org to calculate url for label with id '%d'", label.ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToLabelList converts list of Label to API format
|
// ToLabelList converts list of Label to API format
|
||||||
func ToLabelList(labels []*models.Label) []*api.Label {
|
func ToLabelList(labels []*models.Label, repo *models.Repository, org *models.User) []*api.Label {
|
||||||
result := make([]*api.Label, len(labels))
|
result := make([]*api.Label, len(labels))
|
||||||
for i := range labels {
|
for i := range labels {
|
||||||
result[i] = ToLabel(labels[i])
|
result[i] = ToLabel(labels[i], repo, org)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,10 +5,12 @@
|
||||||
package convert
|
package convert
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models"
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
api "code.gitea.io/gitea/modules/structs"
|
||||||
"code.gitea.io/gitea/modules/timeutil"
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
|
|
||||||
|
@ -18,11 +20,13 @@ import (
|
||||||
func TestLabel_ToLabel(t *testing.T) {
|
func TestLabel_ToLabel(t *testing.T) {
|
||||||
assert.NoError(t, models.PrepareTestDatabase())
|
assert.NoError(t, models.PrepareTestDatabase())
|
||||||
label := models.AssertExistsAndLoadBean(t, &models.Label{ID: 1}).(*models.Label)
|
label := models.AssertExistsAndLoadBean(t, &models.Label{ID: 1}).(*models.Label)
|
||||||
|
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: label.RepoID}).(*models.Repository)
|
||||||
assert.Equal(t, &api.Label{
|
assert.Equal(t, &api.Label{
|
||||||
ID: label.ID,
|
ID: label.ID,
|
||||||
Name: label.Name,
|
Name: label.Name,
|
||||||
Color: "abcdef",
|
Color: "abcdef",
|
||||||
}, ToLabel(label))
|
URL: fmt.Sprintf("%sapi/v1/repos/user2/repo1/labels/%d", setting.AppURL, label.ID),
|
||||||
|
}, ToLabel(label, repo, nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMilestone_APIFormat(t *testing.T) {
|
func TestMilestone_APIFormat(t *testing.T) {
|
||||||
|
|
|
@ -56,7 +56,7 @@ func ListLabels(ctx *context.APIContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.SetTotalCountHeader(count)
|
ctx.SetTotalCountHeader(count)
|
||||||
ctx.JSON(http.StatusOK, convert.ToLabelList(labels))
|
ctx.JSON(http.StatusOK, convert.ToLabelList(labels, nil, ctx.Org.Organization))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateLabel create a label for a repository
|
// CreateLabel create a label for a repository
|
||||||
|
@ -103,7 +103,8 @@ func CreateLabel(ctx *context.APIContext) {
|
||||||
ctx.Error(http.StatusInternalServerError, "NewLabel", err)
|
ctx.Error(http.StatusInternalServerError, "NewLabel", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.JSON(http.StatusCreated, convert.ToLabel(label))
|
|
||||||
|
ctx.JSON(http.StatusCreated, convert.ToLabel(label, nil, ctx.Org.Organization))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLabel get label by organization and label id
|
// GetLabel get label by organization and label id
|
||||||
|
@ -148,7 +149,7 @@ func GetLabel(ctx *context.APIContext) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.JSON(http.StatusOK, convert.ToLabel(label))
|
ctx.JSON(http.StatusOK, convert.ToLabel(label, nil, ctx.Org.Organization))
|
||||||
}
|
}
|
||||||
|
|
||||||
// EditLabel modify a label for an Organization
|
// EditLabel modify a label for an Organization
|
||||||
|
@ -212,7 +213,8 @@ func EditLabel(ctx *context.APIContext) {
|
||||||
ctx.Error(http.StatusInternalServerError, "UpdateLabel", err)
|
ctx.Error(http.StatusInternalServerError, "UpdateLabel", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.JSON(http.StatusOK, convert.ToLabel(label))
|
|
||||||
|
ctx.JSON(http.StatusOK, convert.ToLabel(label, nil, ctx.Org.Organization))
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteLabel delete a label for an organization
|
// DeleteLabel delete a label for an organization
|
||||||
|
|
|
@ -61,7 +61,7 @@ func ListIssueLabels(ctx *context.APIContext) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.JSON(http.StatusOK, convert.ToLabelList(issue.Labels))
|
ctx.JSON(http.StatusOK, convert.ToLabelList(issue.Labels, ctx.Repo.Repository, ctx.Repo.Owner))
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddIssueLabels add labels for an issue
|
// AddIssueLabels add labels for an issue
|
||||||
|
@ -117,7 +117,7 @@ func AddIssueLabels(ctx *context.APIContext) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.JSON(http.StatusOK, convert.ToLabelList(labels))
|
ctx.JSON(http.StatusOK, convert.ToLabelList(labels, ctx.Repo.Repository, ctx.Repo.Owner))
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteIssueLabel delete a label for an issue
|
// DeleteIssueLabel delete a label for an issue
|
||||||
|
@ -243,7 +243,7 @@ func ReplaceIssueLabels(ctx *context.APIContext) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.JSON(http.StatusOK, convert.ToLabelList(labels))
|
ctx.JSON(http.StatusOK, convert.ToLabelList(labels, ctx.Repo.Repository, ctx.Repo.Owner))
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClearIssueLabels delete all the labels for an issue
|
// ClearIssueLabels delete all the labels for an issue
|
||||||
|
|
|
@ -62,7 +62,7 @@ func ListLabels(ctx *context.APIContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.SetTotalCountHeader(count)
|
ctx.SetTotalCountHeader(count)
|
||||||
ctx.JSON(http.StatusOK, convert.ToLabelList(labels))
|
ctx.JSON(http.StatusOK, convert.ToLabelList(labels, ctx.Repo.Repository, nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLabel get label by repository and label id
|
// GetLabel get label by repository and label id
|
||||||
|
@ -112,7 +112,7 @@ func GetLabel(ctx *context.APIContext) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.JSON(http.StatusOK, convert.ToLabel(label))
|
ctx.JSON(http.StatusOK, convert.ToLabel(label, ctx.Repo.Repository, nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateLabel create a label for a repository
|
// CreateLabel create a label for a repository
|
||||||
|
@ -165,7 +165,8 @@ func CreateLabel(ctx *context.APIContext) {
|
||||||
ctx.Error(http.StatusInternalServerError, "NewLabel", err)
|
ctx.Error(http.StatusInternalServerError, "NewLabel", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.JSON(http.StatusCreated, convert.ToLabel(label))
|
|
||||||
|
ctx.JSON(http.StatusCreated, convert.ToLabel(label, ctx.Repo.Repository, nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
// EditLabel modify a label for a repository
|
// EditLabel modify a label for a repository
|
||||||
|
@ -235,7 +236,8 @@ func EditLabel(ctx *context.APIContext) {
|
||||||
ctx.Error(http.StatusInternalServerError, "UpdateLabel", err)
|
ctx.Error(http.StatusInternalServerError, "UpdateLabel", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.JSON(http.StatusOK, convert.ToLabel(label))
|
|
||||||
|
ctx.JSON(http.StatusOK, convert.ToLabel(label, ctx.Repo.Repository, nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteLabel delete a label for a repository
|
// DeleteLabel delete a label for a repository
|
||||||
|
|
Reference in a new issue