@@ -33,11 +33,6 @@ import (
33
33
// Caller should check PR is ready to be merged (review and status checks)
34
34
// FIXME: add repoWorkingPull make sure two merges does not happen at same time.
35
35
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
- }
41
36
42
37
if err = pr .GetHeadRepo (); err != nil {
43
38
log .Error ("GetHeadRepo: %v" , err )
@@ -63,6 +58,61 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor
63
58
go AddTestPullRequestTask (doer , pr .BaseRepo .ID , pr .BaseBranch , false , "" , "" )
64
59
}()
65
60
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
+
66
116
// Clone base repo.
67
117
tmpBasePath , err := createTemporaryRepo (pr )
68
118
if err != nil {
@@ -337,46 +387,6 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor
337
387
outbuf .Reset ()
338
388
errbuf .Reset ()
339
389
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
-
380
390
return nil
381
391
}
382
392
0 commit comments