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"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/modules/base"
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	api "code.gitea.io/gitea/modules/structs"
 | 
			
		||||
| 
						 | 
				
			
			@ -385,7 +386,7 @@ func NewPushCommits() *PushCommits {
 | 
			
		|||
 | 
			
		||||
// ToAPIPayloadCommits converts a PushCommits object to
 | 
			
		||||
// 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))
 | 
			
		||||
 | 
			
		||||
	if pc.emailUsers == nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -417,6 +418,12 @@ func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit
 | 
			
		|||
		} else {
 | 
			
		||||
			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{
 | 
			
		||||
			ID:      commit.Sha1,
 | 
			
		||||
			Message: commit.Message,
 | 
			
		||||
| 
						 | 
				
			
			@ -431,10 +438,13 @@ func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit
 | 
			
		|||
				Email:    commit.CommitterEmail,
 | 
			
		||||
				UserName: committerUsername,
 | 
			
		||||
			},
 | 
			
		||||
			Added:     fileStatus.Added,
 | 
			
		||||
			Removed:   fileStatus.Removed,
 | 
			
		||||
			Modified:  fileStatus.Modified,
 | 
			
		||||
			Timestamp: commit.Timestamp,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return commits
 | 
			
		||||
	return commits, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 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]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
	apiPusher := repo.MustOwner().APIFormat()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,42 +85,69 @@ func TestPushCommits_ToAPIPayloadCommits(t *testing.T) {
 | 
			
		|||
	pushCommits := NewPushCommits()
 | 
			
		||||
	pushCommits.Commits = []*PushCommit{
 | 
			
		||||
		{
 | 
			
		||||
			Sha1:           "abcdef1",
 | 
			
		||||
			Sha1:           "69554a6",
 | 
			
		||||
			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",
 | 
			
		||||
			CommitterName:  "User Two",
 | 
			
		||||
			CommitterName:  "User2",
 | 
			
		||||
			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)
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
	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, "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)
 | 
			
		||||
	}
 | 
			
		||||
	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) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -193,12 +193,16 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	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{
 | 
			
		||||
			Ref:        opts.RefFullName,
 | 
			
		||||
			Before:     opts.OldCommitID,
 | 
			
		||||
			After:      opts.NewCommitID,
 | 
			
		||||
			CompareURL: setting.AppURL + opts.Commits.CompareURL,
 | 
			
		||||
			Commits:    opts.Commits.ToAPIPayloadCommits(repo.HTMLURL()),
 | 
			
		||||
			Commits:    commits,
 | 
			
		||||
			Repo:       apiRepo,
 | 
			
		||||
			Pusher:     apiPusher,
 | 
			
		||||
			Sender:     apiPusher,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ func TestCommitRepoAction(t *testing.T) {
 | 
			
		|||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			userID:       2,
 | 
			
		||||
			repositoryID: 2,
 | 
			
		||||
			repositoryID: 16,
 | 
			
		||||
			commitRepoActionOptions: CommitRepoActionOptions{
 | 
			
		||||
				RefFullName: "refName",
 | 
			
		||||
				OldCommitID: "oldCommitID",
 | 
			
		||||
| 
						 | 
				
			
			@ -37,20 +37,20 @@ func TestCommitRepoAction(t *testing.T) {
 | 
			
		|||
				Commits: &models.PushCommits{
 | 
			
		||||
					Commits: []*models.PushCommit{
 | 
			
		||||
						{
 | 
			
		||||
							Sha1:           "abcdef1",
 | 
			
		||||
							Sha1:           "69554a6",
 | 
			
		||||
							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",
 | 
			
		||||
							CommitterName:  "User Two",
 | 
			
		||||
							CommitterName:  "User2",
 | 
			
		||||
							AuthorEmail:    "user2@example.com",
 | 
			
		||||
							AuthorName:     "User Two",
 | 
			
		||||
							Message:        "message2",
 | 
			
		||||
							AuthorName:     "User2",
 | 
			
		||||
							Message:        "good signed commit (with not yet validated email)",
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
					Len: 2,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue