// 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/notification" "code.gitea.io/gitea/modules/setting" ) 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(), OpType: opType, RepoID: repo.ID, Repo: repo, IsPrivate: repo.IsPrivate, RefName: refName, Content: string(data), }); err != nil { return fmt.Errorf("notifyWatchers: %v", err) } return nil } // SyncPushActionOptions mirror synchronization action options. type SyncPushActionOptions struct { RefName string OldCommitID string NewCommitID string Commits *models.PushCommits } // 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] } opts.Commits.CompareURL = repo.ComposeCompareURL(opts.OldCommitID, opts.NewCommitID) notification.NotifyPushCommits(repo.MustOwner(), repo, opts.RefName, opts.OldCommitID, opts.NewCommitID, opts.Commits) data, err := json.Marshal(opts.Commits) if err != nil { return err } return syncAction(models.ActionMirrorSyncPush, repo, opts.RefName, data) } // 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) } // 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) }