mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
5.4 KiB
231 lines
5.4 KiB
// Copyright 2015 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. |
|
|
|
package convert |
|
|
|
import ( |
|
"fmt" |
|
|
|
"github.com/Unknwon/com" |
|
|
|
"github.com/gogits/git-module" |
|
api "github.com/gogits/go-gogs-client" |
|
|
|
"github.com/gogits/gogs/models" |
|
"github.com/gogits/gogs/modules/log" |
|
"github.com/gogits/gogs/modules/setting" |
|
) |
|
|
|
func ToUser(u *models.User) *api.User { |
|
if u == nil { |
|
return nil |
|
} |
|
|
|
return &api.User{ |
|
ID: u.ID, |
|
UserName: u.Name, |
|
FullName: u.FullName, |
|
Email: u.Email, |
|
AvatarUrl: u.AvatarLink(), |
|
} |
|
} |
|
|
|
func ToEmail(email *models.EmailAddress) *api.Email { |
|
return &api.Email{ |
|
Email: email.Email, |
|
Verified: email.IsActivated, |
|
Primary: email.IsPrimary, |
|
} |
|
} |
|
|
|
func ToRepository(owner *models.User, repo *models.Repository, permission api.Permission) *api.Repository { |
|
cl := repo.CloneLink() |
|
return &api.Repository{ |
|
ID: repo.ID, |
|
Owner: ToUser(owner), |
|
FullName: owner.Name + "/" + repo.Name, |
|
Description: repo.Description, |
|
Private: repo.IsPrivate, |
|
Fork: repo.IsFork, |
|
HtmlUrl: setting.AppUrl + owner.Name + "/" + repo.Name, |
|
CloneUrl: cl.HTTPS, |
|
SshUrl: cl.SSH, |
|
OpenIssues: repo.NumOpenIssues, |
|
Stars: repo.NumStars, |
|
Forks: repo.NumForks, |
|
Watchers: repo.NumWatches, |
|
Created: repo.Created, |
|
Updated: repo.Updated, |
|
Permissions: permission, |
|
} |
|
} |
|
|
|
func ToBranch(b *models.Branch, c *git.Commit) *api.Branch { |
|
return &api.Branch{ |
|
Name: b.Name, |
|
Commit: ToCommit(c), |
|
} |
|
} |
|
|
|
func ToCommit(c *git.Commit) *api.PayloadCommit { |
|
authorUsername := "" |
|
author, err := models.GetUserByEmail(c.Author.Email) |
|
if err == nil { |
|
authorUsername = author.Name |
|
} |
|
committerUsername := "" |
|
committer, err := models.GetUserByEmail(c.Committer.Email) |
|
if err == nil { |
|
committerUsername = committer.Name |
|
} |
|
return &api.PayloadCommit{ |
|
ID: c.ID.String(), |
|
Message: c.Message(), |
|
URL: "Not implemented", |
|
Author: &api.PayloadAuthor{ |
|
Name: c.Author.Name, |
|
Email: c.Author.Email, |
|
UserName: authorUsername, |
|
}, |
|
Committer: &api.PayloadCommitter{ |
|
Name: c.Committer.Name, |
|
Email: c.Committer.Email, |
|
UserName: committerUsername, |
|
}, |
|
Timestamp: c.Author.When, |
|
} |
|
} |
|
|
|
func ToPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey { |
|
return &api.PublicKey{ |
|
ID: key.ID, |
|
Key: key.Content, |
|
URL: apiLink + com.ToStr(key.ID), |
|
Title: key.Name, |
|
Created: key.Created, |
|
} |
|
} |
|
|
|
func ToHook(repoLink string, w *models.Webhook) *api.Hook { |
|
config := map[string]string{ |
|
"url": w.URL, |
|
"content_type": w.ContentType.Name(), |
|
} |
|
if w.HookTaskType == models.SLACK { |
|
s := w.GetSlackHook() |
|
config["channel"] = s.Channel |
|
config["username"] = s.Username |
|
config["icon_url"] = s.IconURL |
|
config["color"] = s.Color |
|
} |
|
|
|
return &api.Hook{ |
|
ID: w.ID, |
|
Type: w.HookTaskType.Name(), |
|
URL: fmt.Sprintf("%s/settings/hooks/%d", repoLink, w.ID), |
|
Active: w.IsActive, |
|
Config: config, |
|
Events: w.EventsArray(), |
|
Updated: w.Updated, |
|
Created: w.Created, |
|
} |
|
} |
|
|
|
func ToDeployKey(apiLink string, key *models.DeployKey) *api.DeployKey { |
|
return &api.DeployKey{ |
|
ID: key.ID, |
|
Key: key.Content, |
|
URL: apiLink + com.ToStr(key.ID), |
|
Title: key.Name, |
|
Created: key.Created, |
|
ReadOnly: true, // All deploy keys are read-only. |
|
} |
|
} |
|
|
|
func ToLabel(label *models.Label) *api.Label { |
|
return &api.Label{ |
|
ID: label.ID, |
|
Name: label.Name, |
|
Color: label.Color, |
|
} |
|
} |
|
|
|
func ToMilestone(milestone *models.Milestone) *api.Milestone { |
|
if milestone == nil { |
|
return nil |
|
} |
|
|
|
apiMilestone := &api.Milestone{ |
|
ID: milestone.ID, |
|
State: milestone.State(), |
|
Title: milestone.Name, |
|
Description: milestone.Content, |
|
OpenIssues: milestone.NumOpenIssues, |
|
ClosedIssues: milestone.NumClosedIssues, |
|
} |
|
if milestone.IsClosed { |
|
apiMilestone.Closed = &milestone.ClosedDate |
|
} |
|
if milestone.Deadline.Year() < 9999 { |
|
apiMilestone.Deadline = &milestone.Deadline |
|
} |
|
return apiMilestone |
|
} |
|
|
|
func ToIssue(issue *models.Issue) *api.Issue { |
|
apiLabels := make([]*api.Label, len(issue.Labels)) |
|
for i := range issue.Labels { |
|
apiLabels[i] = ToLabel(issue.Labels[i]) |
|
} |
|
|
|
apiIssue := &api.Issue{ |
|
ID: issue.ID, |
|
Index: issue.Index, |
|
State: issue.State(), |
|
Title: issue.Name, |
|
Body: issue.Content, |
|
User: ToUser(issue.Poster), |
|
Labels: apiLabels, |
|
Assignee: ToUser(issue.Assignee), |
|
Milestone: ToMilestone(issue.Milestone), |
|
Comments: issue.NumComments, |
|
Created: issue.Created, |
|
Updated: issue.Updated, |
|
} |
|
if issue.IsPull { |
|
if err := issue.GetPullRequest(); err != nil { |
|
log.Error(4, "GetPullRequest", err) |
|
} else { |
|
apiIssue.PullRequest = &api.PullRequestMeta{ |
|
HasMerged: issue.PullRequest.HasMerged, |
|
} |
|
if issue.PullRequest.HasMerged { |
|
apiIssue.PullRequest.Merged = &issue.PullRequest.Merged |
|
} |
|
} |
|
} |
|
|
|
return apiIssue |
|
} |
|
|
|
func ToOrganization(org *models.User) *api.Organization { |
|
return &api.Organization{ |
|
ID: org.ID, |
|
AvatarUrl: org.AvatarLink(), |
|
UserName: org.Name, |
|
FullName: org.FullName, |
|
Description: org.Description, |
|
Website: org.Website, |
|
Location: org.Location, |
|
} |
|
} |
|
|
|
func ToTeam(team *models.Team) *api.Team { |
|
return &api.Team{ |
|
ID: team.ID, |
|
Name: team.Name, |
|
Description: team.Description, |
|
Permission: team.Authorize.String(), |
|
} |
|
}
|
|
|