MCPcopy
hub / github.com/gogs/gogs / UpdatePatch

Method UpdatePatch

internal/database/pull.go:620–658  ·  view source on GitHub ↗

UpdatePatch generates and saves a new patch.

()

Source from the content-addressed store, hash-verified

618
619// UpdatePatch generates and saves a new patch.
620func (pr *PullRequest) UpdatePatch() (err error) {
621 headGitRepo, err := git.Open(pr.HeadRepo.RepoPath())
622 if err != nil {
623 return errors.Newf("open repository: %v", err)
624 }
625
626 // Add a temporary remote.
627 tmpRemote := com.ToStr(time.Now().UnixNano())
628 baseRepoPath := RepoPath(pr.BaseRepo.MustOwner().Name, pr.BaseRepo.Name)
629 err = headGitRepo.RemoteAdd(tmpRemote, baseRepoPath, git.RemoteAddOptions{Fetch: true})
630 if err != nil {
631 return errors.Newf("add remote %q [repo_id: %d]: %v", tmpRemote, pr.HeadRepoID, err)
632 }
633 defer func() {
634 if err := headGitRepo.RemoteRemove(tmpRemote); err != nil {
635 log.Error("Failed to remove remote %q [repo_id: %d]: %v", tmpRemote, pr.HeadRepoID, err)
636 }
637 }()
638
639 remoteBranch := "remotes/" + tmpRemote + "/" + pr.BaseBranch
640 pr.MergeBase, err = headGitRepo.MergeBase(remoteBranch, pr.HeadBranch)
641 if err != nil {
642 return errors.Newf("get merge base: %v", err)
643 } else if err = pr.Update(); err != nil {
644 return errors.Newf("update: %v", err)
645 }
646
647 patch, err := headGitRepo.DiffBinary(pr.MergeBase, pr.HeadBranch)
648 if err != nil {
649 return errors.Newf("get binary patch: %v", err)
650 }
651
652 if err = pr.BaseRepo.SavePatch(pr.Index, patch); err != nil {
653 return errors.Newf("save patch: %v", err)
654 }
655
656 log.Trace("PullRequest[%d].UpdatePatch: patch saved", pr.ID)
657 return nil
658}
659
660// PushToBaseRepo pushes commits from branches of head repository to
661// corresponding branches of base repository.

Callers 2

addHeadRepoTasksFunction · 0.80
NewCommentFunction · 0.80

Calls 9

UpdateMethod · 0.95
RepoPathFunction · 0.85
RepoPathMethod · 0.80
MustOwnerMethod · 0.80
SavePatchMethod · 0.80
RemoteAddMethod · 0.65
RemoteRemoveMethod · 0.65
MergeBaseMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected