add more webhooks

This commit is contained in:
Lunny Xiao 2018-05-22 19:37:18 +08:00
parent 81661c2b47
commit 9ee330c0c7
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
18 changed files with 261 additions and 99 deletions

View File

@ -10,7 +10,6 @@ import (
"strings"
"code.gitea.io/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
@ -195,24 +194,6 @@ func CreateRelease(gitRepo *git.Repository, rel *Release, attachmentUUIDs []stri
return err
}
if !rel.IsDraft {
if err := rel.LoadAttributes(); err != nil {
log.Error(2, "LoadAttributes: %v", err)
} else {
mode, _ := AccessLevel(rel.PublisherID, rel.Repo)
if err := PrepareWebhooks(rel.Repo, HookEventRelease, &api.ReleasePayload{
Action: api.HookReleasePublished,
Release: rel.APIFormat(),
Repository: rel.Repo.APIFormat(mode),
Sender: rel.Publisher.APIFormat(),
}); err != nil {
log.Error(2, "PrepareWebhooks: %v", err)
} else {
go HookQueue.Add(rel.Repo.ID)
}
}
}
return nil
}
@ -391,38 +372,26 @@ func UpdateRelease(doer *User, gitRepo *git.Repository, rel *Release, attachment
err = addReleaseAttachments(rel.ID, attachmentUUIDs)
mode, _ := accessLevel(x, doer.ID, rel.Repo)
if err1 := PrepareWebhooks(rel.Repo, HookEventRelease, &api.ReleasePayload{
Action: api.HookReleaseUpdated,
Release: rel.APIFormat(),
Repository: rel.Repo.APIFormat(mode),
Sender: rel.Publisher.APIFormat(),
}); err1 != nil {
log.Error(2, "PrepareWebhooks: %v", err)
} else {
go HookQueue.Add(rel.Repo.ID)
}
return err
}
// DeleteReleaseByID deletes a release and corresponding Git tag by given ID.
func DeleteReleaseByID(id int64, u *User, delTag bool) error {
func DeleteReleaseByID(id int64, u *User, delTag bool) (*Release, error) {
rel, err := GetReleaseByID(id)
if err != nil {
return fmt.Errorf("GetReleaseByID: %v", err)
return nil, fmt.Errorf("GetReleaseByID: %v", err)
}
repo, err := GetRepositoryByID(rel.RepoID)
if err != nil {
return fmt.Errorf("GetRepositoryByID: %v", err)
return nil, fmt.Errorf("GetRepositoryByID: %v", err)
}
has, err := HasAccess(u.ID, repo, AccessModeWrite)
if err != nil {
return fmt.Errorf("HasAccess: %v", err)
return nil, fmt.Errorf("HasAccess: %v", err)
} else if !has {
return fmt.Errorf("DeleteReleaseByID: permission denied")
return nil, fmt.Errorf("DeleteReleaseByID: permission denied")
}
if delTag {
@ -430,11 +399,11 @@ func DeleteReleaseByID(id int64, u *User, delTag bool) error {
fmt.Sprintf("DeleteReleaseByID (git tag -d): %d", rel.ID),
"git", "tag", "-d", rel.TagName)
if err != nil && !strings.Contains(stderr, "not found") {
return fmt.Errorf("git tag -d: %v - %s", err, stderr)
return nil, fmt.Errorf("git tag -d: %v - %s", err, stderr)
}
if _, err = x.ID(rel.ID).Delete(new(Release)); err != nil {
return fmt.Errorf("Delete: %v", err)
return nil, fmt.Errorf("Delete: %v", err)
}
} else {
rel.IsTag = true
@ -444,28 +413,12 @@ func DeleteReleaseByID(id int64, u *User, delTag bool) error {
rel.Note = ""
if _, err = x.ID(rel.ID).AllCols().Update(rel); err != nil {
return fmt.Errorf("Update: %v", err)
return nil, fmt.Errorf("Update: %v", err)
}
}
rel.Repo = repo
if err = rel.LoadAttributes(); err != nil {
return fmt.Errorf("LoadAttributes: %v", err)
}
mode, _ := accessLevel(x, u.ID, rel.Repo)
if err := PrepareWebhooks(rel.Repo, HookEventRelease, &api.ReleasePayload{
Action: api.HookReleaseDeleted,
Release: rel.APIFormat(),
Repository: rel.Repo.APIFormat(mode),
Sender: rel.Publisher.APIFormat(),
}); err != nil {
log.Error(2, "PrepareWebhooks: %v", err)
} else {
go HookQueue.Add(rel.Repo.ID)
}
return nil
return rel, nil
}
// SyncReleasesWithTags synchronizes release table with repository tags

View File

@ -1934,19 +1934,6 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
return fmt.Errorf("Commit: %v", err)
}
if org.IsOrganization() {
if err = PrepareWebhooks(repo, HookEventRepository, &api.RepositoryPayload{
Action: api.HookRepoDeleted,
Repository: repo.APIFormat(AccessModeOwner),
Organization: org.APIFormat(),
Sender: doer.APIFormat(),
}); err != nil {
return err
}
go HookQueue.Add(repo.ID)
}
DeleteRepoFromIndexer(repo)
return nil
}
@ -2145,7 +2132,7 @@ func gatherMissingRepoRecords() ([]*Repository, error) {
}
// DeleteMissingRepositories deletes all repository records that lost Git files.
func DeleteMissingRepositories(doer *User) error {
func DeleteMissingRepositories(doer *User, onDeleted func(doer *User, repo *Repository)) error {
repos, err := gatherMissingRepoRecords()
if err != nil {
return fmt.Errorf("gatherMissingRepoRecords: %v", err)
@ -2161,6 +2148,8 @@ func DeleteMissingRepositories(doer *User) error {
if err2 := CreateRepositoryNotice(fmt.Sprintf("DeleteRepository [%d]: %v", repo.ID, err)); err2 != nil {
return fmt.Errorf("CreateRepositoryNotice: %v", err)
}
} else {
onDeleted(doer, repo)
}
}
return nil
@ -2462,19 +2451,6 @@ func ForkRepository(doer, u *User, oldRepo *Repository, name, desc string) (_ *R
return nil, err
}
oldMode, _ := AccessLevel(doer.ID, oldRepo)
mode, _ := AccessLevel(doer.ID, repo)
if err = PrepareWebhooks(oldRepo, HookEventFork, &api.ForkPayload{
Forkee: oldRepo.APIFormat(oldMode),
Repo: repo.APIFormat(mode),
Sender: doer.APIFormat(),
}); err != nil {
log.Error(2, "PrepareWebhooks [repo_id: %d]: %v", oldRepo.ID, err)
} else {
go HookQueue.Add(oldRepo.ID)
}
if err = repo.UpdateSize(); err != nil {
log.Error(4, "Failed to update size for repository: %v", err)
}

View File

@ -21,7 +21,7 @@ var (
)
// NewNotifier returns a new actionNotifier
func NewNotifier() *actionNotifier {
func NewNotifier() base.Notifier {
return &actionNotifier{}
}
@ -79,3 +79,20 @@ func (r *actionNotifier) NotifyDeleteComment(doer *models.User, c *models.Commen
log.Error(4, "UpdateCommentAction [%d]: %v", c.ID, err)
}
}
func (r *actionNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
}
func (r *actionNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
}
func (r *actionNotifier) NotifyNewRelease(rel *models.Release) {
}
func (r *actionNotifier) NotifyUpdateRelease(doer *models.User, rel *models.Release) {
}
func (r *actionNotifier) NotifyDeleteRelease(doer *models.User, rel *models.Release) {
}

View File

@ -20,4 +20,9 @@ type Notifier interface {
NotifyNewPullRequest(*models.PullRequest)
NotifyUpdateComment(*models.User, *models.Comment, string)
NotifyDeleteComment(*models.User, *models.Comment)
NotifyDeleteRepository(doer *models.User, repo *models.Repository)
NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository)
NotifyNewRelease(rel *models.Release)
NotifyUpdateRelease(doer *models.User, rel *models.Release)
NotifyDeleteRelease(doer *models.User, rel *models.Release)
}

View File

@ -18,7 +18,7 @@ var (
)
// NewNotifier create a new indexerNotifier notifier
func NewNotifier() *indexerNotifier {
func NewNotifier() base.Notifier {
return &indexerNotifier{}
}
@ -55,3 +55,20 @@ func (r *indexerNotifier) NotifyDeleteComment(doer *models.User, comment *models
models.UpdateIssueIndexer(comment.IssueID)
}
}
func (r *indexerNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
models.DeleteRepoFromIndexer(repo)
}
func (r *indexerNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
}
func (r *indexerNotifier) NotifyNewRelease(rel *models.Release) {
}
func (r *indexerNotifier) NotifyUpdateRelease(doer *models.User, rel *models.Release) {
}
func (r *indexerNotifier) NotifyDeleteRelease(doer *models.User, rel *models.Release) {
}

View File

@ -19,7 +19,7 @@ var (
)
// NewNotifier create a new mailNotifier notifier
func NewNotifier() *mailNotifier {
func NewNotifier() base.Notifier {
return &mailNotifier{}
}
@ -57,3 +57,18 @@ func (m *mailNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment,
func (m *mailNotifier) NotifyDeleteComment(doer *models.User, c *models.Comment) {
}
func (m *mailNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
}
func (m *mailNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
}
func (m *mailNotifier) NotifyNewRelease(rel *models.Release) {
}
func (m *mailNotifier) NotifyUpdateRelease(doer *models.User, rel *models.Release) {
}
func (m *mailNotifier) NotifyDeleteRelease(doer *models.User, rel *models.Release) {
}

View File

@ -76,9 +76,44 @@ func NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string
}
}
// NotifyDeleteComment notifies update comment to notifiers
// NotifyDeleteComment notifies delete comment to notifiers
func NotifyDeleteComment(doer *models.User, c *models.Comment) {
for _, notifier := range notifiers {
notifier.NotifyDeleteComment(doer, c)
}
}
// NotifyDeleteRepository notifies delete repository to notifiers
func NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
for _, notifier := range notifiers {
notifier.NotifyDeleteRepository(doer, repo)
}
}
// NotifyForkRepository notifies fork repository to notifiers
func NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
for _, notifier := range notifiers {
notifier.NotifyForkRepository(doer, oldRepo, repo)
}
}
// NotifyNewRelease notifies new release to notifiers
func NotifyNewRelease(rel *models.Release) {
for _, notifier := range notifiers {
notifier.NotifyNewRelease(rel)
}
}
// NotifyUpdateRelease notifies update release to notifiers
func NotifyUpdateRelease(doer *models.User, rel *models.Release) {
for _, notifier := range notifiers {
notifier.NotifyUpdateRelease(doer, rel)
}
}
// NotifyDeleteRelease notifies delete release to notifiers
func NotifyDeleteRelease(doer *models.User, rel *models.Release) {
for _, notifier := range notifiers {
notifier.NotifyDeleteRelease(doer, rel)
}
}

View File

@ -27,7 +27,7 @@ var (
)
// NewNotifier create a new notificationService notifier
func NewNotifier() *notificationService {
func NewNotifier() base.Notifier {
return &notificationService{
issueQueue: make(chan issueNotificationOpts, 100),
}
@ -81,3 +81,18 @@ func (ns *notificationService) NotifyUpdateComment(doer *models.User, c *models.
func (ns *notificationService) NotifyDeleteComment(doer *models.User, c *models.Comment) {
}
func (ns *notificationService) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
}
func (ns *notificationService) NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
}
func (ns *notificationService) NotifyNewRelease(rel *models.Release) {
}
func (ns *notificationService) NotifyUpdateRelease(doer *models.User, rel *models.Release) {
}
func (ns *notificationService) NotifyDeleteRelease(doer *models.User, rel *models.Release) {
}

View File

@ -22,7 +22,7 @@ var (
)
// NewNotifier returns a new webhookNotifier
func NewNotifier() *webhookNotifier {
func NewNotifier() base.Notifier {
return &webhookNotifier{}
}
@ -171,3 +171,94 @@ func (w *webhookNotifier) NotifyDeleteComment(doer *models.User, comment *models
go models.HookQueue.Add(comment.Issue.Repo.ID)
}
}
func (w *webhookNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
org, err := models.GetUserByID(repo.OwnerID)
if err != nil {
log.Error(2, "GetUserByID [repo_id: %d]: %v", repo.ID, err)
return
}
if org.IsOrganization() {
if err := models.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{
Action: api.HookRepoDeleted,
Repository: repo.APIFormat(models.AccessModeOwner),
Organization: org.APIFormat(),
Sender: doer.APIFormat(),
}); err != nil {
log.Error(2, "PrepareWebhooks [repo_id: %d]: %v", repo.ID, err)
} else {
go models.HookQueue.Add(repo.ID)
}
}
}
func (w *webhookNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
oldMode, _ := models.AccessLevel(doer.ID, oldRepo)
mode, _ := models.AccessLevel(doer.ID, repo)
if err := models.PrepareWebhooks(oldRepo, models.HookEventFork, &api.ForkPayload{
Forkee: oldRepo.APIFormat(oldMode),
Repo: repo.APIFormat(mode),
Sender: doer.APIFormat(),
}); err != nil {
log.Error(2, "PrepareWebhooks [repo_id: %d]: %v", oldRepo.ID, err)
} else {
go models.HookQueue.Add(oldRepo.ID)
}
}
func (w *webhookNotifier) NotifyNewRelease(rel *models.Release) {
if rel.IsDraft {
return
}
if err := rel.LoadAttributes(); err != nil {
log.Error(2, "LoadAttributes: %v", err)
} else {
mode, _ := models.AccessLevel(rel.PublisherID, rel.Repo)
if err := models.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{
Action: api.HookReleasePublished,
Release: rel.APIFormat(),
Repository: rel.Repo.APIFormat(mode),
Sender: rel.Publisher.APIFormat(),
}); err != nil {
log.Error(2, "PrepareWebhooks: %v", err)
} else {
go models.HookQueue.Add(rel.Repo.ID)
}
}
}
func (w *webhookNotifier) NotifyUpdateRelease(doer *models.User, rel *models.Release) {
mode, _ := models.AccessLevel(doer.ID, rel.Repo)
if err := models.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{
Action: api.HookReleaseUpdated,
Release: rel.APIFormat(),
Repository: rel.Repo.APIFormat(mode),
Sender: rel.Publisher.APIFormat(),
}); err != nil {
log.Error(2, "PrepareWebhooks: %v", err)
} else {
go models.HookQueue.Add(rel.Repo.ID)
}
}
func (w *webhookNotifier) NotifyDeleteRelease(doer *models.User, rel *models.Release) {
if err := rel.LoadAttributes(); err != nil {
log.Error(2, "rel.LoadAttributes: %v", err)
return
}
mode, _ := models.AccessLevel(doer.ID, rel.Repo)
if err := models.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{
Action: api.HookReleaseDeleted,
Release: rel.APIFormat(),
Repository: rel.Repo.APIFormat(mode),
Sender: rel.Publisher.APIFormat(),
}); err != nil {
log.Error(2, "PrepareWebhooks: %v", err)
} else {
go models.HookQueue.Add(rel.Repo.ID)
}
}

View File

@ -10,15 +10,16 @@ import (
"strings"
"time"
"github.com/Unknwon/com"
"gopkg.in/macaron.v1"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/cron"
"code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/setting"
"github.com/Unknwon/com"
"gopkg.in/macaron.v1"
)
const (
@ -146,7 +147,7 @@ func Dashboard(ctx *context.Context) {
err = models.DeleteRepositoryArchives()
case cleanMissingRepos:
success = ctx.Tr("admin.dashboard.delete_missing_repos_success")
err = models.DeleteMissingRepositories(ctx.User)
err = models.DeleteMissingRepositories(ctx.User, notification.NotifyDeleteRepository)
case gitGCRepos:
success = ctx.Tr("admin.dashboard.git_gc_repos_success")
err = models.GitGcRepos()

View File

@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/routers"
)
@ -42,6 +43,7 @@ func DeleteRepo(ctx *context.Context) {
ctx.ServerError("DeleteRepository", err)
return
}
notification.NotifyDeleteRepository(ctx.User, repo)
log.Trace("Repository deleted: %s/%s", repo.MustOwner().Name, repo.Name)
ctx.Flash.Success(ctx.Tr("repo.settings.deletion_success"))

View File

@ -7,6 +7,7 @@ package repo
import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/routers/api/v1/utils"
api "code.gitea.io/sdk/gitea"
@ -104,5 +105,7 @@ func CreateFork(ctx *context.APIContext, form api.CreateForkOption) {
ctx.Error(500, "ForkRepository", err)
return
}
notification.NotifyForkRepository(ctx.User, repo, fork)
ctx.JSON(202, fork.APIFormat(models.AccessModeOwner))
}

View File

@ -7,6 +7,7 @@ package repo
import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/notification"
api "code.gitea.io/sdk/gitea"
)
@ -156,6 +157,7 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
}
return
}
notification.NotifyNewRelease(rel)
} else {
if !rel.IsTag {
ctx.Status(409)
@ -175,6 +177,8 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
ctx.ServerError("UpdateRelease", err)
return
}
notification.NotifyUpdateRelease(ctx.User, rel)
}
ctx.JSON(201, rel.APIFormat())
}
@ -250,6 +254,8 @@ func EditRelease(ctx *context.APIContext, form api.EditReleaseOption) {
return
}
notification.NotifyUpdateRelease(ctx.User, rel)
rel, err = models.GetReleaseByID(id)
if err != nil {
ctx.Error(500, "GetReleaseByID", err)
@ -301,9 +307,11 @@ func DeleteRelease(ctx *context.APIContext) {
ctx.Status(404)
return
}
if err := models.DeleteReleaseByID(id, ctx.User, false); err != nil {
rel, err = models.DeleteReleaseByID(id, ctx.User, false)
if err != nil {
ctx.Error(500, "DeleteReleaseByID", err)
return
}
notification.NotifyDeleteRelease(ctx.User, rel)
ctx.Status(204)
}

View File

@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/modules/auth"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/api/v1/convert"
@ -186,6 +187,8 @@ func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateR
if repo != nil {
if err = models.DeleteRepository(ctx.User, ctx.User.ID, repo.ID); err != nil {
log.Error(4, "DeleteRepository: %v", err)
} else {
notification.NotifyDeleteRepository(ctx.User, repo)
}
}
ctx.Error(500, "CreateRepository", err)
@ -359,6 +362,8 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) {
if repo != nil {
if errDelete := models.DeleteRepository(ctx.User, ctxUser.ID, repo.ID); errDelete != nil {
log.Error(4, "DeleteRepository: %v", errDelete)
} else {
notification.NotifyDeleteRepository(ctx.User, repo)
}
}
ctx.Error(500, "MigrateRepository", err)
@ -476,6 +481,8 @@ func Delete(ctx *context.APIContext) {
return
}
notification.NotifyDeleteRepository(ctx.User, repo)
log.Trace("Repository deleted: %s/%s", owner.Name, repo.Name)
ctx.Status(204)
}

View File

@ -203,6 +203,8 @@ func ForkPost(ctx *context.Context, form auth.CreateRepoForm) {
return
}
notification.NotifyForkRepository(ctx.User, forkRepo, repo)
log.Trace("Repository forked[%d]: %s/%s", forkRepo.ID, ctxUser.Name, repo.Name)
ctx.Redirect(setting.AppSubURL + "/" + ctxUser.Name + "/" + repo.Name)
}

View File

@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup/markdown"
"code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/modules/setting"
"github.com/Unknwon/paginater"
@ -182,6 +183,7 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) {
}
return
}
notification.NotifyNewRelease(rel)
} else {
if !rel.IsTag {
ctx.Data["Err_TagName"] = true
@ -202,6 +204,8 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) {
ctx.ServerError("UpdateRelease", err)
return
}
notification.NotifyUpdateRelease(ctx.User, rel)
}
log.Trace("Release created: %s/%s:%s", ctx.User.LowerName, ctx.Repo.Repository.Name, form.TagName)
@ -280,14 +284,19 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) {
ctx.ServerError("UpdateRelease", err)
return
}
notification.NotifyUpdateRelease(ctx.User, rel)
ctx.Redirect(ctx.Repo.RepoLink + "/releases")
}
// DeleteRelease delete a release
func DeleteRelease(ctx *context.Context) {
if err := models.DeleteReleaseByID(ctx.QueryInt64("id"), ctx.User, true); err != nil {
rel, err := models.DeleteReleaseByID(ctx.QueryInt64("id"), ctx.User, true)
if err != nil {
ctx.Flash.Error("DeleteReleaseByID: " + err.Error())
} else {
notification.NotifyDeleteRelease(ctx.User, rel)
ctx.Flash.Success(ctx.Tr("repo.release.deletion_success"))
}

View File

@ -10,17 +10,17 @@ import (
"path"
"strings"
"github.com/Unknwon/com"
"code.gitea.io/git"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/auth"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/git"
"github.com/Unknwon/com"
)
const (
@ -184,6 +184,8 @@ func CreatePost(ctx *context.Context, form auth.CreateRepoForm) {
if repo != nil {
if errDelete := models.DeleteRepository(ctx.User, ctxUser.ID, repo.ID); errDelete != nil {
log.Error(4, "DeleteRepository: %v", errDelete)
} else {
notification.NotifyDeleteRepository(ctx.User, repo)
}
}
@ -262,6 +264,8 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
if repo != nil {
if errDelete := models.DeleteRepository(ctx.User, ctxUser.ID, repo.ID); errDelete != nil {
log.Error(4, "DeleteRepository: %v", errDelete)
} else {
notification.NotifyDeleteRepository(ctx.User, repo)
}
}

View File

@ -15,6 +15,7 @@ import (
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/utils"
@ -320,6 +321,7 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
ctx.ServerError("DeleteRepository", err)
return
}
notification.NotifyDeleteRepository(ctx.User, repo)
log.Trace("Repository deleted: %s/%s", ctx.Repo.Owner.Name, repo.Name)
ctx.Flash.Success(ctx.Tr("repo.settings.deletion_success"))