Skip to content

Commit efe6982

Browse files
committed
split raw merge commands and db-change functions (notify, cache, ...)
1 parent d8522ac commit efe6982

File tree

1 file changed

+55
-45
lines changed

1 file changed

+55
-45
lines changed

services/pull/merge.go

Lines changed: 55 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,6 @@ import (
3333
// Caller should check PR is ready to be merged (review and status checks)
3434
// FIXME: add repoWorkingPull make sure two merges does not happen at same time.
3535
func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repository, mergeStyle models.MergeStyle, message string) (err error) {
36-
binVersion, err := git.BinVersion()
37-
if err != nil {
38-
log.Error("git.BinVersion: %v", err)
39-
return fmt.Errorf("Unable to get git version: %v", err)
40-
}
4136

4237
if err = pr.GetHeadRepo(); err != nil {
4338
log.Error("GetHeadRepo: %v", err)
@@ -63,6 +58,61 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor
6358
go AddTestPullRequestTask(doer, pr.BaseRepo.ID, pr.BaseBranch, false, "", "")
6459
}()
6560

61+
if err := rawMerge(pr, doer, mergeStyle, message); err != nil {
62+
return err
63+
}
64+
65+
pr.MergedCommitID, err = baseGitRepo.GetBranchCommitID(pr.BaseBranch)
66+
if err != nil {
67+
return fmt.Errorf("GetBranchCommit: %v", err)
68+
}
69+
70+
pr.MergedUnix = timeutil.TimeStampNow()
71+
pr.Merger = doer
72+
pr.MergerID = doer.ID
73+
74+
if err = pr.SetMerged(); err != nil {
75+
log.Error("setMerged [%d]: %v", pr.ID, err)
76+
}
77+
78+
notification.NotifyMergePullRequest(pr, doer, baseGitRepo)
79+
80+
// Reset cached commit count
81+
cache.Remove(pr.Issue.Repo.GetCommitsCountCacheKey(pr.BaseBranch, true))
82+
83+
// Resolve cross references
84+
refs, err := pr.ResolveCrossReferences()
85+
if err != nil {
86+
log.Error("ResolveCrossReferences: %v", err)
87+
return nil
88+
}
89+
90+
for _, ref := range refs {
91+
if err = ref.LoadIssue(); err != nil {
92+
return err
93+
}
94+
if err = ref.Issue.LoadRepo(); err != nil {
95+
return err
96+
}
97+
close := (ref.RefAction == references.XRefActionCloses)
98+
if close != ref.Issue.IsClosed {
99+
if err = issue_service.ChangeStatus(ref.Issue, doer, close); err != nil {
100+
return err
101+
}
102+
}
103+
}
104+
105+
return nil
106+
}
107+
108+
// rawMerge perform the merge operation without changing any pull information in database
109+
func rawMerge(pr *models.PullRequest, doer *models.User, mergeStyle models.MergeStyle, message string) (err error) {
110+
binVersion, err := git.BinVersion()
111+
if err != nil {
112+
log.Error("git.BinVersion: %v", err)
113+
return fmt.Errorf("Unable to get git version: %v", err)
114+
}
115+
66116
// Clone base repo.
67117
tmpBasePath, err := createTemporaryRepo(pr)
68118
if err != nil {
@@ -337,46 +387,6 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor
337387
outbuf.Reset()
338388
errbuf.Reset()
339389

340-
pr.MergedCommitID, err = baseGitRepo.GetBranchCommitID(pr.BaseBranch)
341-
if err != nil {
342-
return fmt.Errorf("GetBranchCommit: %v", err)
343-
}
344-
345-
pr.MergedUnix = timeutil.TimeStampNow()
346-
pr.Merger = doer
347-
pr.MergerID = doer.ID
348-
349-
if err = pr.SetMerged(); err != nil {
350-
log.Error("setMerged [%d]: %v", pr.ID, err)
351-
}
352-
353-
notification.NotifyMergePullRequest(pr, doer, baseGitRepo)
354-
355-
// Reset cached commit count
356-
cache.Remove(pr.Issue.Repo.GetCommitsCountCacheKey(pr.BaseBranch, true))
357-
358-
// Resolve cross references
359-
refs, err := pr.ResolveCrossReferences()
360-
if err != nil {
361-
log.Error("ResolveCrossReferences: %v", err)
362-
return nil
363-
}
364-
365-
for _, ref := range refs {
366-
if err = ref.LoadIssue(); err != nil {
367-
return err
368-
}
369-
if err = ref.Issue.LoadRepo(); err != nil {
370-
return err
371-
}
372-
close := (ref.RefAction == references.XRefActionCloses)
373-
if close != ref.Issue.IsClosed {
374-
if err = issue_service.ChangeStatus(ref.Issue, doer, close); err != nil {
375-
return err
376-
}
377-
}
378-
}
379-
380390
return nil
381391
}
382392

0 commit comments

Comments
 (0)