remove method

Future<WorkspaceRemoval> remove(
  1. String issueIdentifier
)

Removes the workspace directory and unregisters the worktree.

before_remove hook failures are logged and ignored.

Implementation

Future<WorkspaceRemoval> remove(String issueIdentifier) async {
  final path = resolvePath(issueIdentifier);
  final dir = Directory(path);
  if (!dir.existsSync()) {
    return const WorkspaceRemoval(removed: false, worktreeRemoved: false);
  }

  final beforeRemove = await hookRunner.run(
    kind: WorkspaceHookKind.beforeRemove,
    workspacePath: path,
    hooks: hooksConfig,
  );

  var worktreeRemoved = false;
  if (useGitWorktrees) {
    final result = await _git(<String>[
      'worktree',
      'remove',
      '--force',
      path,
    ], workingDirectory: repositoryRoot);
    worktreeRemoved = result.exitCode == 0;
    if (!worktreeRemoved) {
      logger.warn(
        'git worktree remove failed (exit ${result.exitCode}): ${result.stderr}',
      );
    }
  }

  if (dir.existsSync()) {
    try {
      dir.deleteSync(recursive: true);
    } catch (e) {
      logger.warn('Failed to delete workspace directory $path: $e');
    }
  }

  return WorkspaceRemoval(
    removed: !dir.existsSync(),
    worktreeRemoved: worktreeRemoved,
    beforeRemoveHook: beforeRemove,
  );
}