diff options
author | Unknwon <u@gogs.io> | 2017-03-19 17:44:46 -0400 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2017-03-19 17:44:46 -0400 |
commit | 2807274e2dca1780443bcbbab946b1551c4c88f5 (patch) | |
tree | 30c58a2e76e6e1338e8fd8e615d08bcd5b22d5bf /models | |
parent | 55a5ad5cdcbe6906f863d0b7f27d1ee500720416 (diff) |
repo/webhook: able to retrigger delivery history (#2187)
Diffstat (limited to 'models')
-rw-r--r-- | models/error.go | 20 | ||||
-rw-r--r-- | models/errors/webhook.go | 34 | ||||
-rw-r--r-- | models/webhook.go | 22 |
3 files changed, 53 insertions, 23 deletions
diff --git a/models/error.go b/models/error.go index 18df15ce..0e327d15 100644 --- a/models/error.go +++ b/models/error.go @@ -436,26 +436,6 @@ func (err ErrBranchNotExist) Error() string { return fmt.Sprintf("branch does not exist [name: %s]", err.Name) } -// __ __ ___. .__ __ -// / \ / \ ____\_ |__ | |__ ____ ____ | | __ -// \ \/\/ // __ \| __ \| | \ / _ \ / _ \| |/ / -// \ /\ ___/| \_\ \ Y ( <_> | <_> ) < -// \__/\ / \___ >___ /___| /\____/ \____/|__|_ \ -// \/ \/ \/ \/ \/ - -type ErrWebhookNotExist struct { - ID int64 -} - -func IsErrWebhookNotExist(err error) bool { - _, ok := err.(ErrWebhookNotExist) - return ok -} - -func (err ErrWebhookNotExist) Error() string { - return fmt.Sprintf("webhook does not exist [id: %d]", err.ID) -} - // .___ // | | ______ ________ __ ____ // | |/ ___// ___/ | \_/ __ \ diff --git a/models/errors/webhook.go b/models/errors/webhook.go new file mode 100644 index 00000000..76cf8cb4 --- /dev/null +++ b/models/errors/webhook.go @@ -0,0 +1,34 @@ +// Copyright 2017 The Gogs 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 errors + +import "fmt" + +type WebhookNotExist struct { + ID int64 +} + +func IsWebhookNotExist(err error) bool { + _, ok := err.(WebhookNotExist) + return ok +} + +func (err WebhookNotExist) Error() string { + return fmt.Sprintf("webhook does not exist [id: %d]", err.ID) +} + +type HookTaskNotExist struct { + HookID int64 + UUID string +} + +func IsHookTaskNotExist(err error) bool { + _, ok := err.(HookTaskNotExist) + return ok +} + +func (err HookTaskNotExist) Error() string { + return fmt.Sprintf("hook task does not exist [hook_id: %d, uuid: %s]", err.HookID, err.UUID) +} diff --git a/models/webhook.go b/models/webhook.go index ad7a5a3d..19f2ae18 100644 --- a/models/webhook.go +++ b/models/webhook.go @@ -21,6 +21,7 @@ import ( api "github.com/gogits/go-gogs-client" + "github.com/gogits/gogs/models/errors" "github.com/gogits/gogs/modules/httplib" "github.com/gogits/gogs/modules/setting" "github.com/gogits/gogs/modules/sync" @@ -241,7 +242,7 @@ func getWebhook(bean *Webhook) (*Webhook, error) { if err != nil { return nil, err } else if !has { - return nil, ErrWebhookNotExist{bean.ID} + return nil, errors.WebhookNotExist{bean.ID} } return bean, nil } @@ -494,6 +495,21 @@ func createHookTask(e Engine, t *HookTask) error { return err } +// GetHookTaskOfWebhookByUUID returns hook task of given webhook by UUID. +func GetHookTaskOfWebhookByUUID(webhookID int64, uuid string) (*HookTask, error) { + hookTask := &HookTask{ + HookID: webhookID, + UUID: uuid, + } + has, err := x.Get(hookTask) + if err != nil { + return nil, err + } else if !has { + return nil, errors.HookTaskNotExist{webhookID, uuid} + } + return hookTask, nil +} + // UpdateHookTask updates information of hook task. func UpdateHookTask(t *HookTask) error { _, err := x.Id(t.ID).AllCols().Update(t) @@ -704,7 +720,7 @@ func (t *HookTask) deliver() { // TODO: shoot more hooks at same time. func DeliverHooks() { tasks := make([]*HookTask, 0, 10) - x.Where("is_delivered=?", false).Iterate(new(HookTask), + x.Where("is_delivered = ?", false).Iterate(new(HookTask), func(idx int, bean interface{}) error { t := bean.(*HookTask) t.deliver() @@ -725,7 +741,7 @@ func DeliverHooks() { HookQueue.Remove(repoID) tasks = make([]*HookTask, 0, 5) - if err := x.Where("repo_id=? AND is_delivered=?", repoID, false).Find(&tasks); err != nil { + if err := x.Where("repo_id = ?", repoID).And("is_delivered = ?", false).Find(&tasks); err != nil { log.Error(4, "Get repository [%s] hook tasks: %v", repoID, err) continue } |