Add file status on API (#7671)
* add file status on API * fix tests * fix tests * fix tests
This commit is contained in:
parent
5f7fccaf55
commit
09ca391230
4 changed files with 84 additions and 40 deletions
|
@ -17,6 +17,7 @@ import (
|
||||||
"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"
|
||||||
|
@ -385,7 +386,7 @@ func NewPushCommits() *PushCommits {
|
||||||
|
|
||||||
// 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 {
|
||||||
|
@ -417,6 +418,12 @@ func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit
|
||||||
} 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,
|
||||||
|
@ -431,10 +438,13 @@ func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit
|
||||||
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
|
||||||
|
@ -738,7 +748,10 @@ func MirrorSyncPushAction(repo *Repository, opts MirrorSyncPushActionOptions) er
|
||||||
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()
|
||||||
|
|
|
@ -85,42 +85,69 @@ func TestPushCommits_ToAPIPayloadCommits(t *testing.T) {
|
||||||
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",
|
CommitterName: "User2",
|
||||||
AuthorEmail: "user4@example.com",
|
AuthorEmail: "user2@example.com",
|
||||||
AuthorName: "User Four",
|
AuthorName: "User2",
|
||||||
Message: "message1",
|
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",
|
AuthorName: "User2",
|
||||||
Message: "message2",
|
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")
|
repo := AssertExistsAndLoadBean(t, &Repository{ID: 16}).(*Repository)
|
||||||
if assert.Len(t, payloadCommits, 2) {
|
payloadCommits, err := pushCommits.ToAPIPayloadCommits(repo.RepoPath(), "/user2/repo16")
|
||||||
assert.Equal(t, "abcdef1", payloadCommits[0].ID)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "message1", payloadCommits[0].Message)
|
assert.EqualValues(t, 3, len(payloadCommits))
|
||||||
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, "69554a6", payloadCommits[0].ID)
|
||||||
assert.Equal(t, "message2", payloadCommits[1].Message)
|
assert.Equal(t, "not signed commit", payloadCommits[0].Message)
|
||||||
assert.Equal(t, "/username/reponame/commit/abcdef2", payloadCommits[1].URL)
|
assert.Equal(t, "/user2/repo16/commit/69554a6", payloadCommits[0].URL)
|
||||||
assert.Equal(t, "User Two", payloadCommits[1].Committer.Name)
|
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].Committer.UserName)
|
||||||
assert.Equal(t, "User Two", payloadCommits[1].Author.Name)
|
assert.Equal(t, "User2", payloadCommits[1].Author.Name)
|
||||||
assert.Equal(t, "user2", payloadCommits[1].Author.UserName)
|
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) {
|
||||||
|
|
|
@ -193,12 +193,16 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
|
|
|
@ -29,7 +29,7 @@ func TestCommitRepoAction(t *testing.T) {
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
userID: 2,
|
userID: 2,
|
||||||
repositoryID: 2,
|
repositoryID: 16,
|
||||||
commitRepoActionOptions: CommitRepoActionOptions{
|
commitRepoActionOptions: CommitRepoActionOptions{
|
||||||
RefFullName: "refName",
|
RefFullName: "refName",
|
||||||
OldCommitID: "oldCommitID",
|
OldCommitID: "oldCommitID",
|
||||||
|
@ -37,20 +37,20 @@ func TestCommitRepoAction(t *testing.T) {
|
||||||
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",
|
CommitterName: "User2",
|
||||||
AuthorEmail: "user4@example.com",
|
AuthorEmail: "user2@example.com",
|
||||||
AuthorName: "User Four",
|
AuthorName: "User2",
|
||||||
Message: "message1",
|
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",
|
AuthorName: "User2",
|
||||||
Message: "message2",
|
Message: "good signed commit (with not yet validated email)",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Len: 2,
|
Len: 2,
|
||||||
|
|
Reference in a new issue