import 'config.dart'; import 'scm_client.dart'; class WorkspaceManager { WorkspaceManager({this.worktreeRoot, Map? clients}) : _clients = clients ?? defaultScmClients(); final String? worktreeRoot; final Map _clients; Future createEphemeralWorkspace(ProjectConfig project) { return _clientFor(project.scm.provider).createEphemeralWorkspace( projectPath: project.path, workspaceRoot: worktreeRoot, ); } Future disposeEphemeralWorkspace(ProjectConfig project, String path) { return _clientFor(project.scm.provider).disposeEphemeralWorkspace(path); } Future createEphemeralWorktree( String projectPath, { ScmProvider provider = ScmProvider.github, }) { return _clientFor(provider).createEphemeralWorkspace( projectPath: projectPath, workspaceRoot: worktreeRoot, ); } Future disposeEphemeralWorktree( String workspacePath, { ScmProvider provider = ScmProvider.github, }) { return _clientFor(provider).disposeEphemeralWorkspace(workspacePath); } ScmClient _clientFor(ScmProvider provider) { final client = _clients[provider]; if (client == null) { throw UnsupportedError('SCM provider ${provider.name} is not supported.'); } return client; } }