@@ -74,15 +74,17 @@ auto detectInactiveStablePR(PRTuple t)
7474
7575auto detectPRWithMergeConflicts (PRTuple t)
7676{
77+ import std.typecons : Nullable;
78+
7779 if (t.pr.mergeable.isNull)
7880 {
79- logInfo(" [cron-daily/%s/%d]: detectMerge - mergeable is null." , t.pr.repoSlug, t.pr.number);
81+ logInfo(" [cron-daily/%s/%d/detectMerge]: mergeable is null." , t.pr.repoSlug, t.pr.number);
8082 // repeat request to receive computed mergeable information
8183 foreach (i; 0 .. 4 )
8284 {
8385 import vibe.core.core : sleep;
8486 t.config.waitAfterMergeNullState.sleep;
85- logInfo(" [cron-daily/%s/%d]: detectMerge - repeating request" , t.pr.repoSlug, t.pr.number);
87+ logInfo(" [cron-daily/%s/%d/detectMerge]: repeating request" , t.pr.repoSlug, t.pr.number);
8688 t.pr = t.pr.refresh;
8789 if (! t.pr.mergeable.isNull)
8890 goto mergable;
@@ -91,30 +93,40 @@ auto detectPRWithMergeConflicts(PRTuple t)
9193 }
9294mergable:
9395
94- bool isMergeable;
96+ Nullable ! bool isMergeable;
9597 if (! t.pr.mergeableState.isNull)
9698 {
97- logInfo(" [cron-daily/%s/%d]: mergableState = %s" , t.pr.repoSlug, t.pr.number, t.pr.mergeableState.get );
99+ logInfo(" [cron-daily/%s/%d/detectMerge ]: mergeableState = %s" , t.pr.repoSlug, t.pr.number, t.pr.mergeableState.get );
98100 with (PullRequest.MergeableState)
99101 final switch (t.pr.mergeableState)
100102 {
101- case unknown, checking:
102- // should only be set if mergeable is null
103- return LabelResponse (LabelAction.none, " " );
104- case clean, unstable:
103+ case clean:
104+ // branch is up to date with master and has no conflicts
105+ isMergeable = true ;
106+ break ;
107+ case unstable:
108+ // branch isn't up to date with master, but has no conflicts
105109 isMergeable = true ;
106110 break ;
107111 case dirty:
112+ // GitHub detected conflicts
108113 isMergeable = false ;
109114 break ;
110- // a reviewer has blocked the merge (not observed yet)
115+ case unknown, checking:
116+ // should only be set if mergeable is null
111117 case blocked:
112- return LabelResponse (LabelAction.none, " " );
118+ // the repo requires reviews and the PR hasn't been approved yet
119+ // the repo requires status checks and they have failed
120+ break ;
113121 }
114122 }
115- else
123+
124+ if (isMergeable.isNull)
116125 {
117- logInfo(" [cron-daily/%s/%d]: mergable = %s" , t.pr.repoSlug, t.pr.number, t.pr.mergeable.get );
126+ if (t.pr.mergeable.isNull)
127+ return LabelResponse (LabelAction.none, " " );
128+
129+ logInfo(" [cron-daily/%s/%d/detectMerge]: mergeable = %s" , t.pr.repoSlug, t.pr.number, t.pr.mergeable.get );
118130 isMergeable = t.pr.mergeable.get ;
119131 }
120132
0 commit comments