fix(worker): reorder PlanningAggregator checkout/delete and kill git on cancel
Also stub new IWorkerClient planning members in FakeWorkerClient to restore build. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -78,11 +78,13 @@ public sealed class PlanningAggregator
|
|||||||
|
|
||||||
var integrationBranch = BuildIntegrationBranchName(planning);
|
var integrationBranch = BuildIntegrationBranchName(planning);
|
||||||
|
|
||||||
// Reset: delete if exists, then recreate off the target branch.
|
// Reset: checkout target first (so we're never ON the integration branch when deleting it),
|
||||||
|
// then delete if exists, then recreate off the target branch.
|
||||||
|
await _git.CheckoutBranchAsync(repoDir, targetBranch, ct);
|
||||||
|
|
||||||
try { await _git.BranchDeleteAsync(repoDir, integrationBranch, force: true, ct); }
|
try { await _git.BranchDeleteAsync(repoDir, integrationBranch, force: true, ct); }
|
||||||
catch { /* didn't exist */ }
|
catch { /* didn't exist */ }
|
||||||
|
|
||||||
await _git.CheckoutBranchAsync(repoDir, targetBranch, ct);
|
|
||||||
await GitRawAsync(repoDir, ct, "checkout", "-b", integrationBranch);
|
await GitRawAsync(repoDir, ct, "checkout", "-b", integrationBranch);
|
||||||
|
|
||||||
foreach (var child in childSubtasks)
|
foreach (var child in childSubtasks)
|
||||||
@@ -150,7 +152,15 @@ public sealed class PlanningAggregator
|
|||||||
using var p = System.Diagnostics.Process.Start(psi)!;
|
using var p = System.Diagnostics.Process.Start(psi)!;
|
||||||
var stdoutTask = p.StandardOutput.ReadToEndAsync();
|
var stdoutTask = p.StandardOutput.ReadToEndAsync();
|
||||||
var stderrTask = p.StandardError.ReadToEndAsync();
|
var stderrTask = p.StandardError.ReadToEndAsync();
|
||||||
await p.WaitForExitAsync(ct);
|
try
|
||||||
|
{
|
||||||
|
await p.WaitForExitAsync(ct);
|
||||||
|
}
|
||||||
|
catch (OperationCanceledException)
|
||||||
|
{
|
||||||
|
try { if (!p.HasExited) p.Kill(entireProcessTree: true); } catch { }
|
||||||
|
throw;
|
||||||
|
}
|
||||||
var stdout = await stdoutTask;
|
var stdout = await stdoutTask;
|
||||||
var stderr = await stderrTask;
|
var stderr = await stderrTask;
|
||||||
if (p.ExitCode != 0) throw new InvalidOperationException($"git {string.Join(' ', args)} failed: {stderr}");
|
if (p.ExitCode != 0) throw new InvalidOperationException($"git {string.Join(' ', args)} failed: {stderr}");
|
||||||
|
|||||||
@@ -32,6 +32,19 @@ sealed class FakeWorkerClient : IWorkerClient
|
|||||||
public Task DiscardPlanningSessionAsync(string taskId, CancellationToken ct = default) { DiscardPlanningCalls++; return Task.CompletedTask; }
|
public Task DiscardPlanningSessionAsync(string taskId, CancellationToken ct = default) { DiscardPlanningCalls++; return Task.CompletedTask; }
|
||||||
public Task FinalizePlanningSessionAsync(string taskId, bool queueAgentTasks = true, CancellationToken ct = default) { FinalizePlanningCalls++; return Task.CompletedTask; }
|
public Task FinalizePlanningSessionAsync(string taskId, bool queueAgentTasks = true, CancellationToken ct = default) { FinalizePlanningCalls++; return Task.CompletedTask; }
|
||||||
public Task<int> GetPendingDraftCountAsync(string taskId, CancellationToken ct = default) => Task.FromResult(0);
|
public Task<int> GetPendingDraftCountAsync(string taskId, CancellationToken ct = default) => Task.FromResult(0);
|
||||||
|
|
||||||
|
public event Action<string, string>? PlanningMergeStartedEvent;
|
||||||
|
public event Action<string, string>? PlanningSubtaskMergedEvent;
|
||||||
|
public event Action<string, string, IReadOnlyList<string>>? PlanningMergeConflictEvent;
|
||||||
|
public event Action<string>? PlanningMergeAbortedEvent;
|
||||||
|
public event Action<string>? PlanningCompletedEvent;
|
||||||
|
|
||||||
|
public Task<MergeTargetsDto?> GetMergeTargetsAsync(string taskId) => Task.FromResult<MergeTargetsDto?>(null);
|
||||||
|
public Task<IReadOnlyList<SubtaskDiffDto>> GetPlanningAggregateAsync(string planningTaskId) => Task.FromResult<IReadOnlyList<SubtaskDiffDto>>(Array.Empty<SubtaskDiffDto>());
|
||||||
|
public Task<CombinedDiffResultDto?> BuildPlanningIntegrationBranchAsync(string planningTaskId, string targetBranch) => Task.FromResult<CombinedDiffResultDto?>(null);
|
||||||
|
public Task MergeAllPlanningAsync(string planningTaskId, string targetBranch) => Task.CompletedTask;
|
||||||
|
public Task ContinuePlanningMergeAsync(string planningTaskId) => Task.CompletedTask;
|
||||||
|
public Task AbortPlanningMergeAsync(string planningTaskId) => Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Helper to build VM with pre-seeded Items ──────────────────────────────────
|
// ── Helper to build VM with pre-seeded Items ──────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user