@@ -1866,6 +1866,7 @@ func TestSubmit_PendingModifyCompletion(t *testing.T) {
18661866 priorDeleted bool
18671867 mergedBase bool
18681868 retry bool
1869+ mergeOnRetry bool
18691870 }{
18701871 {name : "one existing PR" , branches : 1 },
18711872 {name : "one new PR" , branches : 1 , newPR : true },
@@ -1883,6 +1884,7 @@ func TestSubmit_PendingModifyCompletion(t *testing.T) {
18831884 {name : "multiple PRs complete" , branches : 3 },
18841885 {name : "multiple PRs after partial unstack" , branches : 3 , mergedBase : true },
18851886 {name : "retry push after partial unstack" , branches : 3 , mergedBase : true , failure : "push" , retry : true },
1887+ {name : "released PR merged before retry" , branches : 3 , mergedBase : true , failure : "push" , retry : true , mergeOnRetry : true },
18861888 {name : "retry creation after partial unstack" , branches : 3 , mergedBase : true , failure : "stack" , retry : true },
18871889 {name : "multiple PRs failed lookup" , branches : 3 , failure : "lookup" },
18881890 {name : "multiple PRs failed creation" , branches : 3 , newPR : true , failure : "create" },
@@ -1996,6 +1998,9 @@ func TestSubmit_PendingModifyCompletion(t *testing.T) {
19961998 if branch == target && (tc .failure == "lookup" || (tc .failure == "refresh" && baseUpdates > 0 )) {
19971999 return nil , assert .AnError
19982000 }
2001+ if pr := prs [branch ]; pr != nil && pr .Merged {
2002+ return nil , nil
2003+ }
19992004 return prs [branch ], nil
20002005 },
20012006 UnstackFn : func (number int ) (* github.RemoteStack , bool , error ) {
@@ -2084,7 +2089,15 @@ func TestSubmit_PendingModifyCompletion(t *testing.T) {
20842089 }
20852090 }
20862091 if tc .retry {
2092+ if tc .mergeOnRetry {
2093+ before , loadErr := stack .Load (dir )
2094+ require .NoError (t , loadErr )
2095+ assert .Equal (t , "42" , before .Stacks [0 ].ID )
2096+ prs ["b2" ].Merged = true
2097+ prs ["b2" ].State = "MERGED"
2098+ }
20872099 tc .failure = ""
2100+ pushStart := len (pushes )
20882101 retryCfg , retryOut , retryErr := config .NewTestConfig ()
20892102 retryCfg .GitHubClientOverride = client
20902103 err := runSubmit (retryCfg , & submitOptions {auto : true })
@@ -2096,6 +2109,15 @@ func TestSubmit_PendingModifyCompletion(t *testing.T) {
20962109 require .Len (t , saved .Stacks , 1 )
20972110 assert .Equal (t , s .BranchNames (), saved .Stacks [0 ].BranchNames ())
20982111 assert .Equal (t , "77" , saved .Stacks [0 ].ID )
2112+ if tc .mergeOnRetry {
2113+ assert .Equal (t , []string {"b1" , "b3" }, pushes [pushStart :])
2114+ assert .Zero (t , createdPRs )
2115+ require .NotNil (t , replacement )
2116+ assert .Equal (t , []int {10 , 12 }, replacement .PullRequests )
2117+ mergedIndex := saved .Stacks [0 ].IndexOf ("b2" )
2118+ require .NotEqual (t , - 1 , mergedIndex )
2119+ assert .True (t , saved .Stacks [0 ].Branches [mergedIndex ].IsMerged ())
2120+ }
20992121 }
21002122 if tc .priorDeleted {
21012123 assert .Zero (t , unstackCalls )
0 commit comments