* add file status on API * fix tests * fix tests * fix teststags/v1.10.0-rc1
"unicode" | "unicode" | ||||
"code.gitea.io/gitea/modules/base" | "code.gitea.io/gitea/modules/base" | ||||
"code.gitea.io/gitea/modules/git" | |||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
api "code.gitea.io/gitea/modules/structs" | api "code.gitea.io/gitea/modules/structs" | ||||
// ToAPIPayloadCommits converts a PushCommits object to | // ToAPIPayloadCommits converts a PushCommits object to | ||||
// api.PayloadCommit format. | // api.PayloadCommit format. | ||||
func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit { | |||||
func (pc *PushCommits) ToAPIPayloadCommits(repoPath, repoLink string) ([]*api.PayloadCommit, error) { | |||||
commits := make([]*api.PayloadCommit, len(pc.Commits)) | commits := make([]*api.PayloadCommit, len(pc.Commits)) | ||||
if pc.emailUsers == nil { | if pc.emailUsers == nil { | ||||
} else { | } else { | ||||
committerUsername = committer.Name | committerUsername = committer.Name | ||||
} | } | ||||
fileStatus, err := git.GetCommitFileStatus(repoPath, commit.Sha1) | |||||
if err != nil { | |||||
return nil, fmt.Errorf("FileStatus [commit_sha1: %s]: %v", commit.Sha1, err) | |||||
} | |||||
commits[i] = &api.PayloadCommit{ | commits[i] = &api.PayloadCommit{ | ||||
ID: commit.Sha1, | ID: commit.Sha1, | ||||
Message: commit.Message, | Message: commit.Message, | ||||
Email: commit.CommitterEmail, | Email: commit.CommitterEmail, | ||||
UserName: committerUsername, | UserName: committerUsername, | ||||
}, | }, | ||||
Added: fileStatus.Added, | |||||
Removed: fileStatus.Removed, | |||||
Modified: fileStatus.Modified, | |||||
Timestamp: commit.Timestamp, | Timestamp: commit.Timestamp, | ||||
} | } | ||||
} | } | ||||
return commits | |||||
return commits, nil | |||||
} | } | ||||
// AvatarLink tries to match user in database with e-mail | // AvatarLink tries to match user in database with e-mail | ||||
opts.Commits.Commits = opts.Commits.Commits[:setting.UI.FeedMaxCommitNum] | opts.Commits.Commits = opts.Commits.Commits[:setting.UI.FeedMaxCommitNum] | ||||
} | } | ||||
apiCommits := opts.Commits.ToAPIPayloadCommits(repo.HTMLURL()) | |||||
apiCommits, err := opts.Commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
opts.Commits.CompareURL = repo.ComposeCompareURL(opts.OldCommitID, opts.NewCommitID) | opts.Commits.CompareURL = repo.ComposeCompareURL(opts.OldCommitID, opts.NewCommitID) | ||||
apiPusher := repo.MustOwner().APIFormat() | apiPusher := repo.MustOwner().APIFormat() |
pushCommits := NewPushCommits() | pushCommits := NewPushCommits() | ||||
pushCommits.Commits = []*PushCommit{ | pushCommits.Commits = []*PushCommit{ | ||||
{ | { | ||||
Sha1: "abcdef1", | |||||
Sha1: "69554a6", | |||||
CommitterEmail: "user2@example.com", | CommitterEmail: "user2@example.com", | ||||
CommitterName: "User Two", | |||||
AuthorEmail: "user4@example.com", | |||||
AuthorName: "User Four", | |||||
Message: "message1", | |||||
CommitterName: "User2", | |||||
AuthorEmail: "user2@example.com", | |||||
AuthorName: "User2", | |||||
Message: "not signed commit", | |||||
}, | }, | ||||
{ | { | ||||
Sha1: "abcdef2", | |||||
Sha1: "27566bd", | |||||
CommitterEmail: "user2@example.com", | CommitterEmail: "user2@example.com", | ||||
CommitterName: "User Two", | |||||
CommitterName: "User2", | |||||
AuthorEmail: "user2@example.com", | AuthorEmail: "user2@example.com", | ||||
AuthorName: "User Two", | |||||
Message: "message2", | |||||
AuthorName: "User2", | |||||
Message: "good signed commit (with not yet validated email)", | |||||
}, | |||||
{ | |||||
Sha1: "5099b81", | |||||
CommitterEmail: "user2@example.com", | |||||
CommitterName: "User2", | |||||
AuthorEmail: "user2@example.com", | |||||
AuthorName: "User2", | |||||
Message: "good signed commit", | |||||
}, | }, | ||||
} | } | ||||
pushCommits.Len = len(pushCommits.Commits) | pushCommits.Len = len(pushCommits.Commits) | ||||
payloadCommits := pushCommits.ToAPIPayloadCommits("/username/reponame") | |||||
if assert.Len(t, payloadCommits, 2) { | |||||
assert.Equal(t, "abcdef1", payloadCommits[0].ID) | |||||
assert.Equal(t, "message1", payloadCommits[0].Message) | |||||
assert.Equal(t, "/username/reponame/commit/abcdef1", payloadCommits[0].URL) | |||||
assert.Equal(t, "User Two", payloadCommits[0].Committer.Name) | |||||
assert.Equal(t, "user2", payloadCommits[0].Committer.UserName) | |||||
assert.Equal(t, "User Four", payloadCommits[0].Author.Name) | |||||
assert.Equal(t, "user4", payloadCommits[0].Author.UserName) | |||||
assert.Equal(t, "abcdef2", payloadCommits[1].ID) | |||||
assert.Equal(t, "message2", payloadCommits[1].Message) | |||||
assert.Equal(t, "/username/reponame/commit/abcdef2", payloadCommits[1].URL) | |||||
assert.Equal(t, "User Two", payloadCommits[1].Committer.Name) | |||||
assert.Equal(t, "user2", payloadCommits[1].Committer.UserName) | |||||
assert.Equal(t, "User Two", payloadCommits[1].Author.Name) | |||||
assert.Equal(t, "user2", payloadCommits[1].Author.UserName) | |||||
} | |||||
repo := AssertExistsAndLoadBean(t, &Repository{ID: 16}).(*Repository) | |||||
payloadCommits, err := pushCommits.ToAPIPayloadCommits(repo.RepoPath(), "/user2/repo16") | |||||
assert.NoError(t, err) | |||||
assert.EqualValues(t, 3, len(payloadCommits)) | |||||
assert.Equal(t, "69554a6", payloadCommits[0].ID) | |||||
assert.Equal(t, "not signed commit", payloadCommits[0].Message) | |||||
assert.Equal(t, "/user2/repo16/commit/69554a6", payloadCommits[0].URL) | |||||
assert.Equal(t, "User2", payloadCommits[0].Committer.Name) | |||||
assert.Equal(t, "user2", payloadCommits[0].Committer.UserName) | |||||
assert.Equal(t, "User2", payloadCommits[0].Author.Name) | |||||
assert.Equal(t, "user2", payloadCommits[0].Author.UserName) | |||||
assert.EqualValues(t, []string{}, payloadCommits[0].Added) | |||||
assert.EqualValues(t, []string{}, payloadCommits[0].Removed) | |||||
assert.EqualValues(t, []string{"readme.md"}, payloadCommits[0].Modified) | |||||
assert.Equal(t, "27566bd", payloadCommits[1].ID) | |||||
assert.Equal(t, "good signed commit (with not yet validated email)", payloadCommits[1].Message) | |||||
assert.Equal(t, "/user2/repo16/commit/27566bd", payloadCommits[1].URL) | |||||
assert.Equal(t, "User2", payloadCommits[1].Committer.Name) | |||||
assert.Equal(t, "user2", payloadCommits[1].Committer.UserName) | |||||
assert.Equal(t, "User2", payloadCommits[1].Author.Name) | |||||
assert.Equal(t, "user2", payloadCommits[1].Author.UserName) | |||||
assert.EqualValues(t, []string{}, payloadCommits[1].Added) | |||||
assert.EqualValues(t, []string{}, payloadCommits[1].Removed) | |||||
assert.EqualValues(t, []string{"readme.md"}, payloadCommits[1].Modified) | |||||
assert.Equal(t, "5099b81", payloadCommits[2].ID) | |||||
assert.Equal(t, "good signed commit", payloadCommits[2].Message) | |||||
assert.Equal(t, "/user2/repo16/commit/5099b81", payloadCommits[2].URL) | |||||
assert.Equal(t, "User2", payloadCommits[2].Committer.Name) | |||||
assert.Equal(t, "user2", payloadCommits[2].Committer.UserName) | |||||
assert.Equal(t, "User2", payloadCommits[2].Author.Name) | |||||
assert.Equal(t, "user2", payloadCommits[2].Author.UserName) | |||||
assert.EqualValues(t, []string{"readme.md"}, payloadCommits[2].Added) | |||||
assert.EqualValues(t, []string{}, payloadCommits[2].Removed) | |||||
assert.EqualValues(t, []string{}, payloadCommits[2].Modified) | |||||
} | } | ||||
func TestPushCommits_AvatarLink(t *testing.T) { | func TestPushCommits_AvatarLink(t *testing.T) { |
} | } | ||||
if isHookEventPush { | if isHookEventPush { | ||||
commits, err := opts.Commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
if err = models.PrepareWebhooks(repo, models.HookEventPush, &api.PushPayload{ | if err = models.PrepareWebhooks(repo, models.HookEventPush, &api.PushPayload{ | ||||
Ref: opts.RefFullName, | Ref: opts.RefFullName, | ||||
Before: opts.OldCommitID, | Before: opts.OldCommitID, | ||||
After: opts.NewCommitID, | After: opts.NewCommitID, | ||||
CompareURL: setting.AppURL + opts.Commits.CompareURL, | CompareURL: setting.AppURL + opts.Commits.CompareURL, | ||||
Commits: opts.Commits.ToAPIPayloadCommits(repo.HTMLURL()), | |||||
Commits: commits, | |||||
Repo: apiRepo, | Repo: apiRepo, | ||||
Pusher: apiPusher, | Pusher: apiPusher, | ||||
Sender: apiPusher, | Sender: apiPusher, |
}{ | }{ | ||||
{ | { | ||||
userID: 2, | userID: 2, | ||||
repositoryID: 2, | |||||
repositoryID: 16, | |||||
commitRepoActionOptions: CommitRepoActionOptions{ | commitRepoActionOptions: CommitRepoActionOptions{ | ||||
RefFullName: "refName", | RefFullName: "refName", | ||||
OldCommitID: "oldCommitID", | OldCommitID: "oldCommitID", | ||||
Commits: &models.PushCommits{ | Commits: &models.PushCommits{ | ||||
Commits: []*models.PushCommit{ | Commits: []*models.PushCommit{ | ||||
{ | { | ||||
Sha1: "abcdef1", | |||||
Sha1: "69554a6", | |||||
CommitterEmail: "user2@example.com", | CommitterEmail: "user2@example.com", | ||||
CommitterName: "User Two", | |||||
AuthorEmail: "user4@example.com", | |||||
AuthorName: "User Four", | |||||
Message: "message1", | |||||
CommitterName: "User2", | |||||
AuthorEmail: "user2@example.com", | |||||
AuthorName: "User2", | |||||
Message: "not signed commit", | |||||
}, | }, | ||||
{ | { | ||||
Sha1: "abcdef2", | |||||
Sha1: "27566bd", | |||||
CommitterEmail: "user2@example.com", | CommitterEmail: "user2@example.com", | ||||
CommitterName: "User Two", | |||||
CommitterName: "User2", | |||||
AuthorEmail: "user2@example.com", | AuthorEmail: "user2@example.com", | ||||
AuthorName: "User Two", | |||||
Message: "message2", | |||||
AuthorName: "User2", | |||||
Message: "good signed commit (with not yet validated email)", | |||||
}, | }, | ||||
}, | }, | ||||
Len: 2, | Len: 2, |