remove method
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,
);
}