loading up the forgejo repo on tangled to test page performance
at forgejo 83 lines 2.4 kB view raw
1// Copyright 2021 The Gitea Authors. All rights reserved. 2// SPDX-License-Identifier: MIT 3 4package webhook 5 6import ( 7 "context" 8 "fmt" 9 10 "forgejo.org/models/db" 11) 12 13// GetDefaultWebhooks returns all admin-default webhooks. 14func GetDefaultWebhooks(ctx context.Context) ([]*Webhook, error) { 15 return getAdminWebhooks(ctx, false) 16} 17 18// GetSystemOrDefaultWebhook returns admin system or default webhook by given ID. 19func GetSystemOrDefaultWebhook(ctx context.Context, id int64) (*Webhook, error) { 20 webhook := &Webhook{ID: id} 21 has, err := db.GetEngine(ctx). 22 Where("repo_id=? AND owner_id=?", 0, 0). 23 Get(webhook) 24 if err != nil { 25 return nil, err 26 } else if !has { 27 return nil, ErrWebhookNotExist{ID: id} 28 } 29 return webhook, nil 30} 31 32// GetSystemWebhooks returns all admin system webhooks. 33func GetSystemWebhooks(ctx context.Context, onlyActive bool) ([]*Webhook, error) { 34 return getAdminWebhooks(ctx, true, onlyActive) 35} 36 37func getAdminWebhooks(ctx context.Context, systemWebhooks bool, onlyActive ...bool) ([]*Webhook, error) { 38 webhooks := make([]*Webhook, 0, 5) 39 if len(onlyActive) > 0 && onlyActive[0] { 40 return webhooks, db.GetEngine(ctx). 41 Where("repo_id=? AND owner_id=? AND is_system_webhook=? AND is_active = ?", 0, 0, systemWebhooks, true). 42 OrderBy("id"). 43 Find(&webhooks) 44 } 45 return webhooks, db.GetEngine(ctx). 46 Where("repo_id=? AND owner_id=? AND is_system_webhook=?", 0, 0, systemWebhooks). 47 OrderBy("id"). 48 Find(&webhooks) 49} 50 51// DeleteDefaultSystemWebhook deletes an admin-configured default or system webhook (where Org and Repo ID both 0) 52func DeleteDefaultSystemWebhook(ctx context.Context, id int64) error { 53 return db.WithTx(ctx, func(ctx context.Context) error { 54 count, err := db.GetEngine(ctx). 55 Where("repo_id=? AND owner_id=?", 0, 0). 56 Delete(&Webhook{ID: id}) 57 if err != nil { 58 return err 59 } else if count == 0 { 60 return ErrWebhookNotExist{ID: id} 61 } 62 63 _, err = db.DeleteByBean(ctx, &HookTask{HookID: id}) 64 return err 65 }) 66} 67 68// CopyDefaultWebhooksToRepo creates copies of the default webhooks in a new repo 69func CopyDefaultWebhooksToRepo(ctx context.Context, repoID int64) error { 70 ws, err := GetDefaultWebhooks(ctx) 71 if err != nil { 72 return fmt.Errorf("GetDefaultWebhooks: %v", err) 73 } 74 75 for _, w := range ws { 76 w.ID = 0 77 w.RepoID = repoID 78 if err := CreateWebhook(ctx, w); err != nil { 79 return fmt.Errorf("CreateWebhook: %v", err) 80 } 81 } 82 return nil 83}