From 997bb4e806d6fe137815e3530181e165bac00153 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 15 Oct 2019 11:46:51 +0800 Subject: [PATCH 1/4] move sync mirror actions to mirror service --- go.mod | 2 + models/action.go | 74 --------------------------------- services/mirror/mirror.go | 6 +-- services/mirror/sync.go | 87 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 77 deletions(-) create mode 100644 services/mirror/sync.go diff --git a/go.mod b/go.mod index cdf660c0d34f8..7cc9c1ba5e913 100644 --- a/go.mod +++ b/go.mod @@ -70,6 +70,8 @@ require ( github.com/mattn/go-sqlite3 v1.11.0 github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75 github.com/microcosm-cc/bluemonday v0.0.0-20161012083705-f77f16ffc87a + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae // indirect github.com/msteinert/pam v0.0.0-20151204160544-02ccfbfaf0cc github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 diff --git a/models/action.go b/models/action.go index 2d2999f8809a4..b651c658d53d6 100644 --- a/models/action.go +++ b/models/action.go @@ -6,7 +6,6 @@ package models import ( - "encoding/json" "fmt" "html" "path" @@ -610,79 +609,6 @@ func MergePullRequestAction(actUser *User, repo *Repository, pull *Issue) error return mergePullRequestAction(x, actUser, repo, pull) } -func mirrorSyncAction(e Engine, opType ActionType, repo *Repository, refName string, data []byte) error { - if err := notifyWatchers(e, &Action{ - ActUserID: repo.OwnerID, - ActUser: repo.MustOwner(), - OpType: opType, - RepoID: repo.ID, - Repo: repo, - IsPrivate: repo.IsPrivate, - RefName: refName, - Content: string(data), - }); err != nil { - return fmt.Errorf("notifyWatchers: %v", err) - } - - defer func() { - go HookQueue.Add(repo.ID) - }() - - return nil -} - -// MirrorSyncPushActionOptions mirror synchronization action options. -type MirrorSyncPushActionOptions struct { - RefName string - OldCommitID string - NewCommitID string - Commits *PushCommits -} - -// MirrorSyncPushAction adds new action for mirror synchronization of pushed commits. -func MirrorSyncPushAction(repo *Repository, opts MirrorSyncPushActionOptions) error { - if len(opts.Commits.Commits) > setting.UI.FeedMaxCommitNum { - opts.Commits.Commits = opts.Commits.Commits[:setting.UI.FeedMaxCommitNum] - } - - apiCommits, err := opts.Commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) - if err != nil { - return err - } - - opts.Commits.CompareURL = repo.ComposeCompareURL(opts.OldCommitID, opts.NewCommitID) - apiPusher := repo.MustOwner().APIFormat() - if err := PrepareWebhooks(repo, HookEventPush, &api.PushPayload{ - Ref: opts.RefName, - Before: opts.OldCommitID, - After: opts.NewCommitID, - CompareURL: setting.AppURL + opts.Commits.CompareURL, - Commits: apiCommits, - Repo: repo.APIFormat(AccessModeOwner), - Pusher: apiPusher, - Sender: apiPusher, - }); err != nil { - return fmt.Errorf("PrepareWebhooks: %v", err) - } - - data, err := json.Marshal(opts.Commits) - if err != nil { - return err - } - - return mirrorSyncAction(x, ActionMirrorSyncPush, repo, opts.RefName, data) -} - -// MirrorSyncCreateAction adds new action for mirror synchronization of new reference. -func MirrorSyncCreateAction(repo *Repository, refName string) error { - return mirrorSyncAction(x, ActionMirrorSyncCreate, repo, refName, nil) -} - -// MirrorSyncDeleteAction adds new action for mirror synchronization of delete reference. -func MirrorSyncDeleteAction(repo *Repository, refName string) error { - return mirrorSyncAction(x, ActionMirrorSyncDelete, repo, refName, nil) -} - // GetFeedsOptions options for retrieving feeds type GetFeedsOptions struct { RequestedUser *User diff --git a/services/mirror/mirror.go b/services/mirror/mirror.go index 7bfc5fd4da044..ea44f410e0162 100644 --- a/services/mirror/mirror.go +++ b/services/mirror/mirror.go @@ -329,7 +329,7 @@ func SyncMirrors() { // Create reference if result.oldCommitID == gitShortEmptySha { - if err = models.MirrorSyncCreateAction(m.Repo, result.refName); err != nil { + if err = MirrorSyncCreateAction(m.Repo, result.refName); err != nil { log.Error("MirrorSyncCreateAction [repo_id: %d]: %v", m.RepoID, err) } continue @@ -337,7 +337,7 @@ func SyncMirrors() { // Delete reference if result.newCommitID == gitShortEmptySha { - if err = models.MirrorSyncDeleteAction(m.Repo, result.refName); err != nil { + if err = MirrorSyncDeleteAction(m.Repo, result.refName); err != nil { log.Error("MirrorSyncDeleteAction [repo_id: %d]: %v", m.RepoID, err) } continue @@ -359,7 +359,7 @@ func SyncMirrors() { log.Error("CommitsBetweenIDs [repo_id: %d, new_commit_id: %s, old_commit_id: %s]: %v", m.RepoID, newCommitID, oldCommitID, err) continue } - if err = models.MirrorSyncPushAction(m.Repo, models.MirrorSyncPushActionOptions{ + if err = MirrorSyncPushAction(m.Repo, MirrorSyncPushActionOptions{ RefName: result.refName, OldCommitID: oldCommitID, NewCommitID: newCommitID, diff --git a/services/mirror/sync.go b/services/mirror/sync.go new file mode 100644 index 0000000000000..577bdd51dfd59 --- /dev/null +++ b/services/mirror/sync.go @@ -0,0 +1,87 @@ +// Copyright 2019 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 mirror + +import ( + "encoding/json" + "fmt" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/setting" + api "code.gitea.io/gitea/modules/structs" +) + +func mirrorSyncAction(opType models.ActionType, repo *models.Repository, refName string, data []byte) error { + if err := models.NotifyWatchers(&models.Action{ + ActUserID: repo.OwnerID, + ActUser: repo.MustOwner(), + OpType: opType, + RepoID: repo.ID, + Repo: repo, + IsPrivate: repo.IsPrivate, + RefName: refName, + Content: string(data), + }); err != nil { + return fmt.Errorf("notifyWatchers: %v", err) + } + + defer func() { + go models.HookQueue.Add(repo.ID) + }() + + return nil +} + +// MirrorSyncPushActionOptions mirror synchronization action options. +type MirrorSyncPushActionOptions struct { + RefName string + OldCommitID string + NewCommitID string + Commits *models.PushCommits +} + +// MirrorSyncPushAction adds new action for mirror synchronization of pushed commits. +func MirrorSyncPushAction(repo *models.Repository, opts MirrorSyncPushActionOptions) error { + if len(opts.Commits.Commits) > setting.UI.FeedMaxCommitNum { + opts.Commits.Commits = opts.Commits.Commits[:setting.UI.FeedMaxCommitNum] + } + + apiCommits, err := opts.Commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) + if err != nil { + return err + } + + opts.Commits.CompareURL = repo.ComposeCompareURL(opts.OldCommitID, opts.NewCommitID) + apiPusher := repo.MustOwner().APIFormat() + if err := models.PrepareWebhooks(repo, models.HookEventPush, &api.PushPayload{ + Ref: opts.RefName, + Before: opts.OldCommitID, + After: opts.NewCommitID, + CompareURL: setting.AppURL + opts.Commits.CompareURL, + Commits: apiCommits, + Repo: repo.APIFormat(models.AccessModeOwner), + Pusher: apiPusher, + Sender: apiPusher, + }); err != nil { + return fmt.Errorf("PrepareWebhooks: %v", err) + } + + data, err := json.Marshal(opts.Commits) + if err != nil { + return err + } + + return mirrorSyncAction(models.ActionMirrorSyncPush, repo, opts.RefName, data) +} + +// MirrorSyncCreateAction adds new action for mirror synchronization of new reference. +func MirrorSyncCreateAction(repo *models.Repository, refName string) error { + return mirrorSyncAction(models.ActionMirrorSyncCreate, repo, refName, nil) +} + +// MirrorSyncDeleteAction adds new action for mirror synchronization of delete reference. +func MirrorSyncDeleteAction(repo *models.Repository, refName string) error { + return mirrorSyncAction(models.ActionMirrorSyncDelete, repo, refName, nil) +} From b3c3972304d08e4714b54fffac4aba0b373d7160 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 15 Oct 2019 11:48:19 +0800 Subject: [PATCH 2/4] fix go.mod --- go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.mod b/go.mod index 7cc9c1ba5e913..cdf660c0d34f8 100644 --- a/go.mod +++ b/go.mod @@ -70,8 +70,6 @@ require ( github.com/mattn/go-sqlite3 v1.11.0 github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75 github.com/microcosm-cc/bluemonday v0.0.0-20161012083705-f77f16ffc87a - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae // indirect github.com/msteinert/pam v0.0.0-20151204160544-02ccfbfaf0cc github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 From 83ea5b12f83a5c78e12c5df7ad260c9e3c0f39c4 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 15 Oct 2019 13:20:29 +0800 Subject: [PATCH 3/4] fix lint --- services/mirror/mirror.go | 12 ++++++------ services/mirror/sync.go | 22 +++++++++++----------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/services/mirror/mirror.go b/services/mirror/mirror.go index ea44f410e0162..11430c20700de 100644 --- a/services/mirror/mirror.go +++ b/services/mirror/mirror.go @@ -329,16 +329,16 @@ func SyncMirrors() { // Create reference if result.oldCommitID == gitShortEmptySha { - if err = MirrorSyncCreateAction(m.Repo, result.refName); err != nil { - log.Error("MirrorSyncCreateAction [repo_id: %d]: %v", m.RepoID, err) + if err = SyncCreateAction(m.Repo, result.refName); err != nil { + log.Error("SyncCreateAction [repo_id: %d]: %v", m.RepoID, err) } continue } // Delete reference if result.newCommitID == gitShortEmptySha { - if err = MirrorSyncDeleteAction(m.Repo, result.refName); err != nil { - log.Error("MirrorSyncDeleteAction [repo_id: %d]: %v", m.RepoID, err) + if err = SyncDeleteAction(m.Repo, result.refName); err != nil { + log.Error("SyncDeleteAction [repo_id: %d]: %v", m.RepoID, err) } continue } @@ -359,13 +359,13 @@ func SyncMirrors() { log.Error("CommitsBetweenIDs [repo_id: %d, new_commit_id: %s, old_commit_id: %s]: %v", m.RepoID, newCommitID, oldCommitID, err) continue } - if err = MirrorSyncPushAction(m.Repo, MirrorSyncPushActionOptions{ + if err = SyncPushAction(m.Repo, SyncPushActionOptions{ RefName: result.refName, OldCommitID: oldCommitID, NewCommitID: newCommitID, Commits: models.ListToPushCommits(commits), }); err != nil { - log.Error("MirrorSyncPushAction [repo_id: %d]: %v", m.RepoID, err) + log.Error("SyncPushAction [repo_id: %d]: %v", m.RepoID, err) continue } } diff --git a/services/mirror/sync.go b/services/mirror/sync.go index 577bdd51dfd59..a2133a4dae119 100644 --- a/services/mirror/sync.go +++ b/services/mirror/sync.go @@ -13,7 +13,7 @@ import ( api "code.gitea.io/gitea/modules/structs" ) -func mirrorSyncAction(opType models.ActionType, repo *models.Repository, refName string, data []byte) error { +func syncAction(opType models.ActionType, repo *models.Repository, refName string, data []byte) error { if err := models.NotifyWatchers(&models.Action{ ActUserID: repo.OwnerID, ActUser: repo.MustOwner(), @@ -34,16 +34,16 @@ func mirrorSyncAction(opType models.ActionType, repo *models.Repository, refName return nil } -// MirrorSyncPushActionOptions mirror synchronization action options. -type MirrorSyncPushActionOptions struct { +// SyncPushActionOptions mirror synchronization action options. +type SyncPushActionOptions struct { RefName string OldCommitID string NewCommitID string Commits *models.PushCommits } -// MirrorSyncPushAction adds new action for mirror synchronization of pushed commits. -func MirrorSyncPushAction(repo *models.Repository, opts MirrorSyncPushActionOptions) error { +// SyncPushAction adds new action for mirror synchronization of pushed commits. +func SyncPushAction(repo *models.Repository, opts SyncPushActionOptions) error { if len(opts.Commits.Commits) > setting.UI.FeedMaxCommitNum { opts.Commits.Commits = opts.Commits.Commits[:setting.UI.FeedMaxCommitNum] } @@ -73,15 +73,15 @@ func MirrorSyncPushAction(repo *models.Repository, opts MirrorSyncPushActionOpti return err } - return mirrorSyncAction(models.ActionMirrorSyncPush, repo, opts.RefName, data) + return syncAction(models.ActionMirrorSyncPush, repo, opts.RefName, data) } -// MirrorSyncCreateAction adds new action for mirror synchronization of new reference. -func MirrorSyncCreateAction(repo *models.Repository, refName string) error { - return mirrorSyncAction(models.ActionMirrorSyncCreate, repo, refName, nil) +// SyncCreateAction adds new action for mirror synchronization of new reference. +func SyncCreateAction(repo *models.Repository, refName string) error { + return syncAction(models.ActionMirrorSyncCreate, repo, refName, nil) } // MirrorSyncDeleteAction adds new action for mirror synchronization of delete reference. -func MirrorSyncDeleteAction(repo *models.Repository, refName string) error { - return mirrorSyncAction(models.ActionMirrorSyncDelete, repo, refName, nil) +func SyncDeleteAction(repo *models.Repository, refName string) error { + return syncAction(models.ActionMirrorSyncDelete, repo, refName, nil) } From 14fd21b758b6456d5b57c74ee5bfb89e8584feb3 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 16 Oct 2019 01:06:58 +0800 Subject: [PATCH 4/4] fix lint --- services/mirror/sync.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/mirror/sync.go b/services/mirror/sync.go index a2133a4dae119..4bc153b47fe82 100644 --- a/services/mirror/sync.go +++ b/services/mirror/sync.go @@ -81,7 +81,7 @@ func SyncCreateAction(repo *models.Repository, refName string) error { return syncAction(models.ActionMirrorSyncCreate, repo, refName, nil) } -// MirrorSyncDeleteAction adds new action for mirror synchronization of delete reference. +// SyncDeleteAction adds new action for mirror synchronization of delete reference. func SyncDeleteAction(repo *models.Repository, refName string) error { return syncAction(models.ActionMirrorSyncDelete, repo, refName, nil) }