diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2020-12-08 18:41:14 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-08 11:41:14 +0100 |
commit | 42354dfe45fa0cabb59674b896c44a55a56cf163 (patch) | |
tree | 86b859881da6ef6bf288183933d7bc519dedc3d4 /models | |
parent | 4d66ee1f74799196cbdbfd925c3f95e552584b42 (diff) | |
download | gitea-42354dfe45fa0cabb59674b896c44a55a56cf163.tar.gz gitea-42354dfe45fa0cabb59674b896c44a55a56cf163.zip |
Move webhook type from int to string (#13664)
* Move webhook type from int to string
* rename webhook_services
* finish refactor
* Fix merge
* Ignore unnecessary ci
Co-authored-by: 6543 <6543@obermui.de>
Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'models')
-rw-r--r-- | models/migrations/migrations.go | 2 | ||||
-rw-r--r-- | models/migrations/v161.go | 59 | ||||
-rw-r--r-- | models/webhook.go | 70 | ||||
-rw-r--r-- | models/webhook_test.go | 24 |
4 files changed, 73 insertions, 82 deletions
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index d1f2c750e3..b58c0551b5 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -265,6 +265,8 @@ var migrations = []Migration{ NewMigration("update reactions constraint", updateReactionConstraint), // v160 -> v161 NewMigration("Add block on official review requests branch protection", addBlockOnOfficialReviewRequests), + // v161 -> v162 + NewMigration("Convert task type from int to string", convertTaskTypeToString), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v161.go b/models/migrations/v161.go new file mode 100644 index 0000000000..127dca1500 --- /dev/null +++ b/models/migrations/v161.go @@ -0,0 +1,59 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package migrations + +import ( + "xorm.io/xorm" +) + +func convertTaskTypeToString(x *xorm.Engine) error { + const ( + GOGS int = iota + 1 + SLACK + GITEA + DISCORD + DINGTALK + TELEGRAM + MSTEAMS + FEISHU + MATRIX + ) + + var hookTaskTypes = map[int]string{ + GITEA: "gitea", + GOGS: "gogs", + SLACK: "slack", + DISCORD: "discord", + DINGTALK: "dingtalk", + TELEGRAM: "telegram", + MSTEAMS: "msteams", + FEISHU: "feishu", + MATRIX: "matrix", + } + + type HookTask struct { + Typ string `xorm:"char(16) index"` + } + if err := x.Sync2(new(HookTask)); err != nil { + return err + } + + for i, s := range hookTaskTypes { + if _, err := x.Exec("UPDATE hook_task set typ = ? where type=?", s, i); err != nil { + return err + } + } + + sess := x.NewSession() + defer sess.Close() + if err := sess.Begin(); err != nil { + return err + } + if err := dropTableColumns(sess, "hook_task", "type"); err != nil { + return err + } + + return sess.Commit() +} diff --git a/models/webhook.go b/models/webhook.go index 54cd9b6565..39122808fe 100644 --- a/models/webhook.go +++ b/models/webhook.go @@ -547,69 +547,21 @@ func copyDefaultWebhooksToRepo(e Engine, repoID int64) error { // \/ \/ \/ \/ \/ // HookTaskType is the type of an hook task -type HookTaskType int +type HookTaskType string // Types of hook tasks const ( - GOGS HookTaskType = iota + 1 - SLACK - GITEA - DISCORD - DINGTALK - TELEGRAM - MSTEAMS - FEISHU - MATRIX + GITEA HookTaskType = "gitea" + GOGS HookTaskType = "gogs" + SLACK HookTaskType = "slack" + DISCORD HookTaskType = "discord" + DINGTALK HookTaskType = "dingtalk" + TELEGRAM HookTaskType = "telegram" + MSTEAMS HookTaskType = "msteams" + FEISHU HookTaskType = "feishu" + MATRIX HookTaskType = "matrix" ) -var hookTaskTypes = map[string]HookTaskType{ - "gitea": GITEA, - "gogs": GOGS, - "slack": SLACK, - "discord": DISCORD, - "dingtalk": DINGTALK, - "telegram": TELEGRAM, - "msteams": MSTEAMS, - "feishu": FEISHU, - "matrix": MATRIX, -} - -// ToHookTaskType returns HookTaskType by given name. -func ToHookTaskType(name string) HookTaskType { - return hookTaskTypes[name] -} - -// Name returns the name of an hook task type -func (t HookTaskType) Name() string { - switch t { - case GITEA: - return "gitea" - case GOGS: - return "gogs" - case SLACK: - return "slack" - case DISCORD: - return "discord" - case DINGTALK: - return "dingtalk" - case TELEGRAM: - return "telegram" - case MSTEAMS: - return "msteams" - case FEISHU: - return "feishu" - case MATRIX: - return "matrix" - } - return "" -} - -// IsValidHookTaskType returns true if given name is a valid hook task type. -func IsValidHookTaskType(name string) bool { - _, ok := hookTaskTypes[name] - return ok -} - // HookEventType is the type of an hook event type HookEventType string @@ -687,7 +639,7 @@ type HookTask struct { RepoID int64 `xorm:"INDEX"` HookID int64 UUID string - Type HookTaskType + Typ HookTaskType URL string `xorm:"TEXT"` Signature string `xorm:"TEXT"` api.Payloader `xorm:"-"` diff --git a/models/webhook_test.go b/models/webhook_test.go index 5ee7f9159b..20acb4e93c 100644 --- a/models/webhook_test.go +++ b/models/webhook_test.go @@ -185,28 +185,6 @@ func TestDeleteWebhookByOrgID(t *testing.T) { assert.True(t, IsErrWebhookNotExist(err)) } -func TestToHookTaskType(t *testing.T) { - assert.Equal(t, GOGS, ToHookTaskType("gogs")) - assert.Equal(t, SLACK, ToHookTaskType("slack")) - assert.Equal(t, GITEA, ToHookTaskType("gitea")) - assert.Equal(t, TELEGRAM, ToHookTaskType("telegram")) -} - -func TestHookTaskType_Name(t *testing.T) { - assert.Equal(t, "gogs", GOGS.Name()) - assert.Equal(t, "slack", SLACK.Name()) - assert.Equal(t, "gitea", GITEA.Name()) - assert.Equal(t, "telegram", TELEGRAM.Name()) -} - -func TestIsValidHookTaskType(t *testing.T) { - assert.True(t, IsValidHookTaskType("gogs")) - assert.True(t, IsValidHookTaskType("slack")) - assert.True(t, IsValidHookTaskType("gitea")) - assert.True(t, IsValidHookTaskType("telegram")) - assert.False(t, IsValidHookTaskType("invalid")) -} - func TestHookTasks(t *testing.T) { assert.NoError(t, PrepareTestDatabase()) hookTasks, err := HookTasks(1, 1) @@ -225,7 +203,7 @@ func TestCreateHookTask(t *testing.T) { hookTask := &HookTask{ RepoID: 3, HookID: 3, - Type: GITEA, + Typ: GITEA, URL: "http://www.example.com/unit_test", Payloader: &api.PushPayload{}, } |