Skip to content

Commit bd55411

Browse files
committed
Implement sync-on-push via a mirrorNotifier
1 parent 04d7bd5 commit bd55411

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

modules/notification/mirror/mirror.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package mirror
2+
3+
import (
4+
"fmt"
5+
6+
repo_model "code.gitea.io/gitea/models/repo"
7+
user_model "code.gitea.io/gitea/models/user"
8+
"code.gitea.io/gitea/modules/graceful"
9+
"code.gitea.io/gitea/modules/log"
10+
"code.gitea.io/gitea/modules/notification/base"
11+
"code.gitea.io/gitea/modules/process"
12+
"code.gitea.io/gitea/modules/repository"
13+
pushmirror_service "code.gitea.io/gitea/services/pushmirror"
14+
)
15+
16+
type mirrorNotifier struct {
17+
base.NullNotifier
18+
}
19+
20+
var _ base.Notifier = &mirrorNotifier{}
21+
22+
// NewNotifier create a new mirrorNotifier notifier
23+
func NewNotifier() base.Notifier {
24+
return &mirrorNotifier{}
25+
}
26+
27+
func (m *mirrorNotifier) NotifyPushCommits(pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
28+
ctx, _, finished := process.GetManager().AddContext(graceful.GetManager().HammerContext(), fmt.Sprintf("mirrorNotifier.NotifyPushCommits User: %s[%d] in %s[%d]", pusher.Name, pusher.ID, repo.FullName(), repo.ID))
29+
defer finished()
30+
31+
pushMirrors, err := repo_model.GetPushMirrorsByRepoID(repo.ID)
32+
if err != nil {
33+
log.Error("repo_model.GetPushMirrorsByRepoID failed: %v", err)
34+
return
35+
}
36+
37+
for _, mirror := range pushMirrors {
38+
if mirror.SyncOnPush {
39+
// TODO: push mirror likely will benefit from using a queue
40+
pushmirror_service.SyncPushMirror(ctx, mirror.ID)
41+
}
42+
}
43+
return
44+
}

modules/notification/notification.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"code.gitea.io/gitea/modules/notification/base"
1515
"code.gitea.io/gitea/modules/notification/indexer"
1616
"code.gitea.io/gitea/modules/notification/mail"
17+
"code.gitea.io/gitea/modules/notification/mirror"
1718
"code.gitea.io/gitea/modules/notification/ui"
1819
"code.gitea.io/gitea/modules/notification/webhook"
1920
"code.gitea.io/gitea/modules/repository"
@@ -37,6 +38,7 @@ func NewContext() {
3738
RegisterNotifier(indexer.NewNotifier())
3839
RegisterNotifier(webhook.NewNotifier())
3940
RegisterNotifier(action.NewNotifier())
41+
RegisterNotifier(mirror.NewNotifier())
4042
}
4143

4244
// NotifyCreateIssueComment notifies issue comment related message to notifiers

0 commit comments

Comments
 (0)