Skip to content

Commit 839f1de

Browse files
webhooks: Add head_commit field to push payload.
1 parent a7ee4a6 commit 839f1de

File tree

5 files changed

+73
-8
lines changed

5 files changed

+73
-8
lines changed

Gopkg.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

models/action.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,67 @@ type CommitRepoActionOptions struct {
523523
Commits *PushCommits
524524
}
525525

526+
func getHeadCommit(repo *Repository, headCommitID string) *api.PayloadCommit {
527+
if headCommitID == git.EmptySHA {
528+
return nil
529+
}
530+
531+
gitRepo, err := git.OpenRepository(repo.RepoPath())
532+
if err != nil {
533+
log.Error(4, "OpenRepository[%s]: %v", repo.RepoPath(), err)
534+
}
535+
536+
headCommit, err := gitRepo.GetCommit(headCommitID)
537+
if err != nil {
538+
log.Error(4, "GetCommit[%s]: %v", headCommitID, err)
539+
}
540+
541+
authorUsername := ""
542+
if author, err := GetUserByEmail(headCommit.Author.Email); err == nil {
543+
authorUsername = author.Name
544+
} else if !IsErrUserNotExist(err) {
545+
log.Error(4, "GetUserByEmail: %v", err)
546+
}
547+
548+
committerUsername := ""
549+
if committer, err := GetUserByEmail(headCommit.Committer.Email); err == nil {
550+
committerUsername = committer.Name
551+
} else if !IsErrUserNotExist(err) {
552+
log.Error(4, "GetUserByEmail: %v", err)
553+
}
554+
555+
verif := ParseCommitWithSignature(headCommit)
556+
var signature, payload string
557+
if headCommit.Signature != nil {
558+
signature = headCommit.Signature.Signature
559+
payload = headCommit.Signature.Payload
560+
}
561+
562+
headPayloadCommit := &api.PayloadCommit{
563+
ID: headCommitID,
564+
Message: headCommit.CommitMessage,
565+
URL: fmt.Sprintf("%s/commit/%s", repo.HTMLURL(), headCommit.ID),
566+
Author: &api.PayloadUser{
567+
Name: headCommit.Author.Name,
568+
Email: headCommit.Author.Email,
569+
UserName: authorUsername,
570+
},
571+
Committer: &api.PayloadUser{
572+
Name: headCommit.Committer.Name,
573+
Email: headCommit.Committer.Email,
574+
UserName: committerUsername,
575+
},
576+
Timestamp: headCommit.Author.When,
577+
Verification: &api.PayloadCommitVerification{
578+
Verified: verif.Verified,
579+
Reason: verif.Reason,
580+
Signature: signature,
581+
Payload: payload,
582+
},
583+
}
584+
return headPayloadCommit
585+
}
586+
526587
// CommitRepoAction adds new commit action to the repository, and prepare
527588
// corresponding webhooks.
528589
func CommitRepoAction(opts CommitRepoActionOptions) error {
@@ -684,6 +745,7 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
684745
After: opts.NewCommitID,
685746
CompareURL: setting.AppURL + opts.Commits.CompareURL,
686747
Commits: opts.Commits.ToAPIPayloadCommits(repo.HTMLURL()),
748+
HeadCommit: getHeadCommit(repo, opts.NewCommitID),
687749
Repo: apiRepo,
688750
Pusher: apiPusher,
689751
Sender: apiPusher,
@@ -781,6 +843,7 @@ func MirrorSyncPushAction(repo *Repository, opts MirrorSyncPushActionOptions) er
781843
After: opts.NewCommitID,
782844
CompareURL: setting.AppURL + opts.Commits.CompareURL,
783845
Commits: apiCommits,
846+
HeadCommit: getHeadCommit(repo, opts.NewCommitID),
784847
Repo: repo.APIFormat(AccessModeOwner),
785848
Pusher: apiPusher,
786849
Sender: apiPusher,

models/action_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,11 +249,11 @@ func TestCommitRepoAction(t *testing.T) {
249249
}{
250250
{
251251
userID: 2,
252-
repositoryID: 2,
252+
repositoryID: 1,
253253
commitRepoActionOptions: CommitRepoActionOptions{
254254
RefFullName: "refName",
255255
OldCommitID: "oldCommitID",
256-
NewCommitID: "newCommitID",
256+
NewCommitID: "65f1bf27bc3bf70f64657658635e66094edbcb4d",
257257
Commits: &PushCommits{
258258
avatars: make(map[string]string),
259259
Commits: []*PushCommit{
@@ -288,7 +288,7 @@ func TestCommitRepoAction(t *testing.T) {
288288
commitRepoActionOptions: CommitRepoActionOptions{
289289
RefFullName: git.TagPrefix + "v1.1",
290290
OldCommitID: git.EmptySHA,
291-
NewCommitID: "newCommitID",
291+
NewCommitID: "65f1bf27bc3bf70f64657658635e66094edbcb4d",
292292
Commits: &PushCommits{},
293293
},
294294
action: Action{

routers/api/v1/repo/hook.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,10 @@ func TestHook(ctx *context.APIContext) {
129129
Commits: []*api.PayloadCommit{
130130
convert.ToCommit(ctx.Repo.Repository, ctx.Repo.Commit),
131131
},
132-
Repo: ctx.Repo.Repository.APIFormat(models.AccessModeNone),
133-
Pusher: ctx.User.APIFormat(),
134-
Sender: ctx.User.APIFormat(),
132+
HeadCommit: convert.ToCommit(ctx.Repo.Repository, ctx.Repo.Commit),
133+
Repo: ctx.Repo.Repository.APIFormat(models.AccessModeNone),
134+
Pusher: ctx.User.APIFormat(),
135+
Sender: ctx.User.APIFormat(),
135136
}); err != nil {
136137
ctx.Error(500, "PrepareWebhook: ", err)
137138
return

vendor/code.gitea.io/sdk/gitea/hook.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)