Skip to content

Commit db7db12

Browse files
committed
Move ToHook to ../webhook to prevent an import cycle and a new package
as per @lunny
1 parent 8bb9921 commit db7db12

File tree

8 files changed

+86
-93
lines changed

8 files changed

+86
-93
lines changed

main.go

-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ import (
2222
_ "code.gitea.io/gitea/modules/markup/markdown"
2323
_ "code.gitea.io/gitea/modules/markup/orgmode"
2424

25-
// register webhook notifier
26-
_ "code.gitea.io/gitea/services/webhooknotifier"
27-
2825
"github.com/urfave/cli"
2926
)
3027

routers/api/v1/org/hook.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ package org
66
import (
77
"net/http"
88

9-
"code.gitea.io/gitea/models/webhook"
9+
webhook_model "code.gitea.io/gitea/models/webhook"
1010
"code.gitea.io/gitea/modules/context"
1111
api "code.gitea.io/gitea/modules/structs"
1212
"code.gitea.io/gitea/modules/web"
1313
"code.gitea.io/gitea/routers/api/v1/utils"
14-
"code.gitea.io/gitea/services/convert"
14+
webhook_service "code.gitea.io/gitea/services/webhook"
1515
)
1616

1717
// ListHooks list an organziation's webhooks
@@ -39,26 +39,26 @@ func ListHooks(ctx *context.APIContext) {
3939
// "200":
4040
// "$ref": "#/responses/HookList"
4141

42-
opts := &webhook.ListWebhookOptions{
42+
opts := &webhook_model.ListWebhookOptions{
4343
ListOptions: utils.GetListOptions(ctx),
4444
OrgID: ctx.Org.Organization.ID,
4545
}
4646

47-
count, err := webhook.CountWebhooksByOpts(opts)
47+
count, err := webhook_model.CountWebhooksByOpts(opts)
4848
if err != nil {
4949
ctx.InternalServerError(err)
5050
return
5151
}
5252

53-
orgHooks, err := webhook.ListWebhooksByOpts(ctx, opts)
53+
orgHooks, err := webhook_model.ListWebhooksByOpts(ctx, opts)
5454
if err != nil {
5555
ctx.InternalServerError(err)
5656
return
5757
}
5858

5959
hooks := make([]*api.Hook, len(orgHooks))
6060
for i, hook := range orgHooks {
61-
hooks[i], err = convert.ToHook(ctx.Org.Organization.AsUser().HomeLink(), hook)
61+
hooks[i], err = webhook_service.ToHook(ctx.Org.Organization.AsUser().HomeLink(), hook)
6262
if err != nil {
6363
ctx.InternalServerError(err)
6464
return
@@ -99,7 +99,7 @@ func GetHook(ctx *context.APIContext) {
9999
return
100100
}
101101

102-
apiHook, err := convert.ToHook(org.AsUser().HomeLink(), hook)
102+
apiHook, err := webhook_service.ToHook(org.AsUser().HomeLink(), hook)
103103
if err != nil {
104104
ctx.InternalServerError(err)
105105
return
@@ -200,8 +200,8 @@ func DeleteHook(ctx *context.APIContext) {
200200

201201
org := ctx.Org.Organization
202202
hookID := ctx.ParamsInt64(":id")
203-
if err := webhook.DeleteWebhookByOrgID(org.ID, hookID); err != nil {
204-
if webhook.IsErrWebhookNotExist(err) {
203+
if err := webhook_model.DeleteWebhookByOrgID(org.ID, hookID); err != nil {
204+
if webhook_model.IsErrWebhookNotExist(err) {
205205
ctx.NotFound()
206206
} else {
207207
ctx.Error(http.StatusInternalServerError, "DeleteWebhookByOrgID", err)

routers/api/v1/repo/hook.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func ListHooks(ctx *context.APIContext) {
6969

7070
apiHooks := make([]*api.Hook, len(hooks))
7171
for i := range hooks {
72-
apiHooks[i], err = convert.ToHook(ctx.Repo.RepoLink, hooks[i])
72+
apiHooks[i], err = webhook_service.ToHook(ctx.Repo.RepoLink, hooks[i])
7373
if err != nil {
7474
ctx.InternalServerError(err)
7575
return
@@ -116,7 +116,7 @@ func GetHook(ctx *context.APIContext) {
116116
if err != nil {
117117
return
118118
}
119-
apiHook, err := convert.ToHook(repo.RepoLink, hook)
119+
apiHook, err := webhook_service.ToHook(repo.RepoLink, hook)
120120
if err != nil {
121121
ctx.InternalServerError(err)
122122
return

routers/api/v1/utils/hook.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
api "code.gitea.io/gitea/modules/structs"
1515
"code.gitea.io/gitea/modules/util"
1616
webhook_module "code.gitea.io/gitea/modules/webhook"
17-
"code.gitea.io/gitea/services/convert"
1817
webhook_service "code.gitea.io/gitea/services/webhook"
1918
)
2019

@@ -99,7 +98,7 @@ func AddRepoHook(ctx *context.APIContext, form *api.CreateHookOption) {
9998
// toAPIHook converts the hook to its API representation.
10099
// If there is an error, write to `ctx` accordingly. Return (hook, ok)
101100
func toAPIHook(ctx *context.APIContext, repoLink string, hook *webhook.Webhook) (*api.Hook, bool) {
102-
apiHook, err := convert.ToHook(repoLink, hook)
101+
apiHook, err := webhook_service.ToHook(repoLink, hook)
103102
if err != nil {
104103
ctx.Error(http.StatusInternalServerError, "ToHook", err)
105104
return nil, false

services/convert/convert.go

-35
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,11 @@ import (
2222
repo_model "code.gitea.io/gitea/models/repo"
2323
"code.gitea.io/gitea/models/unit"
2424
user_model "code.gitea.io/gitea/models/user"
25-
webhook_model "code.gitea.io/gitea/models/webhook"
2625
"code.gitea.io/gitea/modules/git"
2726
"code.gitea.io/gitea/modules/log"
2827
api "code.gitea.io/gitea/modules/structs"
2928
"code.gitea.io/gitea/modules/util"
30-
webhook_module "code.gitea.io/gitea/modules/webhook"
3129
"code.gitea.io/gitea/services/gitdiff"
32-
"code.gitea.io/gitea/services/webhook"
3330
)
3431

3532
// ToEmail convert models.EmailAddress to api.Email
@@ -243,38 +240,6 @@ func ToGPGKeyEmail(email *user_model.EmailAddress) *api.GPGKeyEmail {
243240
}
244241
}
245242

246-
// ToHook convert models.Webhook to api.Hook
247-
func ToHook(repoLink string, w *webhook_model.Webhook) (*api.Hook, error) {
248-
config := map[string]string{
249-
"url": w.URL,
250-
"content_type": w.ContentType.Name(),
251-
}
252-
if w.Type == webhook_module.SLACK {
253-
s := webhook.GetSlackHook(w)
254-
config["channel"] = s.Channel
255-
config["username"] = s.Username
256-
config["icon_url"] = s.IconURL
257-
config["color"] = s.Color
258-
}
259-
260-
authorizationHeader, err := w.HeaderAuthorization()
261-
if err != nil {
262-
return nil, err
263-
}
264-
265-
return &api.Hook{
266-
ID: w.ID,
267-
Type: w.Type,
268-
URL: fmt.Sprintf("%s/settings/hooks/%d", repoLink, w.ID),
269-
Active: w.IsActive,
270-
Config: config,
271-
Events: w.EventsArray(),
272-
AuthorizationHeader: authorizationHeader,
273-
Updated: w.UpdatedUnix.AsTime(),
274-
Created: w.CreatedUnix.AsTime(),
275-
}, nil
276-
}
277-
278243
// ToGitHook convert git.Hook to api.GitHook
279244
func ToGitHook(h *git.Hook) *api.GitHook {
280245
return &api.GitHook{

services/webhook/general.go

+35
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ import (
99
"net/url"
1010
"strings"
1111

12+
webhook_model "code.gitea.io/gitea/models/webhook"
1213
"code.gitea.io/gitea/modules/setting"
1314
api "code.gitea.io/gitea/modules/structs"
1415
"code.gitea.io/gitea/modules/util"
16+
webhook_module "code.gitea.io/gitea/modules/webhook"
1517
)
1618

1719
type linkFormatter = func(string, string) string
@@ -223,3 +225,36 @@ func getIssueCommentPayloadInfo(p *api.IssueCommentPayload, linkFormatter linkFo
223225

224226
return text, issueTitle, color
225227
}
228+
229+
// ToHook convert models.Webhook to api.Hook
230+
// This function is not part of the convert package to prevent an import cycle
231+
func ToHook(repoLink string, w *webhook_model.Webhook) (*api.Hook, error) {
232+
config := map[string]string{
233+
"url": w.URL,
234+
"content_type": w.ContentType.Name(),
235+
}
236+
if w.Type == webhook_module.SLACK {
237+
s := GetSlackHook(w)
238+
config["channel"] = s.Channel
239+
config["username"] = s.Username
240+
config["icon_url"] = s.IconURL
241+
config["color"] = s.Color
242+
}
243+
244+
authorizationHeader, err := w.HeaderAuthorization()
245+
if err != nil {
246+
return nil, err
247+
}
248+
249+
return &api.Hook{
250+
ID: w.ID,
251+
Type: w.Type,
252+
URL: fmt.Sprintf("%s/settings/hooks/%d", repoLink, w.ID),
253+
Active: w.IsActive,
254+
Config: config,
255+
Events: w.EventsArray(),
256+
AuthorizationHeader: authorizationHeader,
257+
Updated: w.UpdatedUnix.AsTime(),
258+
Created: w.CreatedUnix.AsTime(),
259+
}, nil
260+
}

0 commit comments

Comments
 (0)