Move PushToBaseRepo from models to services/pull (#9352)
This commit is contained in:
		
							parent
							
								
									6715677b2b
								
							
						
					
					
						commit
						ce2d488c94
					
				| @ -7,8 +7,6 @@ package models | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"path" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| @ -631,48 +629,6 @@ func (pr *PullRequest) UpdateCols(cols ...string) error { | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // PushToBaseRepo pushes commits from branches of head repository to
 | ||||
| // corresponding branches of base repository.
 | ||||
| // FIXME: Only push branches that are actually updates?
 | ||||
| func (pr *PullRequest) PushToBaseRepo() (err error) { | ||||
| 	log.Trace("PushToBaseRepo[%d]: pushing commits to base repo '%s'", pr.BaseRepoID, pr.GetGitRefName()) | ||||
| 
 | ||||
| 	headRepoPath := pr.HeadRepo.RepoPath() | ||||
| 	headGitRepo, err := git.OpenRepository(headRepoPath) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("OpenRepository: %v", err) | ||||
| 	} | ||||
| 	defer headGitRepo.Close() | ||||
| 
 | ||||
| 	tmpRemoteName := fmt.Sprintf("tmp-pull-%d", pr.ID) | ||||
| 	if err = headGitRepo.AddRemote(tmpRemoteName, pr.BaseRepo.RepoPath(), false); err != nil { | ||||
| 		return fmt.Errorf("headGitRepo.AddRemote: %v", err) | ||||
| 	} | ||||
| 	// Make sure to remove the remote even if the push fails
 | ||||
| 	defer func() { | ||||
| 		if err := headGitRepo.RemoveRemote(tmpRemoteName); err != nil { | ||||
| 			log.Error("PushToBaseRepo: RemoveRemote: %s", err) | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	headFile := pr.GetGitRefName() | ||||
| 
 | ||||
| 	// Remove head in case there is a conflict.
 | ||||
| 	file := path.Join(pr.BaseRepo.RepoPath(), headFile) | ||||
| 
 | ||||
| 	_ = os.Remove(file) | ||||
| 
 | ||||
| 	if err = git.Push(headRepoPath, git.PushOptions{ | ||||
| 		Remote: tmpRemoteName, | ||||
| 		Branch: fmt.Sprintf("%s:%s", pr.HeadBranch, headFile), | ||||
| 		Force:  true, | ||||
| 	}); err != nil { | ||||
| 		return fmt.Errorf("Push: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // IsWorkInProgress determine if the Pull Request is a Work In Progress by its title
 | ||||
| func (pr *PullRequest) IsWorkInProgress() bool { | ||||
| 	if err := pr.LoadIssue(); err != nil { | ||||
|  | ||||
| @ -190,8 +190,6 @@ func TestPullRequest_UpdateCols(t *testing.T) { | ||||
| 	CheckConsistencyFor(t, pr) | ||||
| } | ||||
| 
 | ||||
| // TODO TestPullRequest_PushToBaseRepo
 | ||||
| 
 | ||||
| func TestPullRequestList_LoadAttributes(t *testing.T) { | ||||
| 	assert.NoError(t, PrepareTestDatabase()) | ||||
| 
 | ||||
|  | ||||
| @ -307,9 +307,6 @@ func CreatePullRequest(ctx *context.APIContext, form api.CreatePullRequestOption | ||||
| 		} | ||||
| 		ctx.Error(500, "NewPullRequest", err) | ||||
| 		return | ||||
| 	} else if err := pr.PushToBaseRepo(); err != nil { | ||||
| 		ctx.Error(500, "PushToBaseRepo", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	notification.NotifyNewPullRequest(pr) | ||||
|  | ||||
| @ -813,9 +813,6 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) | ||||
| 		} | ||||
| 		ctx.ServerError("NewPullRequest", err) | ||||
| 		return | ||||
| 	} else if err := pullRequest.PushToBaseRepo(); err != nil { | ||||
| 		ctx.ServerError("PushToBaseRepo", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	notification.NotifyNewPullRequest(pullRequest) | ||||
|  | ||||
| @ -6,6 +6,8 @@ package pull | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"path" | ||||
| 
 | ||||
| 	"code.gitea.io/gitea/models" | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| @ -33,6 +35,10 @@ func NewPullRequest(repo *models.Repository, pull *models.Issue, labelIDs []int6 | ||||
| 	pr.Issue = pull | ||||
| 	pull.PullRequest = pr | ||||
| 
 | ||||
| 	if err := PushToBaseRepo(pr); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	notification.NotifyNewPullRequest(pr) | ||||
| 
 | ||||
| 	return nil | ||||
| @ -60,7 +66,7 @@ func checkForInvalidation(requests models.PullRequestList, repoID int64, doer *m | ||||
| func addHeadRepoTasks(prs []*models.PullRequest) { | ||||
| 	for _, pr := range prs { | ||||
| 		log.Trace("addHeadRepoTasks[%d]: composing new test task", pr.ID) | ||||
| 		if err := pr.PushToBaseRepo(); err != nil { | ||||
| 		if err := PushToBaseRepo(pr); err != nil { | ||||
| 			log.Error("PushToBaseRepo: %v", err) | ||||
| 			continue | ||||
| 		} | ||||
| @ -107,3 +113,45 @@ func AddTestPullRequestTask(doer *models.User, repoID int64, branch string, isSy | ||||
| 		AddToTaskQueue(pr) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // PushToBaseRepo pushes commits from branches of head repository to
 | ||||
| // corresponding branches of base repository.
 | ||||
| // FIXME: Only push branches that are actually updates?
 | ||||
| func PushToBaseRepo(pr *models.PullRequest) (err error) { | ||||
| 	log.Trace("PushToBaseRepo[%d]: pushing commits to base repo '%s'", pr.BaseRepoID, pr.GetGitRefName()) | ||||
| 
 | ||||
| 	headRepoPath := pr.HeadRepo.RepoPath() | ||||
| 	headGitRepo, err := git.OpenRepository(headRepoPath) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("OpenRepository: %v", err) | ||||
| 	} | ||||
| 	defer headGitRepo.Close() | ||||
| 
 | ||||
| 	tmpRemoteName := fmt.Sprintf("tmp-pull-%d", pr.ID) | ||||
| 	if err = headGitRepo.AddRemote(tmpRemoteName, pr.BaseRepo.RepoPath(), false); err != nil { | ||||
| 		return fmt.Errorf("headGitRepo.AddRemote: %v", err) | ||||
| 	} | ||||
| 	// Make sure to remove the remote even if the push fails
 | ||||
| 	defer func() { | ||||
| 		if err := headGitRepo.RemoveRemote(tmpRemoteName); err != nil { | ||||
| 			log.Error("PushToBaseRepo: RemoveRemote: %s", err) | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	headFile := pr.GetGitRefName() | ||||
| 
 | ||||
| 	// Remove head in case there is a conflict.
 | ||||
| 	file := path.Join(pr.BaseRepo.RepoPath(), headFile) | ||||
| 
 | ||||
| 	_ = os.Remove(file) | ||||
| 
 | ||||
| 	if err = git.Push(headRepoPath, git.PushOptions{ | ||||
| 		Remote: tmpRemoteName, | ||||
| 		Branch: fmt.Sprintf("%s:%s", pr.HeadBranch, headFile), | ||||
| 		Force:  true, | ||||
| 	}); err != nil { | ||||
| 		return fmt.Errorf("Push: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
							
								
								
									
										8
									
								
								services/pull/pull_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								services/pull/pull_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| // 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 pull | ||||
| 
 | ||||
| // TODO TestPullRequest_PushToBaseRepo
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user