Move sync mirror actions to mirror service package (#8518)
* move sync mirror actions to mirror service * fix go.mod * fix lint * fix lint
This commit is contained in:
		
							parent
							
								
									1d9a1a0d45
								
							
						
					
					
						commit
						8edf3d5804
					
				
					 3 changed files with 93 additions and 80 deletions
				
			
		|  | @ -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 | ||||
|  |  | |||
|  | @ -329,16 +329,16 @@ func SyncMirrors() { | |||
| 
 | ||||
| 			// Create reference
 | ||||
| 			if result.oldCommitID == gitShortEmptySha { | ||||
| 				if err = models.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 = models.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 = models.MirrorSyncPushAction(m.Repo, models.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 | ||||
| 			} | ||||
| 		} | ||||
|  |  | |||
							
								
								
									
										87
									
								
								services/mirror/sync.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								services/mirror/sync.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -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 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) | ||||
| 	} | ||||
| 
 | ||||
| 	defer func() { | ||||
| 		go models.HookQueue.Add(repo.ID) | ||||
| 	}() | ||||
| 
 | ||||
| 	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] | ||||
| 	} | ||||
| 
 | ||||
| 	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 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) | ||||
| } | ||||
		Loading…
	
		Reference in a new issue