mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-08-24 21:46:52 +01:00
Deploy code docs to GitHub Pages for workflow run 233
Commit: aec2124051
This commit is contained in:
@@ -762,175 +762,198 @@ $(function() {
|
||||
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keywordflow">foreach</span> (var I <span class="keywordflow">in</span> search)</div>
|
||||
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  {</div>
|
||||
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  revInfoWereLookingFor = dbPull</div>
|
||||
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  .Where(x => model.NewTestMerges.Any(z =></div>
|
||||
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  x.PrimaryTestMerge.Number == z.Number</div>
|
||||
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  && x.PrimaryTestMerge.PullRequestRevision.StartsWith(z.PullRequestRevision, StringComparison.Ordinal)</div>
|
||||
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  && (x.PrimaryTestMerge.Comment?.Trim().ToUpperInvariant() == z.Comment?.Trim().ToUpperInvariant() || z.Comment == <span class="keyword">null</span>))</div>
|
||||
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  && x.ActiveTestMerges.Select(y => y.TestMerge).All(y => appliedTestMergeIds.Contains(y.Id)))</div>
|
||||
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  .FirstOrDefault();</div>
|
||||
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  </div>
|
||||
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  {</div>
|
||||
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  lastGoodRevInfo = revInfoWereLookingFor;</div>
|
||||
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  appliedTestMergeIds.Add(revInfoWereLookingFor.PrimaryTestMerge.Id);</div>
|
||||
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  search.Remove(I);</div>
|
||||
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  }</div>
|
||||
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  }</div>
|
||||
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  }</div>
|
||||
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="keywordflow">while</span> (revInfoWereLookingFor != <span class="keyword">null</span> && search.Count > 0);</div>
|
||||
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  .Where(testRevInfo =></div>
|
||||
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  {</div>
|
||||
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  var testMergeMatch = model.NewTestMerges.Any(testTestMerge =></div>
|
||||
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  {</div>
|
||||
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  var numberMatch = testRevInfo.PrimaryTestMerge.Number == testTestMerge.Number;</div>
|
||||
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="keywordflow">if</span> (!numberMatch)</div>
|
||||
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  </div>
|
||||
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  var shaMatch = testRevInfo.PrimaryTestMerge.PullRequestRevision.StartsWith(</div>
|
||||
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  testTestMerge.PullRequestRevision,</div>
|
||||
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  StringComparison.Ordinal);</div>
|
||||
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  if (!shaMatch)</div>
|
||||
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  </div>
|
||||
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  var commentMatch = testRevInfo.PrimaryTestMerge.Comment == testTestMerge.Comment;</div>
|
||||
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> commentMatch;</div>
|
||||
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  });</div>
|
||||
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  </div>
|
||||
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  revInfoWereLookingFor = lastGoodRevInfo;</div>
|
||||
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  needToApplyRemainingPrs = search.Count != 0;</div>
|
||||
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keywordflow">if</span> (needToApplyRemainingPrs)</div>
|
||||
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  model.NewTestMerges = search;</div>
|
||||
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  }</div>
|
||||
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  needToApplyRemainingPrs = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  }</div>
|
||||
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  }</div>
|
||||
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  </div>
|
||||
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  {</div>
|
||||
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="comment">// goteem</span></div>
|
||||
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#ae5655868c2b2b913046ecf61934ce119">Logger</a>.LogDebug(<span class="stringliteral">"Reusing existing SHA {0}..."</span>, revInfoWereLookingFor.CommitSha);</div>
|
||||
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  await repo.ResetToSha(revInfoWereLookingFor.CommitSha, NextProgressReporter(), cancellationToken).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  lastRevisionInfo = revInfoWereLookingFor;</div>
|
||||
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  }</div>
|
||||
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  </div>
|
||||
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="keywordflow">if</span> (needToApplyRemainingPrs)</div>
|
||||
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  {</div>
|
||||
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">foreach</span> (var I <span class="keywordflow">in</span> model.NewTestMerges)</div>
|
||||
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  {</div>
|
||||
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  Octokit.PullRequest pr = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keywordtype">string</span> errorMessage = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  </div>
|
||||
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <span class="keywordflow">if</span> (lastRevisionInfo.ActiveTestMerges.Any(x => x.TestMerge.Number == I.Number))</div>
|
||||
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(<a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a1a6adb59dd51244efabf4e548e7075c8">ErrorCode</a>.RepoDuplicateTestMerge);</div>
|
||||
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  </div>
|
||||
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  Exception exception = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordflow">try</span></div>
|
||||
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  {</div>
|
||||
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="comment">// load from cache if possible</span></div>
|
||||
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">if</span> (prMap == <span class="keyword">null</span> || !prMap.TryGetValue(I.Number, out pr))</div>
|
||||
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  pr = await gitHubClient</div>
|
||||
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  .PullRequest</div>
|
||||
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  .Get(repoOwner, repoName, I.Number)</div>
|
||||
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  .WithToken(ct)</div>
|
||||
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  .ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  }</div>
|
||||
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">catch</span> (Octokit.RateLimitExceededException ex)</div>
|
||||
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  {</div>
|
||||
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="comment">// you look at your anonymous access and sigh</span></div>
|
||||
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: RATE LIMITED"</span>;</div>
|
||||
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  }</div>
|
||||
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keywordflow">catch</span> (Octokit.AuthorizationException ex)</div>
|
||||
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  {</div>
|
||||
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: BAD CREDENTIALS"</span>;</div>
|
||||
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  }</div>
|
||||
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keywordflow">catch</span> (Octokit.NotFoundException ex)</div>
|
||||
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  {</div>
|
||||
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="comment">// you look at your shithub and sigh</span></div>
|
||||
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: PULL REQUEST NOT FOUND"</span>;</div>
|
||||
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  }</div>
|
||||
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  </div>
|
||||
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keywordflow">if</span> (exception != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#ae5655868c2b2b913046ecf61934ce119">Logger</a>.LogWarning(exception, <span class="stringliteral">"Error retrieving pull request metadata!"</span>);</div>
|
||||
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  </div>
|
||||
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <span class="comment">// we want to take the earliest truth possible to prevent RCEs, if this fails AddTestMerge will set it</span></div>
|
||||
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">if</span> (I.PullRequestRevision == <span class="keyword">null</span> && pr != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  I.PullRequestRevision = pr.Head.Sha;</div>
|
||||
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  </div>
|
||||
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  var mergeResult = await repo.AddTestMerge(</div>
|
||||
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  I,</div>
|
||||
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  committerName,</div>
|
||||
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  currentModel.CommitterEmail,</div>
|
||||
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  currentModel.AccessUser,</div>
|
||||
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  currentModel.AccessToken,</div>
|
||||
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  NextProgressReporter(),</div>
|
||||
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  ct).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  </div>
|
||||
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="keywordflow">if</span> (!mergeResult.HasValue)</div>
|
||||
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(</div>
|
||||
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a1a6adb59dd51244efabf4e548e7075c8">ErrorCode</a>.RepoTestMergeConflict,</div>
|
||||
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(</div>
|
||||
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  $<span class="stringliteral">"Merge of PR #{I.Number} at {I.PullRequestRevision.Substring(0, 7)} conflicted!"</span>));</div>
|
||||
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  </div>
|
||||
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  ++doneSteps;</div>
|
||||
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  </div>
|
||||
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="comment">// MergedBy will be set later</span></div>
|
||||
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  var tm = <span class="keyword">new</span> Models.TestMerge</div>
|
||||
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  {</div>
|
||||
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  Author = pr?.User.Login ?? errorMessage,</div>
|
||||
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  BodyAtMerge = pr?.Body ?? errorMessage ?? String.Empty,</div>
|
||||
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  MergedAt = DateTimeOffset.Now,</div>
|
||||
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  TitleAtMerge = pr?.Title ?? errorMessage ?? String.Empty,</div>
|
||||
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  Comment = I.Comment,</div>
|
||||
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  Number = I.Number,</div>
|
||||
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  PullRequestRevision = I.PullRequestRevision,</div>
|
||||
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  Url = pr?.HtmlUrl ?? errorMessage</div>
|
||||
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  };</div>
|
||||
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  </div>
|
||||
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  await UpdateRevInfo(tm).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div>
|
||||
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  }</div>
|
||||
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div>
|
||||
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  </div>
|
||||
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  var currentHead = repo.Head;</div>
|
||||
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="keywordflow">if</span> (startSha != currentHead || (postUpdateSha != <span class="keyword">null</span> && postUpdateSha != currentHead))</div>
|
||||
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  {</div>
|
||||
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  await repo.Sychronize(currentModel.AccessUser, currentModel.AccessToken, currentModel.CommitterName, currentModel.CommitterEmail, NextProgressReporter(), <span class="keyword">false</span>, ct).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  await UpdateRevInfo().ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  }</div>
|
||||
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  </div>
|
||||
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">return</span> <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  }</div>
|
||||
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keywordflow">catch</span></div>
|
||||
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  {</div>
|
||||
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  doneSteps = 0;</div>
|
||||
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  numSteps = 2;</div>
|
||||
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  </div>
|
||||
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="comment">// Forget what we've done and abort</span></div>
|
||||
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="comment">// DCTx2: Cancellation token is for job, operations should always run</span></div>
|
||||
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  await repo.CheckoutObject(startReference ?? startSha, NextProgressReporter(), <span class="keywordflow">default</span>).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <span class="keywordflow">if</span> (startReference != <span class="keyword">null</span> && repo.Head != startSha)</div>
|
||||
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  await repo.ResetToSha(startSha, NextProgressReporter(), <span class="keywordflow">default</span>).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  progressReporter(100);</div>
|
||||
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="keywordflow">throw</span>;</div>
|
||||
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  }</div>
|
||||
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  }</div>
|
||||
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  </div>
|
||||
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  var job = <span class="keyword">new</span> Models.Job</div>
|
||||
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  {</div>
|
||||
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  Description = description,</div>
|
||||
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  StartedBy = <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_security_1_1_authentication_context.html">AuthenticationContext</a>.<a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_security_1_1_authentication_context.html#a0846ac9679599a99923987863edb0d5c">User</a>,</div>
|
||||
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <a class="code" href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_instance.html">Instance</a> = <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#a19f89ec03ffd6f2bf5cab5214d5e6bb8">Instance</a>,</div>
|
||||
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  CancelRightsType = <a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a7b02c8c3dadd90810a9eaa24712a0a20">RightsType</a>.Repository,</div>
|
||||
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  CancelRight = (ulong)<a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a95336db3db40dbae9701ef6e51240f39">RepositoryRights</a>.CancelPendingChanges,</div>
|
||||
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  };</div>
|
||||
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  </div>
|
||||
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <span class="comment">// Time to access git, do it in a job</span></div>
|
||||
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  await <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_repository_controller.html#ad15c0217bf9e5ce926a198191d0a04c4">jobManager</a>.<a class="code" href="interface_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_i_job_manager.html#a21be789f798adf9985f2432d3499b4cd">RegisterOperation</a>(</div>
|
||||
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  job,</div>
|
||||
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  (core, databaseContextFactory, paramJob, progressReporter, ct) =></div>
|
||||
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  UpdateCallbackThatDesperatelyNeedsRefactoring(</div>
|
||||
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  core,</div>
|
||||
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  databaseContextFactory,</div>
|
||||
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  progressReporter,</div>
|
||||
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  ct),</div>
|
||||
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  cancellationToken)</div>
|
||||
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  .ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  </div>
|
||||
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  api.ActiveJob = job.ToApi();</div>
|
||||
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="keywordflow">return</span> Accepted(api);</div>
|
||||
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  }</div>
|
||||
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="preprocessor"> #pragma warning restore CA1502, CA1505</span></div>
|
||||
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  }</div>
|
||||
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> }</div>
|
||||
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordflow">if</span> (!testMergeMatch)</div>
|
||||
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  </div>
|
||||
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  var previousTestMergesMatch = testRevInfo</div>
|
||||
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  .ActiveTestMerges</div>
|
||||
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  .Select(previousRevInfoTestMerge => previousRevInfoTestMerge.TestMerge)</div>
|
||||
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  .All(previousTestMerge => appliedTestMergeIds.Contains(previousTestMerge.Id));</div>
|
||||
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  </div>
|
||||
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordflow">return</span> previousTestMergesMatch;</div>
|
||||
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  })</div>
|
||||
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  .FirstOrDefault();</div>
|
||||
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  </div>
|
||||
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  {</div>
|
||||
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  lastGoodRevInfo = revInfoWereLookingFor;</div>
|
||||
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  appliedTestMergeIds.Add(revInfoWereLookingFor.PrimaryTestMerge.Id);</div>
|
||||
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  search.Remove(I);</div>
|
||||
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  }</div>
|
||||
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  }</div>
|
||||
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  }</div>
|
||||
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">while</span> (revInfoWereLookingFor != <span class="keyword">null</span> && search.Count > 0);</div>
|
||||
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  </div>
|
||||
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  revInfoWereLookingFor = lastGoodRevInfo;</div>
|
||||
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  needToApplyRemainingPrs = search.Count != 0;</div>
|
||||
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <span class="keywordflow">if</span> (needToApplyRemainingPrs)</div>
|
||||
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  model.NewTestMerges = search;</div>
|
||||
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div>
|
||||
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  needToApplyRemainingPrs = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  }</div>
|
||||
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  }</div>
|
||||
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  </div>
|
||||
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  {</div>
|
||||
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="comment">// goteem</span></div>
|
||||
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#ae5655868c2b2b913046ecf61934ce119">Logger</a>.LogDebug(<span class="stringliteral">"Reusing existing SHA {0}..."</span>, revInfoWereLookingFor.CommitSha);</div>
|
||||
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  await repo.ResetToSha(revInfoWereLookingFor.CommitSha, NextProgressReporter(), cancellationToken).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  lastRevisionInfo = revInfoWereLookingFor;</div>
|
||||
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  }</div>
|
||||
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  </div>
|
||||
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">if</span> (needToApplyRemainingPrs)</div>
|
||||
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  {</div>
|
||||
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">foreach</span> (var I <span class="keywordflow">in</span> model.NewTestMerges)</div>
|
||||
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  {</div>
|
||||
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  Octokit.PullRequest pr = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordtype">string</span> errorMessage = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  </div>
|
||||
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <span class="keywordflow">if</span> (lastRevisionInfo.ActiveTestMerges.Any(x => x.TestMerge.Number == I.Number))</div>
|
||||
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(<a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a1a6adb59dd51244efabf4e548e7075c8">ErrorCode</a>.RepoDuplicateTestMerge);</div>
|
||||
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  </div>
|
||||
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  Exception exception = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="keywordflow">try</span></div>
|
||||
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  {</div>
|
||||
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="comment">// load from cache if possible</span></div>
|
||||
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="keywordflow">if</span> (prMap == <span class="keyword">null</span> || !prMap.TryGetValue(I.Number, out pr))</div>
|
||||
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  pr = await gitHubClient</div>
|
||||
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  .PullRequest</div>
|
||||
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  .Get(repoOwner, repoName, I.Number)</div>
|
||||
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  .WithToken(ct)</div>
|
||||
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  .ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div>
|
||||
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keywordflow">catch</span> (Octokit.RateLimitExceededException ex)</div>
|
||||
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  {</div>
|
||||
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="comment">// you look at your anonymous access and sigh</span></div>
|
||||
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: RATE LIMITED"</span>;</div>
|
||||
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  }</div>
|
||||
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordflow">catch</span> (Octokit.AuthorizationException ex)</div>
|
||||
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  {</div>
|
||||
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: BAD CREDENTIALS"</span>;</div>
|
||||
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  }</div>
|
||||
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="keywordflow">catch</span> (Octokit.NotFoundException ex)</div>
|
||||
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  {</div>
|
||||
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="comment">// you look at your shithub and sigh</span></div>
|
||||
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: PULL REQUEST NOT FOUND"</span>;</div>
|
||||
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  }</div>
|
||||
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  </div>
|
||||
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">if</span> (exception != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#ae5655868c2b2b913046ecf61934ce119">Logger</a>.LogWarning(exception, <span class="stringliteral">"Error retrieving pull request metadata!"</span>);</div>
|
||||
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  </div>
|
||||
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="comment">// we want to take the earliest truth possible to prevent RCEs, if this fails AddTestMerge will set it</span></div>
|
||||
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">if</span> (I.PullRequestRevision == <span class="keyword">null</span> && pr != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  I.PullRequestRevision = pr.Head.Sha;</div>
|
||||
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  </div>
|
||||
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  var mergeResult = await repo.AddTestMerge(</div>
|
||||
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  I,</div>
|
||||
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  committerName,</div>
|
||||
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  currentModel.CommitterEmail,</div>
|
||||
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  currentModel.AccessUser,</div>
|
||||
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  currentModel.AccessToken,</div>
|
||||
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  NextProgressReporter(),</div>
|
||||
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  ct).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  </div>
|
||||
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">if</span> (!mergeResult.HasValue)</div>
|
||||
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(</div>
|
||||
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a1a6adb59dd51244efabf4e548e7075c8">ErrorCode</a>.RepoTestMergeConflict,</div>
|
||||
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(</div>
|
||||
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  $<span class="stringliteral">"Merge of PR #{I.Number} at {I.PullRequestRevision.Substring(0, 7)} conflicted!"</span>));</div>
|
||||
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  </div>
|
||||
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  ++doneSteps;</div>
|
||||
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  </div>
|
||||
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="comment">// MergedBy will be set later</span></div>
|
||||
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  var tm = <span class="keyword">new</span> Models.TestMerge</div>
|
||||
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  {</div>
|
||||
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  Author = pr?.User.Login ?? errorMessage,</div>
|
||||
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  BodyAtMerge = pr?.Body ?? errorMessage ?? String.Empty,</div>
|
||||
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  MergedAt = DateTimeOffset.Now,</div>
|
||||
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  TitleAtMerge = pr?.Title ?? errorMessage ?? String.Empty,</div>
|
||||
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  Comment = I.Comment,</div>
|
||||
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  Number = I.Number,</div>
|
||||
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  PullRequestRevision = I.PullRequestRevision,</div>
|
||||
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  Url = pr?.HtmlUrl ?? errorMessage</div>
|
||||
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  };</div>
|
||||
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  </div>
|
||||
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  await UpdateRevInfo(tm).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  }</div>
|
||||
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  }</div>
|
||||
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div>
|
||||
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  </div>
|
||||
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  var currentHead = repo.Head;</div>
|
||||
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="keywordflow">if</span> (startSha != currentHead || (postUpdateSha != <span class="keyword">null</span> && postUpdateSha != currentHead))</div>
|
||||
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  {</div>
|
||||
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  await repo.Sychronize(currentModel.AccessUser, currentModel.AccessToken, currentModel.CommitterName, currentModel.CommitterEmail, NextProgressReporter(), <span class="keyword">false</span>, ct).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  await UpdateRevInfo().ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  }</div>
|
||||
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  </div>
|
||||
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <span class="keywordflow">return</span> <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  }</div>
|
||||
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <span class="keywordflow">catch</span></div>
|
||||
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  {</div>
|
||||
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  doneSteps = 0;</div>
|
||||
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  numSteps = 2;</div>
|
||||
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  </div>
|
||||
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <span class="comment">// Forget what we've done and abort</span></div>
|
||||
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="comment">// DCTx2: Cancellation token is for job, operations should always run</span></div>
|
||||
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  await repo.CheckoutObject(startReference ?? startSha, NextProgressReporter(), <span class="keywordflow">default</span>).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="keywordflow">if</span> (startReference != <span class="keyword">null</span> && repo.Head != startSha)</div>
|
||||
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  await repo.ResetToSha(startSha, NextProgressReporter(), <span class="keywordflow">default</span>).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  progressReporter(100);</div>
|
||||
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">throw</span>;</div>
|
||||
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  }</div>
|
||||
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  }</div>
|
||||
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  </div>
|
||||
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  var job = <span class="keyword">new</span> Models.Job</div>
|
||||
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  {</div>
|
||||
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  Description = description,</div>
|
||||
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  StartedBy = <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_security_1_1_authentication_context.html">AuthenticationContext</a>.<a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_security_1_1_authentication_context.html#a0846ac9679599a99923987863edb0d5c">User</a>,</div>
|
||||
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <a class="code" href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_instance.html">Instance</a> = <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#a19f89ec03ffd6f2bf5cab5214d5e6bb8">Instance</a>,</div>
|
||||
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  CancelRightsType = <a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a7b02c8c3dadd90810a9eaa24712a0a20">RightsType</a>.Repository,</div>
|
||||
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  CancelRight = (ulong)<a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a95336db3db40dbae9701ef6e51240f39">RepositoryRights</a>.CancelPendingChanges,</div>
|
||||
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  };</div>
|
||||
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  </div>
|
||||
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="comment">// Time to access git, do it in a job</span></div>
|
||||
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  await <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_repository_controller.html#ad15c0217bf9e5ce926a198191d0a04c4">jobManager</a>.<a class="code" href="interface_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_i_job_manager.html#a21be789f798adf9985f2432d3499b4cd">RegisterOperation</a>(</div>
|
||||
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  job,</div>
|
||||
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  (core, databaseContextFactory, paramJob, progressReporter, ct) =></div>
|
||||
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  UpdateCallbackThatDesperatelyNeedsRefactoring(</div>
|
||||
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  core,</div>
|
||||
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  databaseContextFactory,</div>
|
||||
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  progressReporter,</div>
|
||||
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  ct),</div>
|
||||
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  cancellationToken)</div>
|
||||
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  .ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  </div>
|
||||
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  api.ActiveJob = job.ToApi();</div>
|
||||
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="keywordflow">return</span> Accepted(api);</div>
|
||||
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  }</div>
|
||||
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="preprocessor"> #pragma warning restore CA1502, CA1505</span></div>
|
||||
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  }</div>
|
||||
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> }</div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
<div class="ttc" id="aclass_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_instance_required_controller_html_a1f3dffb9da170f16374e58f333ece5a7"><div class="ttname"><a href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_instance_required_controller.html#a1f3dffb9da170f16374e58f333ece5a7">Tgstation.Server.Host.Controllers.InstanceRequiredController.instanceManager</a></div><div class="ttdeci">readonly IInstanceManager instanceManager</div><div class="ttdoc">The IInstanceManager for the InstanceRequiredController.</div><div class="ttdef"><b>Definition:</b> <a href="_instance_required_controller_8cs_source.html#l00022">InstanceRequiredController.cs:22</a></div></div>
|
||||
<div class="ttc" id="aclass_tgstation_1_1_server_1_1_api_1_1_models_1_1_repository_html"><div class="ttname"><a href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_repository.html">Tgstation.Server.Api.Models.Repository</a></div><div class="ttdoc">Represents a git repository</div><div class="ttdef"><b>Definition:</b> <a href="_tgstation_8_server_8_api_2_models_2_repository_8cs_source.html#l00009">Repository.cs:10</a></div></div>
|
||||
|
||||
+188
-165
@@ -1261,172 +1261,195 @@ Here is the call graph for this function:</div>
|
||||
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keywordflow">foreach</span> (var I <span class="keywordflow">in</span> search)</div>
|
||||
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  {</div>
|
||||
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  revInfoWereLookingFor = dbPull</div>
|
||||
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  .Where(x => model.<a class="code" href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_repository.html#ad4bb63897d14c742a2c52a159ec75641">NewTestMerges</a>.Any(z =></div>
|
||||
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  x.PrimaryTestMerge.Number == z.Number</div>
|
||||
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  && x.PrimaryTestMerge.PullRequestRevision.StartsWith(z.PullRequestRevision, StringComparison.Ordinal)</div>
|
||||
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  && (x.PrimaryTestMerge.Comment?.Trim().ToUpperInvariant() == z.Comment?.Trim().ToUpperInvariant() || z.Comment == <span class="keyword">null</span>))</div>
|
||||
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  && x.ActiveTestMerges.Select(y => y.TestMerge).All(y => appliedTestMergeIds.Contains(y.Id)))</div>
|
||||
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  .FirstOrDefault();</div>
|
||||
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  </div>
|
||||
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  {</div>
|
||||
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  lastGoodRevInfo = revInfoWereLookingFor;</div>
|
||||
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  appliedTestMergeIds.Add(revInfoWereLookingFor.PrimaryTestMerge.Id);</div>
|
||||
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  search.Remove(I);</div>
|
||||
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  }</div>
|
||||
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  }</div>
|
||||
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  }</div>
|
||||
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="keywordflow">while</span> (revInfoWereLookingFor != <span class="keyword">null</span> && search.Count > 0);</div>
|
||||
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  .Where(testRevInfo =></div>
|
||||
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  {</div>
|
||||
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  var testMergeMatch = model.<a class="code" href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_repository.html#ad4bb63897d14c742a2c52a159ec75641">NewTestMerges</a>.Any(testTestMerge =></div>
|
||||
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  {</div>
|
||||
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  var numberMatch = testRevInfo.PrimaryTestMerge.Number == testTestMerge.Number;</div>
|
||||
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="keywordflow">if</span> (!numberMatch)</div>
|
||||
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  </div>
|
||||
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  var shaMatch = testRevInfo.PrimaryTestMerge.PullRequestRevision.StartsWith(</div>
|
||||
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  testTestMerge.PullRequestRevision,</div>
|
||||
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  StringComparison.Ordinal);</div>
|
||||
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  if (!shaMatch)</div>
|
||||
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  </div>
|
||||
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  var commentMatch = testRevInfo.PrimaryTestMerge.Comment == testTestMerge.Comment;</div>
|
||||
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> commentMatch;</div>
|
||||
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  });</div>
|
||||
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  </div>
|
||||
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  revInfoWereLookingFor = lastGoodRevInfo;</div>
|
||||
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  needToApplyRemainingPrs = search.Count != 0;</div>
|
||||
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keywordflow">if</span> (needToApplyRemainingPrs)</div>
|
||||
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  model.<a class="code" href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_repository.html#ad4bb63897d14c742a2c52a159ec75641">NewTestMerges</a> = search;</div>
|
||||
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  }</div>
|
||||
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  needToApplyRemainingPrs = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  }</div>
|
||||
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  }</div>
|
||||
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  </div>
|
||||
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  {</div>
|
||||
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="comment">// goteem</span></div>
|
||||
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#ae5655868c2b2b913046ecf61934ce119">Logger</a>.LogDebug(<span class="stringliteral">"Reusing existing SHA {0}..."</span>, revInfoWereLookingFor.CommitSha);</div>
|
||||
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  await repo.ResetToSha(revInfoWereLookingFor.CommitSha, NextProgressReporter(), cancellationToken).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  lastRevisionInfo = revInfoWereLookingFor;</div>
|
||||
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  }</div>
|
||||
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  </div>
|
||||
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="keywordflow">if</span> (needToApplyRemainingPrs)</div>
|
||||
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  {</div>
|
||||
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">foreach</span> (var I <span class="keywordflow">in</span> model.<a class="code" href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_repository.html#ad4bb63897d14c742a2c52a159ec75641">NewTestMerges</a>)</div>
|
||||
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  {</div>
|
||||
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  Octokit.PullRequest pr = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keywordtype">string</span> errorMessage = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  </div>
|
||||
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <span class="keywordflow">if</span> (lastRevisionInfo.ActiveTestMerges.Any(x => x.TestMerge.Number == I.Number))</div>
|
||||
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(<a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a1a6adb59dd51244efabf4e548e7075c8">ErrorCode</a>.RepoDuplicateTestMerge);</div>
|
||||
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  </div>
|
||||
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  Exception exception = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordflow">try</span></div>
|
||||
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  {</div>
|
||||
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="comment">// load from cache if possible</span></div>
|
||||
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">if</span> (prMap == <span class="keyword">null</span> || !prMap.TryGetValue(I.Number, out pr))</div>
|
||||
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  pr = await gitHubClient</div>
|
||||
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  .PullRequest</div>
|
||||
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  .Get(repoOwner, repoName, I.Number)</div>
|
||||
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  .WithToken(ct)</div>
|
||||
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  .ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  }</div>
|
||||
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">catch</span> (Octokit.RateLimitExceededException ex)</div>
|
||||
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  {</div>
|
||||
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="comment">// you look at your anonymous access and sigh</span></div>
|
||||
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: RATE LIMITED"</span>;</div>
|
||||
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  }</div>
|
||||
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keywordflow">catch</span> (Octokit.AuthorizationException ex)</div>
|
||||
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  {</div>
|
||||
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: BAD CREDENTIALS"</span>;</div>
|
||||
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  }</div>
|
||||
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keywordflow">catch</span> (Octokit.NotFoundException ex)</div>
|
||||
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  {</div>
|
||||
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="comment">// you look at your shithub and sigh</span></div>
|
||||
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: PULL REQUEST NOT FOUND"</span>;</div>
|
||||
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  }</div>
|
||||
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  </div>
|
||||
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keywordflow">if</span> (exception != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#ae5655868c2b2b913046ecf61934ce119">Logger</a>.LogWarning(exception, <span class="stringliteral">"Error retrieving pull request metadata!"</span>);</div>
|
||||
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  </div>
|
||||
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <span class="comment">// we want to take the earliest truth possible to prevent RCEs, if this fails AddTestMerge will set it</span></div>
|
||||
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">if</span> (I.PullRequestRevision == <span class="keyword">null</span> && pr != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  I.PullRequestRevision = pr.Head.Sha;</div>
|
||||
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  </div>
|
||||
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  var mergeResult = await repo.AddTestMerge(</div>
|
||||
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  I,</div>
|
||||
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  committerName,</div>
|
||||
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  currentModel.CommitterEmail,</div>
|
||||
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  currentModel.AccessUser,</div>
|
||||
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  currentModel.AccessToken,</div>
|
||||
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  NextProgressReporter(),</div>
|
||||
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  ct).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  </div>
|
||||
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="keywordflow">if</span> (!mergeResult.HasValue)</div>
|
||||
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(</div>
|
||||
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a1a6adb59dd51244efabf4e548e7075c8">ErrorCode</a>.RepoTestMergeConflict,</div>
|
||||
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(</div>
|
||||
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  $<span class="stringliteral">"Merge of PR #{I.Number} at {I.PullRequestRevision.Substring(0, 7)} conflicted!"</span>));</div>
|
||||
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  </div>
|
||||
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  ++doneSteps;</div>
|
||||
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  </div>
|
||||
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="comment">// MergedBy will be set later</span></div>
|
||||
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  var tm = <span class="keyword">new</span> Models.TestMerge</div>
|
||||
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  {</div>
|
||||
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  Author = pr?.User.Login ?? errorMessage,</div>
|
||||
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  BodyAtMerge = pr?.Body ?? errorMessage ?? String.Empty,</div>
|
||||
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  MergedAt = DateTimeOffset.Now,</div>
|
||||
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  TitleAtMerge = pr?.Title ?? errorMessage ?? String.Empty,</div>
|
||||
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  Comment = I.Comment,</div>
|
||||
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  Number = I.Number,</div>
|
||||
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  PullRequestRevision = I.PullRequestRevision,</div>
|
||||
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  Url = pr?.HtmlUrl ?? errorMessage</div>
|
||||
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  };</div>
|
||||
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  </div>
|
||||
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  await UpdateRevInfo(tm).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div>
|
||||
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  }</div>
|
||||
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div>
|
||||
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  </div>
|
||||
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  var currentHead = repo.Head;</div>
|
||||
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="keywordflow">if</span> (startSha != currentHead || (postUpdateSha != <span class="keyword">null</span> && postUpdateSha != currentHead))</div>
|
||||
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  {</div>
|
||||
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  await repo.Sychronize(currentModel.AccessUser, currentModel.AccessToken, currentModel.CommitterName, currentModel.CommitterEmail, NextProgressReporter(), <span class="keyword">false</span>, ct).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  await UpdateRevInfo().ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  }</div>
|
||||
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  </div>
|
||||
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">return</span> <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  }</div>
|
||||
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keywordflow">catch</span></div>
|
||||
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  {</div>
|
||||
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  doneSteps = 0;</div>
|
||||
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  numSteps = 2;</div>
|
||||
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  </div>
|
||||
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="comment">// Forget what we've done and abort</span></div>
|
||||
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="comment">// DCTx2: Cancellation token is for job, operations should always run</span></div>
|
||||
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  await repo.CheckoutObject(startReference ?? startSha, NextProgressReporter(), <span class="keywordflow">default</span>).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <span class="keywordflow">if</span> (startReference != <span class="keyword">null</span> && repo.Head != startSha)</div>
|
||||
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  await repo.ResetToSha(startSha, NextProgressReporter(), <span class="keywordflow">default</span>).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  progressReporter(100);</div>
|
||||
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="keywordflow">throw</span>;</div>
|
||||
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  }</div>
|
||||
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  }</div>
|
||||
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  </div>
|
||||
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  var job = <span class="keyword">new</span> Models.Job</div>
|
||||
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  {</div>
|
||||
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  Description = description,</div>
|
||||
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  StartedBy = <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_security_1_1_authentication_context.html">AuthenticationContext</a>.<a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_security_1_1_authentication_context.html#a0846ac9679599a99923987863edb0d5c">User</a>,</div>
|
||||
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <a class="code" href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_instance.html">Instance</a> = <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#a19f89ec03ffd6f2bf5cab5214d5e6bb8">Instance</a>,</div>
|
||||
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  CancelRightsType = <a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a7b02c8c3dadd90810a9eaa24712a0a20">RightsType</a>.Repository,</div>
|
||||
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  CancelRight = (ulong)<a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a95336db3db40dbae9701ef6e51240f39">RepositoryRights</a>.CancelPendingChanges,</div>
|
||||
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  };</div>
|
||||
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  </div>
|
||||
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <span class="comment">// Time to access git, do it in a job</span></div>
|
||||
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  await <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_repository_controller.html#ad15c0217bf9e5ce926a198191d0a04c4">jobManager</a>.<a class="code" href="interface_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_i_job_manager.html#a21be789f798adf9985f2432d3499b4cd">RegisterOperation</a>(</div>
|
||||
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  job,</div>
|
||||
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  (core, databaseContextFactory, paramJob, progressReporter, ct) =></div>
|
||||
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  UpdateCallbackThatDesperatelyNeedsRefactoring(</div>
|
||||
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  core,</div>
|
||||
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  databaseContextFactory,</div>
|
||||
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  progressReporter,</div>
|
||||
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  ct),</div>
|
||||
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  cancellationToken)</div>
|
||||
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  .ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  </div>
|
||||
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  api.ActiveJob = job.ToApi();</div>
|
||||
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="keywordflow">return</span> Accepted(api);</div>
|
||||
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  }</div>
|
||||
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordflow">if</span> (!testMergeMatch)</div>
|
||||
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  </div>
|
||||
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  var previousTestMergesMatch = testRevInfo</div>
|
||||
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  .ActiveTestMerges</div>
|
||||
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  .Select(previousRevInfoTestMerge => previousRevInfoTestMerge.TestMerge)</div>
|
||||
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  .All(previousTestMerge => appliedTestMergeIds.Contains(previousTestMerge.Id));</div>
|
||||
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  </div>
|
||||
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordflow">return</span> previousTestMergesMatch;</div>
|
||||
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  })</div>
|
||||
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  .FirstOrDefault();</div>
|
||||
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  </div>
|
||||
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  {</div>
|
||||
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  lastGoodRevInfo = revInfoWereLookingFor;</div>
|
||||
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  appliedTestMergeIds.Add(revInfoWereLookingFor.PrimaryTestMerge.Id);</div>
|
||||
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  search.Remove(I);</div>
|
||||
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  }</div>
|
||||
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  }</div>
|
||||
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  }</div>
|
||||
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">while</span> (revInfoWereLookingFor != <span class="keyword">null</span> && search.Count > 0);</div>
|
||||
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  </div>
|
||||
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  revInfoWereLookingFor = lastGoodRevInfo;</div>
|
||||
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  needToApplyRemainingPrs = search.Count != 0;</div>
|
||||
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <span class="keywordflow">if</span> (needToApplyRemainingPrs)</div>
|
||||
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  model.<a class="code" href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_repository.html#ad4bb63897d14c742a2c52a159ec75641">NewTestMerges</a> = search;</div>
|
||||
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div>
|
||||
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  needToApplyRemainingPrs = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  }</div>
|
||||
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  }</div>
|
||||
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  </div>
|
||||
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <span class="keywordflow">if</span> (revInfoWereLookingFor != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  {</div>
|
||||
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="comment">// goteem</span></div>
|
||||
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#ae5655868c2b2b913046ecf61934ce119">Logger</a>.LogDebug(<span class="stringliteral">"Reusing existing SHA {0}..."</span>, revInfoWereLookingFor.CommitSha);</div>
|
||||
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  await repo.ResetToSha(revInfoWereLookingFor.CommitSha, NextProgressReporter(), cancellationToken).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  lastRevisionInfo = revInfoWereLookingFor;</div>
|
||||
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  }</div>
|
||||
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  </div>
|
||||
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">if</span> (needToApplyRemainingPrs)</div>
|
||||
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  {</div>
|
||||
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">foreach</span> (var I <span class="keywordflow">in</span> model.<a class="code" href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_repository.html#ad4bb63897d14c742a2c52a159ec75641">NewTestMerges</a>)</div>
|
||||
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  {</div>
|
||||
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  Octokit.PullRequest pr = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordtype">string</span> errorMessage = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  </div>
|
||||
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <span class="keywordflow">if</span> (lastRevisionInfo.ActiveTestMerges.Any(x => x.TestMerge.Number == I.Number))</div>
|
||||
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(<a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a1a6adb59dd51244efabf4e548e7075c8">ErrorCode</a>.RepoDuplicateTestMerge);</div>
|
||||
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  </div>
|
||||
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  Exception exception = <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="keywordflow">try</span></div>
|
||||
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  {</div>
|
||||
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="comment">// load from cache if possible</span></div>
|
||||
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="keywordflow">if</span> (prMap == <span class="keyword">null</span> || !prMap.TryGetValue(I.Number, out pr))</div>
|
||||
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  pr = await gitHubClient</div>
|
||||
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  .PullRequest</div>
|
||||
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  .Get(repoOwner, repoName, I.Number)</div>
|
||||
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  .WithToken(ct)</div>
|
||||
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  .ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div>
|
||||
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keywordflow">catch</span> (Octokit.RateLimitExceededException ex)</div>
|
||||
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  {</div>
|
||||
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="comment">// you look at your anonymous access and sigh</span></div>
|
||||
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: RATE LIMITED"</span>;</div>
|
||||
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  }</div>
|
||||
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordflow">catch</span> (Octokit.AuthorizationException ex)</div>
|
||||
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  {</div>
|
||||
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: BAD CREDENTIALS"</span>;</div>
|
||||
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  }</div>
|
||||
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="keywordflow">catch</span> (Octokit.NotFoundException ex)</div>
|
||||
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  {</div>
|
||||
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="comment">// you look at your shithub and sigh</span></div>
|
||||
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  errorMessage = <span class="stringliteral">"REMOTE API ERROR: PULL REQUEST NOT FOUND"</span>;</div>
|
||||
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  exception = ex;</div>
|
||||
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  }</div>
|
||||
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  </div>
|
||||
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">if</span> (exception != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#ae5655868c2b2b913046ecf61934ce119">Logger</a>.LogWarning(exception, <span class="stringliteral">"Error retrieving pull request metadata!"</span>);</div>
|
||||
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  </div>
|
||||
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="comment">// we want to take the earliest truth possible to prevent RCEs, if this fails AddTestMerge will set it</span></div>
|
||||
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">if</span> (I.PullRequestRevision == <span class="keyword">null</span> && pr != <span class="keyword">null</span>)</div>
|
||||
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  I.PullRequestRevision = pr.Head.Sha;</div>
|
||||
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  </div>
|
||||
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  var mergeResult = await repo.AddTestMerge(</div>
|
||||
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  I,</div>
|
||||
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  committerName,</div>
|
||||
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  currentModel.CommitterEmail,</div>
|
||||
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  currentModel.AccessUser,</div>
|
||||
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  currentModel.AccessToken,</div>
|
||||
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  NextProgressReporter(),</div>
|
||||
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  ct).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  </div>
|
||||
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">if</span> (!mergeResult.HasValue)</div>
|
||||
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(</div>
|
||||
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a1a6adb59dd51244efabf4e548e7075c8">ErrorCode</a>.RepoTestMergeConflict,</div>
|
||||
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="keyword">new</span> <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_exception.html">JobException</a>(</div>
|
||||
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  $<span class="stringliteral">"Merge of PR #{I.Number} at {I.PullRequestRevision.Substring(0, 7)} conflicted!"</span>));</div>
|
||||
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  </div>
|
||||
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  ++doneSteps;</div>
|
||||
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  </div>
|
||||
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="comment">// MergedBy will be set later</span></div>
|
||||
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  var tm = <span class="keyword">new</span> Models.TestMerge</div>
|
||||
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  {</div>
|
||||
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  Author = pr?.User.Login ?? errorMessage,</div>
|
||||
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  BodyAtMerge = pr?.Body ?? errorMessage ?? String.Empty,</div>
|
||||
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  MergedAt = DateTimeOffset.Now,</div>
|
||||
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  TitleAtMerge = pr?.Title ?? errorMessage ?? String.Empty,</div>
|
||||
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  Comment = I.Comment,</div>
|
||||
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  Number = I.Number,</div>
|
||||
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  PullRequestRevision = I.PullRequestRevision,</div>
|
||||
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  Url = pr?.HtmlUrl ?? errorMessage</div>
|
||||
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  };</div>
|
||||
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  </div>
|
||||
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  await UpdateRevInfo(tm).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  }</div>
|
||||
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  }</div>
|
||||
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div>
|
||||
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  </div>
|
||||
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  var currentHead = repo.Head;</div>
|
||||
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="keywordflow">if</span> (startSha != currentHead || (postUpdateSha != <span class="keyword">null</span> && postUpdateSha != currentHead))</div>
|
||||
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  {</div>
|
||||
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  await repo.Sychronize(currentModel.AccessUser, currentModel.AccessToken, currentModel.CommitterName, currentModel.CommitterEmail, NextProgressReporter(), <span class="keyword">false</span>, ct).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  await UpdateRevInfo().ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  }</div>
|
||||
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  </div>
|
||||
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <span class="keywordflow">return</span> <span class="keyword">null</span>;</div>
|
||||
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  }</div>
|
||||
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <span class="keywordflow">catch</span></div>
|
||||
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  {</div>
|
||||
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  doneSteps = 0;</div>
|
||||
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  numSteps = 2;</div>
|
||||
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  </div>
|
||||
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <span class="comment">// Forget what we've done and abort</span></div>
|
||||
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="comment">// DCTx2: Cancellation token is for job, operations should always run</span></div>
|
||||
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  await repo.CheckoutObject(startReference ?? startSha, NextProgressReporter(), <span class="keywordflow">default</span>).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="keywordflow">if</span> (startReference != <span class="keyword">null</span> && repo.Head != startSha)</div>
|
||||
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  await repo.ResetToSha(startSha, NextProgressReporter(), <span class="keywordflow">default</span>).ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  progressReporter(100);</div>
|
||||
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">throw</span>;</div>
|
||||
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  }</div>
|
||||
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  }</div>
|
||||
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  </div>
|
||||
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  var job = <span class="keyword">new</span> Models.Job</div>
|
||||
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  {</div>
|
||||
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  Description = description,</div>
|
||||
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  StartedBy = <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_security_1_1_authentication_context.html">AuthenticationContext</a>.<a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_security_1_1_authentication_context.html#a0846ac9679599a99923987863edb0d5c">User</a>,</div>
|
||||
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <a class="code" href="class_tgstation_1_1_server_1_1_api_1_1_models_1_1_instance.html">Instance</a> = <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#a19f89ec03ffd6f2bf5cab5214d5e6bb8">Instance</a>,</div>
|
||||
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  CancelRightsType = <a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a7b02c8c3dadd90810a9eaa24712a0a20">RightsType</a>.Repository,</div>
|
||||
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  CancelRight = (ulong)<a class="code" href="namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a95336db3db40dbae9701ef6e51240f39">RepositoryRights</a>.CancelPendingChanges,</div>
|
||||
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  };</div>
|
||||
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  </div>
|
||||
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="comment">// Time to access git, do it in a job</span></div>
|
||||
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  await <a class="code" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_repository_controller.html#ad15c0217bf9e5ce926a198191d0a04c4">jobManager</a>.<a class="code" href="interface_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_i_job_manager.html#a21be789f798adf9985f2432d3499b4cd">RegisterOperation</a>(</div>
|
||||
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  job,</div>
|
||||
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  (core, databaseContextFactory, paramJob, progressReporter, ct) =></div>
|
||||
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  UpdateCallbackThatDesperatelyNeedsRefactoring(</div>
|
||||
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  core,</div>
|
||||
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  databaseContextFactory,</div>
|
||||
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  progressReporter,</div>
|
||||
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  ct),</div>
|
||||
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  cancellationToken)</div>
|
||||
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  .ConfigureAwait(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  </div>
|
||||
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  api.ActiveJob = job.ToApi();</div>
|
||||
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="keywordflow">return</span> Accepted(api);</div>
|
||||
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  }</div>
|
||||
</div><!-- fragment -->
|
||||
<p class="reference">References <a class="el" href="interface_tgstation_1_1_server_1_1_host_1_1_core_1_1_i_git_hub_client_factory.html#a9043597fb0563f7fb0ed751819aa7525">Tgstation.Server.Host.Core.IGitHubClientFactory.CreateClient()</a>, <a class="el" href="_repository_controller_8cs_source.html#l00047">Tgstation.Server.Host.Controllers.RepositoryController.generalConfiguration</a>, <a class="el" href="_authentication_context_8cs_source.html#l00046">Tgstation.Server.Host.Security.AuthenticationContext.GetRight()</a>, <a class="el" href="_general_configuration_8cs_source.html#l00067">Tgstation.Server.Host.Configuration.GeneralConfiguration.GitHubAccessToken</a>, <a class="el" href="_repository_controller_8cs_source.html#l00037">Tgstation.Server.Host.Controllers.RepositoryController.gitHubClientFactory</a>, <a class="el" href="class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_api_controller.html#a30f0e4c93d7b119d4bf7aadefc1e5b8f">Tgstation.Server.Host.Controllers.ApiController.Gone()</a>, <a class="el" href="_entity_id_8cs_source.html#l00011">Tgstation.Server.Api.Models.EntityId.Id</a>, <a class="el" href="_tgstation_8_server_8_api_2_models_2_internal_2_user_8cs_source.html#l00016">Tgstation.Server.Api.Models.Internal.User.Id</a>, <a class="el" href="_api_controller_8cs_source.html#l00049">Tgstation.Server.Host.Controllers.ApiController.Instance</a>, <a class="el" href="_repository_controller_8cs_source.html#l00042">Tgstation.Server.Host.Controllers.RepositoryController.jobManager</a>, <a class="el" href="_repository_controller_8cs_source.html#l00078">Tgstation.Server.Host.Controllers.RepositoryController.LoadRevisionInformation()</a>, <a class="el" href="_api_controller_8cs_source.html#l00044">Tgstation.Server.Host.Controllers.ApiController.Logger</a>, <a class="el" href="_tgstation_8_server_8_api_2_models_2_internal_2_user_8cs_source.html#l00041">Tgstation.Server.Api.Models.Internal.User.Name</a>, <a class="el" href="_repository_controller_8cs_source.html#l00124">Tgstation.Server.Host.Controllers.RepositoryController.PopulateApi()</a>, <a class="el" href="interface_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_i_job_manager.html#a21be789f798adf9985f2432d3499b4cd">Tgstation.Server.Host.Jobs.IJobManager.RegisterOperation()</a>, <a class="el" href="_i_instance_core_8cs_source.html#l00019">Tgstation.Server.Host.Components.IInstanceCore.RepositoryManager</a>, <a class="el" href="_database_context_8cs_source.html#l00062">Tgstation.Server.Host.Database.DatabaseContext.RepositorySettings</a>, <a class="el" href="class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#ac2e88d53bf1b6ac87d175d83ed39da7c">Tgstation.Server.Host.Database.DatabaseContext.Save()</a>, <a class="el" href="interface_tgstation_1_1_server_1_1_host_1_1_database_1_1_i_database_context_factory.html#ad22fce8fc51129e9da203dcef2f7ab42">Tgstation.Server.Host.Database.IDatabaseContextFactory.UseContext()</a>, <a class="el" href="_authentication_context_8cs_source.html#l00014">Tgstation.Server.Host.Security.AuthenticationContext.User</a>, and <a class="el" href="_instance_required_controller_8cs_source.html#l00064">Tgstation.Server.Host.Controllers.InstanceRequiredController.WithComponentInstance()</a>.</p>
|
||||
<div class="dynheader">
|
||||
|
||||
Reference in New Issue
Block a user