mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-26 17:34:11 -05:00
e81ccc406b
Change all license headers to comply with REUSE specification. Fix #16132 Co-authored-by: flynnnnnnnnnn <flynnnnnnnnnn@github> Co-authored-by: John Olheiser <john.olheiser@gmail.com>
68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
// 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.UniqueQueue
|
|
|
|
// 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 ...queue.Data) []queue.Data) {
|
|
if !setting.Mirror.Enabled {
|
|
return
|
|
}
|
|
mirrorQueue = queue.CreateUniqueQueue("mirror", queueHandle, new(SyncRequest))
|
|
|
|
go graceful.GetManager().RunWithShutdownFns(mirrorQueue.Run)
|
|
}
|
|
|
|
// 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,
|
|
})
|
|
}
|