]> source.dussan.org Git - gitea.git/commitdiff
Move `modules/mirror` to `services` (#26737)
authorChongyi Zheng <git@zcy.dev>
Sun, 27 Aug 2023 02:24:45 +0000 (22:24 -0400)
committerGitHub <noreply@github.com>
Sun, 27 Aug 2023 02:24:45 +0000 (10:24 +0800)
To solve the cyclic imports in a better way

Closes #20261

models/repo/pushmirror.go
modules/mirror/mirror.go [deleted file]
modules/notification/mirror/mirror.go [deleted file]
modules/notification/notification.go
routers/api/v1/repo/mirror.go
routers/web/repo/setting/setting.go
services/mirror/mirror.go
services/mirror/mirror_push.go
services/mirror/notifier.go [new file with mode: 0644]
services/mirror/queue.go [new file with mode: 0644]

index dad9a9d3885176c3ca2560c4811c7007c868ad28..3edbcceb9b3896bf32d48f1ab6e4861cc0ad9b36 100644 (file)
@@ -128,7 +128,7 @@ func GetPushMirrorsByRepoID(ctx context.Context, repoID int64, listOptions db.Li
 func GetPushMirrorsSyncedOnCommit(ctx context.Context, repoID int64) ([]*PushMirror, error) {
        mirrors := make([]*PushMirror, 0, 10)
        return mirrors, db.GetEngine(ctx).
-               Where("repo_id=? AND sync_on_commit=?", repoID, true).
+               Where("repo_id = ? AND sync_on_commit = ?", repoID, true).
                Find(&mirrors)
 }
 
diff --git a/modules/mirror/mirror.go b/modules/mirror/mirror.go
deleted file mode 100644 (file)
index 0d9a624..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2022 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-package mirror
-
-import (
-       "code.gitea.io/gitea/modules/graceful"
-       "code.gitea.io/gitea/modules/log"
-       "code.gitea.io/gitea/modules/queue"
-       "code.gitea.io/gitea/modules/setting"
-)
-
-var mirrorQueue *queue.WorkerPoolQueue[*SyncRequest]
-
-// SyncType type of sync request
-type SyncType int
-
-const (
-       // PullMirrorType for pull mirrors
-       PullMirrorType SyncType = iota
-       // PushMirrorType for push mirrors
-       PushMirrorType
-)
-
-// SyncRequest for the mirror queue
-type SyncRequest struct {
-       Type        SyncType
-       ReferenceID int64 // RepoID for pull mirror, MirrorID for push mirror
-}
-
-// StartSyncMirrors starts a go routine to sync the mirrors
-func StartSyncMirrors(queueHandle func(data ...*SyncRequest) []*SyncRequest) {
-       if !setting.Mirror.Enabled {
-               return
-       }
-       mirrorQueue = queue.CreateUniqueQueue(graceful.GetManager().ShutdownContext(), "mirror", queueHandle)
-       if mirrorQueue == nil {
-               log.Fatal("Unable to create mirror queue")
-       }
-       go graceful.GetManager().RunWithCancel(mirrorQueue)
-}
-
-// AddPullMirrorToQueue adds repoID to mirror queue
-func AddPullMirrorToQueue(repoID int64) {
-       addMirrorToQueue(PullMirrorType, repoID)
-}
-
-// AddPushMirrorToQueue adds the push mirror to the queue
-func AddPushMirrorToQueue(mirrorID int64) {
-       addMirrorToQueue(PushMirrorType, mirrorID)
-}
-
-func addMirrorToQueue(syncType SyncType, referenceID int64) {
-       if !setting.Mirror.Enabled {
-               return
-       }
-       go func() {
-               if err := PushToQueue(syncType, referenceID); err != nil {
-                       log.Error("Unable to push sync request for to the queue for pull mirror repo[%d]. Error: %v", referenceID, err)
-               }
-       }()
-}
-
-// PushToQueue adds the sync request to the queue
-func PushToQueue(mirrorType SyncType, referenceID int64) error {
-       return mirrorQueue.Push(&SyncRequest{
-               Type:        mirrorType,
-               ReferenceID: referenceID,
-       })
-}
diff --git a/modules/notification/mirror/mirror.go b/modules/notification/mirror/mirror.go
deleted file mode 100644 (file)
index 426e36e..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2022 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-package mirror
-
-import (
-       "context"
-
-       repo_model "code.gitea.io/gitea/models/repo"
-       user_model "code.gitea.io/gitea/models/user"
-       "code.gitea.io/gitea/modules/log"
-       mirror_module "code.gitea.io/gitea/modules/mirror"
-       "code.gitea.io/gitea/modules/notification/base"
-       "code.gitea.io/gitea/modules/repository"
-)
-
-type mirrorNotifier struct {
-       base.NullNotifier
-}
-
-var _ base.Notifier = &mirrorNotifier{}
-
-// NewNotifier create a new mirrorNotifier notifier
-func NewNotifier() base.Notifier {
-       return &mirrorNotifier{}
-}
-
-func (m *mirrorNotifier) NotifyPushCommits(ctx context.Context, _ *user_model.User, repo *repo_model.Repository, _ *repository.PushUpdateOptions, _ *repository.PushCommits) {
-       syncPushMirrorWithSyncOnCommit(ctx, repo.ID)
-}
-
-func (m *mirrorNotifier) NotifySyncPushCommits(ctx context.Context, _ *user_model.User, repo *repo_model.Repository, _ *repository.PushUpdateOptions, _ *repository.PushCommits) {
-       syncPushMirrorWithSyncOnCommit(ctx, repo.ID)
-}
-
-func syncPushMirrorWithSyncOnCommit(ctx context.Context, repoID int64) {
-       pushMirrors, err := repo_model.GetPushMirrorsSyncedOnCommit(ctx, repoID)
-       if err != nil {
-               log.Error("repo_model.GetPushMirrorsSyncedOnCommit failed: %v", err)
-               return
-       }
-
-       for _, mirror := range pushMirrors {
-               mirror_module.AddPushMirrorToQueue(mirror.ID)
-       }
-}
index 99e1a06ebda4758070017db3645683bed93927f3..50b2694d9c4130a3936fd3cb6e745c4adff4abf7 100644 (file)
@@ -16,7 +16,6 @@ import (
        "code.gitea.io/gitea/modules/notification/base"
        "code.gitea.io/gitea/modules/notification/indexer"
        "code.gitea.io/gitea/modules/notification/mail"
-       "code.gitea.io/gitea/modules/notification/mirror"
        "code.gitea.io/gitea/modules/notification/ui"
        "code.gitea.io/gitea/modules/repository"
        "code.gitea.io/gitea/modules/setting"
@@ -38,7 +37,6 @@ func NewContext() {
        }
        RegisterNotifier(indexer.NewNotifier())
        RegisterNotifier(action.NewNotifier())
-       RegisterNotifier(mirror.NewNotifier())
 }
 
 // NotifyNewWikiPage notifies creating new wiki pages to notifiers
index 9d8497927ec440a6b466c3f4a5a3fd1a54589f16..60f1bfe0d3b054afedef3973a0a1eb8fa36e0971 100644 (file)
@@ -14,7 +14,6 @@ import (
        repo_model "code.gitea.io/gitea/models/repo"
        "code.gitea.io/gitea/models/unit"
        "code.gitea.io/gitea/modules/context"
-       mirror_module "code.gitea.io/gitea/modules/mirror"
        "code.gitea.io/gitea/modules/setting"
        api "code.gitea.io/gitea/modules/structs"
        "code.gitea.io/gitea/modules/util"
@@ -70,7 +69,7 @@ func MirrorSync(ctx *context.APIContext) {
                return
        }
 
-       mirror_module.AddPullMirrorToQueue(repo.ID)
+       mirror_service.AddPullMirrorToQueue(repo.ID)
 
        ctx.Status(http.StatusOK)
 }
index 71c1939f2990d4ce3e6584d995ffb1823022e136..af09e240d584dfd27df8354a6cf1d06b445bb405 100644 (file)
@@ -24,7 +24,6 @@ import (
        "code.gitea.io/gitea/modules/indexer/stats"
        "code.gitea.io/gitea/modules/lfs"
        "code.gitea.io/gitea/modules/log"
-       mirror_module "code.gitea.io/gitea/modules/mirror"
        repo_module "code.gitea.io/gitea/modules/repository"
        "code.gitea.io/gitea/modules/setting"
        "code.gitea.io/gitea/modules/structs"
@@ -277,7 +276,7 @@ func SettingsPost(ctx *context.Context) {
                        return
                }
 
-               mirror_module.AddPullMirrorToQueue(repo.ID)
+               mirror_service.AddPullMirrorToQueue(repo.ID)
 
                ctx.Flash.Info(ctx.Tr("repo.settings.mirror_sync_in_progress"))
                ctx.Redirect(repo.Link() + "/settings")
@@ -294,7 +293,7 @@ func SettingsPost(ctx *context.Context) {
                        return
                }
 
-               mirror_module.AddPushMirrorToQueue(m.ID)
+               mirror_service.AddPushMirrorToQueue(m.ID)
 
                ctx.Flash.Info(ctx.Tr("repo.settings.mirror_sync_in_progress"))
                ctx.Redirect(repo.Link() + "/settings")
@@ -332,7 +331,7 @@ func SettingsPost(ctx *context.Context) {
                // If we observed its implementation in the context of `push-mirror-sync` where it
                // is evident that pushing to the queue is necessary for updates.
                // So, there are updates within the given interval, it is necessary to update the queue accordingly.
-               mirror_module.AddPushMirrorToQueue(m.ID)
+               mirror_service.AddPushMirrorToQueue(m.ID)
                ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success"))
                ctx.Redirect(repo.Link() + "/settings")
 
index abce1d3c2d45e02e83be35274ecd89dbc9925a80..0fc871b214c9fd35c0d381dc7bb303b05a41b810 100644 (file)
@@ -10,21 +10,20 @@ import (
        repo_model "code.gitea.io/gitea/models/repo"
        "code.gitea.io/gitea/modules/graceful"
        "code.gitea.io/gitea/modules/log"
-       mirror_module "code.gitea.io/gitea/modules/mirror"
        "code.gitea.io/gitea/modules/queue"
        "code.gitea.io/gitea/modules/setting"
 )
 
 // doMirrorSync causes this request to mirror itself
-func doMirrorSync(ctx context.Context, req *mirror_module.SyncRequest) {
+func doMirrorSync(ctx context.Context, req *SyncRequest) {
        if req.ReferenceID == 0 {
                log.Warn("Skipping mirror sync request, no mirror ID was specified")
                return
        }
        switch req.Type {
-       case mirror_module.PushMirrorType:
+       case PushMirrorType:
                _ = SyncPushMirror(ctx, req.ReferenceID)
-       case mirror_module.PullMirrorType:
+       case PullMirrorType:
                _ = SyncPullMirror(ctx, req.ReferenceID)
        default:
                log.Error("Unknown Request type in queue: %v for MirrorID[%d]", req.Type, req.ReferenceID)
@@ -43,7 +42,7 @@ func Update(ctx context.Context, pullLimit, pushLimit int) error {
 
        handler := func(idx int, bean any) error {
                var repo *repo_model.Repository
-               var mirrorType mirror_module.SyncType
+               var mirrorType SyncType
                var referenceID int64
 
                if m, ok := bean.(*repo_model.Mirror); ok {
@@ -52,7 +51,7 @@ func Update(ctx context.Context, pullLimit, pushLimit int) error {
                                return nil
                        }
                        repo = m.Repo
-                       mirrorType = mirror_module.PullMirrorType
+                       mirrorType = PullMirrorType
                        referenceID = m.RepoID
                } else if m, ok := bean.(*repo_model.PushMirror); ok {
                        if m.GetRepository() == nil {
@@ -60,7 +59,7 @@ func Update(ctx context.Context, pullLimit, pushLimit int) error {
                                return nil
                        }
                        repo = m.Repo
-                       mirrorType = mirror_module.PushMirrorType
+                       mirrorType = PushMirrorType
                        referenceID = m.ID
                } else {
                        log.Error("Unknown bean: %v", bean)
@@ -75,9 +74,9 @@ func Update(ctx context.Context, pullLimit, pushLimit int) error {
                }
 
                // Push to the Queue
-               if err := mirror_module.PushToQueue(mirrorType, referenceID); err != nil {
+               if err := PushToQueue(mirrorType, referenceID); err != nil {
                        if err == queue.ErrAlreadyInQueue {
-                               if mirrorType == mirror_module.PushMirrorType {
+                               if mirrorType == PushMirrorType {
                                        log.Trace("PushMirrors for %-v already queued for sync", repo)
                                } else {
                                        log.Trace("PullMirrors for %-v already queued for sync", repo)
@@ -120,7 +119,7 @@ func Update(ctx context.Context, pullLimit, pushLimit int) error {
        return nil
 }
 
-func queueHandler(items ...*mirror_module.SyncRequest) []*mirror_module.SyncRequest {
+func queueHandler(items ...*SyncRequest) []*SyncRequest {
        for _, req := range items {
                doMirrorSync(graceful.GetManager().ShutdownContext(), req)
        }
@@ -129,5 +128,5 @@ func queueHandler(items ...*mirror_module.SyncRequest) []*mirror_module.SyncRequ
 
 // InitSyncMirrors initializes a go routine to sync the mirrors
 func InitSyncMirrors() {
-       mirror_module.StartSyncMirrors(queueHandler)
+       StartSyncMirrors(queueHandler)
 }
index 2c1b00b60c294036eda73a3eaf0f2db5304195cb..594d31df89be109cd433928e22259f65a879215f 100644 (file)
@@ -253,3 +253,15 @@ func pushAllLFSObjects(ctx context.Context, gitRepo *git.Repository, lfsClient l
 
        return nil
 }
+
+func syncPushMirrorWithSyncOnCommit(ctx context.Context, repoID int64) {
+       pushMirrors, err := repo_model.GetPushMirrorsSyncedOnCommit(ctx, repoID)
+       if err != nil {
+               log.Error("repo_model.GetPushMirrorsSyncedOnCommit failed: %v", err)
+               return
+       }
+
+       for _, mirror := range pushMirrors {
+               AddPushMirrorToQueue(mirror.ID)
+       }
+}
diff --git a/services/mirror/notifier.go b/services/mirror/notifier.go
new file mode 100644 (file)
index 0000000..e0e1b44
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package mirror
+
+import (
+       "context"
+
+       repo_model "code.gitea.io/gitea/models/repo"
+       user_model "code.gitea.io/gitea/models/user"
+       "code.gitea.io/gitea/modules/notification"
+       "code.gitea.io/gitea/modules/notification/base"
+       "code.gitea.io/gitea/modules/repository"
+)
+
+func init() {
+       notification.RegisterNotifier(&mirrorNotifier{})
+}
+
+type mirrorNotifier struct {
+       base.NullNotifier
+}
+
+var _ base.Notifier = &mirrorNotifier{}
+
+func (m *mirrorNotifier) NotifyPushCommits(ctx context.Context, _ *user_model.User, repo *repo_model.Repository, _ *repository.PushUpdateOptions, _ *repository.PushCommits) {
+       syncPushMirrorWithSyncOnCommit(ctx, repo.ID)
+}
+
+func (m *mirrorNotifier) NotifySyncPushCommits(ctx context.Context, _ *user_model.User, repo *repo_model.Repository, _ *repository.PushUpdateOptions, _ *repository.PushCommits) {
+       syncPushMirrorWithSyncOnCommit(ctx, repo.ID)
+}
diff --git a/services/mirror/queue.go b/services/mirror/queue.go
new file mode 100644 (file)
index 0000000..0d9a624
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package mirror
+
+import (
+       "code.gitea.io/gitea/modules/graceful"
+       "code.gitea.io/gitea/modules/log"
+       "code.gitea.io/gitea/modules/queue"
+       "code.gitea.io/gitea/modules/setting"
+)
+
+var mirrorQueue *queue.WorkerPoolQueue[*SyncRequest]
+
+// SyncType type of sync request
+type SyncType int
+
+const (
+       // PullMirrorType for pull mirrors
+       PullMirrorType SyncType = iota
+       // PushMirrorType for push mirrors
+       PushMirrorType
+)
+
+// SyncRequest for the mirror queue
+type SyncRequest struct {
+       Type        SyncType
+       ReferenceID int64 // RepoID for pull mirror, MirrorID for push mirror
+}
+
+// StartSyncMirrors starts a go routine to sync the mirrors
+func StartSyncMirrors(queueHandle func(data ...*SyncRequest) []*SyncRequest) {
+       if !setting.Mirror.Enabled {
+               return
+       }
+       mirrorQueue = queue.CreateUniqueQueue(graceful.GetManager().ShutdownContext(), "mirror", queueHandle)
+       if mirrorQueue == nil {
+               log.Fatal("Unable to create mirror queue")
+       }
+       go graceful.GetManager().RunWithCancel(mirrorQueue)
+}
+
+// AddPullMirrorToQueue adds repoID to mirror queue
+func AddPullMirrorToQueue(repoID int64) {
+       addMirrorToQueue(PullMirrorType, repoID)
+}
+
+// AddPushMirrorToQueue adds the push mirror to the queue
+func AddPushMirrorToQueue(mirrorID int64) {
+       addMirrorToQueue(PushMirrorType, mirrorID)
+}
+
+func addMirrorToQueue(syncType SyncType, referenceID int64) {
+       if !setting.Mirror.Enabled {
+               return
+       }
+       go func() {
+               if err := PushToQueue(syncType, referenceID); err != nil {
+                       log.Error("Unable to push sync request for to the queue for pull mirror repo[%d]. Error: %v", referenceID, err)
+               }
+       }()
+}
+
+// PushToQueue adds the sync request to the queue
+func PushToQueue(mirrorType SyncType, referenceID int64) error {
+       return mirrorQueue.Push(&SyncRequest{
+               Type:        mirrorType,
+               ReferenceID: referenceID,
+       })
+}