removeAgentWorktree method

Future<bool> removeAgentWorktree(
  1. String worktreePath, {
  2. String? worktreeBranch,
  3. String? gitRoot,
  4. bool hookBased = false,
})

Remove a worktree created by createAgentWorktree.

Implementation

Future<bool> removeAgentWorktree(
  String worktreePath, {
  String? worktreeBranch,
  String? gitRoot,
  bool hookBased = false,
}) async {
  if (hookBased) {
    if (onExecuteWorktreeRemoveHook != null) {
      final hookRan = await onExecuteWorktreeRemoveHook!(worktreePath);
      if (hookRan) {
        _logForDebugging(
          'Removed hook-based agent worktree at: $worktreePath',
        );
      }
      return hookRan;
    }
    return false;
  }

  if (gitRoot == null) {
    _logForDebugging(
      'Cannot remove agent worktree: no git root provided',
      level: 'error',
    );
    return false;
  }

  final removeResult = await _execGit([
    'worktree',
    'remove',
    '--force',
    worktreePath,
  ], cwd: gitRoot);

  if (removeResult.code != 0) {
    _logForDebugging(
      'Failed to remove agent worktree: ${removeResult.stderr}',
      level: 'error',
    );
    return false;
  }

  _logForDebugging('Removed agent worktree at: $worktreePath');

  if (worktreeBranch == null) return true;

  final deleteResult = await _execGit([
    'branch',
    '-D',
    worktreeBranch,
  ], cwd: gitRoot);

  if (deleteResult.code != 0) {
    _logForDebugging(
      'Could not delete agent worktree branch: ${deleteResult.stderr}',
      level: 'error',
    );
  }
  return true;
}