123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- // Copyright 2020 The Gitea 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 (
- "time"
-
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/git"
- "code.gitea.io/gitea/modules/log"
- api "code.gitea.io/gitea/modules/structs"
- "code.gitea.io/gitea/modules/util"
- )
-
- // ToCommitUser convert a git.Signature to an api.CommitUser
- func ToCommitUser(sig *git.Signature) *api.CommitUser {
- return &api.CommitUser{
- Identity: api.Identity{
- Name: sig.Name,
- Email: sig.Email,
- },
- Date: sig.When.UTC().Format(time.RFC3339),
- }
- }
-
- // ToCommitMeta convert a git.Tag to an api.CommitMeta
- func ToCommitMeta(repo *models.Repository, tag *git.Tag) *api.CommitMeta {
- return &api.CommitMeta{
- SHA: tag.Object.String(),
- URL: util.URLJoin(repo.APIURL(), "git/commits", tag.ID.String()),
- Created: tag.Tagger.When,
- }
- }
-
- // ToPayloadCommit convert a git.Commit to api.PayloadCommit
- func ToPayloadCommit(repo *models.Repository, c *git.Commit) *api.PayloadCommit {
- authorUsername := ""
- if author, err := models.GetUserByEmail(c.Author.Email); err == nil {
- authorUsername = author.Name
- } else if !models.IsErrUserNotExist(err) {
- log.Error("GetUserByEmail: %v", err)
- }
-
- committerUsername := ""
- if committer, err := models.GetUserByEmail(c.Committer.Email); err == nil {
- committerUsername = committer.Name
- } else if !models.IsErrUserNotExist(err) {
- log.Error("GetUserByEmail: %v", err)
- }
-
- return &api.PayloadCommit{
- ID: c.ID.String(),
- Message: c.Message(),
- URL: util.URLJoin(repo.HTMLURL(), "commit", c.ID.String()),
- Author: &api.PayloadUser{
- Name: c.Author.Name,
- Email: c.Author.Email,
- UserName: authorUsername,
- },
- Committer: &api.PayloadUser{
- Name: c.Committer.Name,
- Email: c.Committer.Email,
- UserName: committerUsername,
- },
- Timestamp: c.Author.When,
- Verification: ToVerification(c),
- }
- }
-
- // ToCommit convert a git.Commit to api.Commit
- func ToCommit(repo *models.Repository, commit *git.Commit, userCache map[string]*models.User) (*api.Commit, error) {
-
- var apiAuthor, apiCommitter *api.User
-
- // Retrieve author and committer information
-
- var cacheAuthor *models.User
- var ok bool
- if userCache == nil {
- cacheAuthor = (*models.User)(nil)
- ok = false
- } else {
- cacheAuthor, ok = userCache[commit.Author.Email]
- }
-
- if ok {
- apiAuthor = ToUser(cacheAuthor, false, false)
- } else {
- author, err := models.GetUserByEmail(commit.Author.Email)
- if err != nil && !models.IsErrUserNotExist(err) {
- return nil, err
- } else if err == nil {
- apiAuthor = ToUser(author, false, false)
- if userCache != nil {
- userCache[commit.Author.Email] = author
- }
- }
- }
-
- var cacheCommitter *models.User
- if userCache == nil {
- cacheCommitter = (*models.User)(nil)
- ok = false
- } else {
- cacheCommitter, ok = userCache[commit.Committer.Email]
- }
-
- if ok {
- apiCommitter = ToUser(cacheCommitter, false, false)
- } else {
- committer, err := models.GetUserByEmail(commit.Committer.Email)
- if err != nil && !models.IsErrUserNotExist(err) {
- return nil, err
- } else if err == nil {
- apiCommitter = ToUser(committer, false, false)
- if userCache != nil {
- userCache[commit.Committer.Email] = committer
- }
- }
- }
-
- // Retrieve parent(s) of the commit
- apiParents := make([]*api.CommitMeta, commit.ParentCount())
- for i := 0; i < commit.ParentCount(); i++ {
- sha, _ := commit.ParentID(i)
- apiParents[i] = &api.CommitMeta{
- URL: repo.APIURL() + "/git/commits/" + sha.String(),
- SHA: sha.String(),
- }
- }
-
- return &api.Commit{
- CommitMeta: &api.CommitMeta{
- URL: repo.APIURL() + "/git/commits/" + commit.ID.String(),
- SHA: commit.ID.String(),
- },
- HTMLURL: repo.HTMLURL() + "/commit/" + commit.ID.String(),
- RepoCommit: &api.RepoCommit{
- URL: repo.APIURL() + "/git/commits/" + commit.ID.String(),
- Author: &api.CommitUser{
- Identity: api.Identity{
- Name: commit.Committer.Name,
- Email: commit.Committer.Email,
- },
- Date: commit.Author.When.Format(time.RFC3339),
- },
- Committer: &api.CommitUser{
- Identity: api.Identity{
- Name: commit.Committer.Name,
- Email: commit.Committer.Email,
- },
- Date: commit.Committer.When.Format(time.RFC3339),
- },
- Message: commit.Message(),
- Tree: &api.CommitMeta{
- URL: repo.APIURL() + "/git/trees/" + commit.ID.String(),
- SHA: commit.ID.String(),
- },
- },
- Author: apiAuthor,
- Committer: apiCommitter,
- Parents: apiParents,
- }, nil
- }
|