Skip to content

Commit 05ee972

Browse files
committed
add commit file statuses
1 parent 06a1739 commit 05ee972

File tree

3 files changed

+32
-6
lines changed

3 files changed

+32
-6
lines changed

models/action.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ func NewPushCommits() *PushCommits {
352352

353353
// ToAPIPayloadCommits converts a PushCommits object to
354354
// api.PayloadCommit format.
355-
func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit {
355+
func (pc *PushCommits) ToAPIPayloadCommits(repoPath, repoLink string) ([]*api.PayloadCommit, error) {
356356
commits := make([]*api.PayloadCommit, len(pc.Commits))
357357

358358
if pc.emailUsers == nil {
@@ -367,6 +367,8 @@ func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit
367367
if err == nil {
368368
authorUsername = author.Name
369369
pc.emailUsers[commit.AuthorEmail] = author
370+
} else if !IsErrUserNotExist(err) {
371+
return nil, fmt.Errorf("GetUserByEmail: %v", err)
370372
}
371373
} else {
372374
authorUsername = author.Name
@@ -380,10 +382,18 @@ func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit
380382
// TODO: check errors other than email not found.
381383
committerUsername = committer.Name
382384
pc.emailUsers[commit.CommitterEmail] = committer
385+
} else if !IsErrUserNotExist(err) {
386+
return nil, fmt.Errorf("GetUserByEmail: %v", err)
383387
}
384388
} else {
385389
committerUsername = committer.Name
386390
}
391+
392+
fileStatus, err := git.GetCommitFileStatus(repoPath, commit.Sha1)
393+
if err != nil {
394+
return nil, fmt.Errorf("FileStatus [commit_sha1: %s]: %v", commit.Sha1, err)
395+
}
396+
387397
commits[i] = &api.PayloadCommit{
388398
ID: commit.Sha1,
389399
Message: commit.Message,
@@ -398,10 +408,13 @@ func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit
398408
Email: commit.CommitterEmail,
399409
UserName: committerUsername,
400410
},
411+
Added: fileStatus.Added,
412+
Removed: fileStatus.Removed,
413+
Modified: fileStatus.Modified,
401414
Timestamp: commit.Timestamp,
402415
}
403416
}
404-
return commits
417+
return commits, nil
405418
}
406419

407420
// AvatarLink tries to match user in database with e-mail
@@ -726,12 +739,16 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
726739
}
727740

728741
if isHookEventPush {
742+
commits, err := opts.Commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL())
743+
if err != nil {
744+
return fmt.Errorf("ToAPIPayloadCommits: %v", err)
745+
}
729746
if err = PrepareWebhooks(repo, HookEventPush, &api.PushPayload{
730747
Ref: opts.RefFullName,
731748
Before: opts.OldCommitID,
732749
After: opts.NewCommitID,
733750
CompareURL: setting.AppURL + opts.Commits.CompareURL,
734-
Commits: opts.Commits.ToAPIPayloadCommits(repo.HTMLURL()),
751+
Commits: commits,
735752
Repo: apiRepo,
736753
Pusher: apiPusher,
737754
Sender: apiPusher,
@@ -819,7 +836,10 @@ func MirrorSyncPushAction(repo *Repository, opts MirrorSyncPushActionOptions) er
819836
opts.Commits.Commits = opts.Commits.Commits[:setting.UI.FeedMaxCommitNum]
820837
}
821838

822-
apiCommits := opts.Commits.ToAPIPayloadCommits(repo.HTMLURL())
839+
apiCommits, err := opts.Commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL())
840+
if err != nil {
841+
return fmt.Errorf("ToAPIPayloadCommits: %v", err)
842+
}
823843

824844
opts.Commits.CompareURL = repo.ComposeCompareURL(opts.OldCommitID, opts.NewCommitID)
825845
apiPusher := repo.MustOwner().APIFormat()

models/action_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func TestPushCommits_ToAPIPayloadCommits(t *testing.T) {
104104
}
105105
pushCommits.Len = len(pushCommits.Commits)
106106

107-
payloadCommits := pushCommits.ToAPIPayloadCommits("/username/reponame")
107+
payloadCommits, err := pushCommits.ToAPIPayloadCommits(RepoPath("username", "reponame"), "/username/reponame")
108108
if assert.Len(t, payloadCommits, 2) {
109109
assert.Equal(t, "abcdef1", payloadCommits[0].ID)
110110
assert.Equal(t, "message1", payloadCommits[0].Message)

models/pull.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -628,12 +628,18 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle
628628
l.PushFront(mergeCommit)
629629
}
630630

631+
commits, err := ListToPushCommits(l).ToAPIPayloadCommits(pr.BaseRepo.RepoPath(), pr.BaseRepo.HTMLURL())
632+
if err != nil {
633+
log.Error(4, "ToAPIPayloadCommits: %v", err)
634+
return nil
635+
}
636+
631637
p := &api.PushPayload{
632638
Ref: git.BranchPrefix + pr.BaseBranch,
633639
Before: pr.MergeBase,
634640
After: mergeCommit.ID.String(),
635641
CompareURL: setting.AppURL + pr.BaseRepo.ComposeCompareURL(pr.MergeBase, pr.MergedCommitID),
636-
Commits: ListToPushCommits(l).ToAPIPayloadCommits(pr.BaseRepo.HTMLURL()),
642+
Commits: commits,
637643
Repo: pr.BaseRepo.APIFormat(mode),
638644
Pusher: pr.HeadRepo.MustOwner().APIFormat(),
639645
Sender: doer.APIFormat(),

0 commit comments

Comments
 (0)