diff --git a/package.json b/package.json index a3adb45724..c89730f69c 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,10 @@ "command": "vscode-docker.compose.down", "when": "isWorkspaceTrusted" }, + { + "command": "vscode-docker.compose.down.subset", + "when": "isWorkspaceTrusted" + }, { "command": "vscode-docker.compose.restart", "when": "isWorkspaceTrusted" @@ -154,6 +158,11 @@ "command": "vscode-docker.compose.down", "group": "docker" }, + { + "when": "isWorkspaceTrusted && editorLangId == dockercompose", + "command": "vscode-docker.compose.down.subset", + "group": "docker" + }, { "when": "isWorkspaceTrusted && editorLangId == dockercompose", "command": "vscode-docker.compose.restart", @@ -169,6 +178,11 @@ "command": "vscode-docker.compose.up.subset", "group": "docker" }, + { + "when": "isWorkspaceTrusted && editorLangId == dockercompose", + "command": "vscode-docker.compose.down.subset", + "group": "docker" + }, { "when": "isWorkspaceTrusted && editorLangId == dockerfile", "command": "vscode-docker.images.build", @@ -186,6 +200,11 @@ "command": "vscode-docker.compose.down", "group": "docker" }, + { + "when": "isWorkspaceTrusted && resourceLangId == dockercompose", + "command": "vscode-docker.compose.down.subset", + "group": "docker" + }, { "when": "isWorkspaceTrusted && resourceLangId == dockercompose", "command": "vscode-docker.compose.restart", @@ -1826,6 +1845,43 @@ ], "description": "%vscode-docker.config.template.composeDown.description%" }, + "docker.commands.composeDownSubset": { + "oneOf": [ + { + "type": "array", + "items": { + "properties": { + "template": { + "type": "string", + "description": "%vscode-docker.config.template.composeDownSubset.template%" + }, + "label": { + "type": "string", + "description": "%vscode-docker.config.template.composeDownSubset.label%" + }, + "match": { + "type": "string", + "description": "%vscode-docker.config.template.composeDownSubset.match%" + } + }, + "required": [ + "label", + "template" + ] + } + }, + { + "type": "string" + } + ], + "default": [ + { + "label": "Compose Down", + "template": "${composeCommand} ${profileList} ${configurationFile} down" + } + ], + "description": "%vscode-docker.config.template.composeDownSubset.description%" + }, "docker.containers.groupBy": { "type": "string", "default": "Compose Project Name", @@ -2290,6 +2346,11 @@ "title": "%vscode-docker.commands.compose.down%", "category": "%vscode-docker.commands.category.docker%" }, + { + "command": "vscode-docker.compose.down.subset", + "title": "%vscode-docker.commands.compose.down.subset%", + "category": "%vscode-docker.commands.category.docker%" + }, { "command": "vscode-docker.compose.restart", "title": "%vscode-docker.commands.compose.restart%", diff --git a/package.nls.json b/package.nls.json index c5e6f86adb..e4145e1440 100644 --- a/package.nls.json +++ b/package.nls.json @@ -154,6 +154,7 @@ "vscode-docker.config.template.composeUpSubset.label": "The label displayed to the user.", "vscode-docker.config.template.composeUpSubset.match": "The regular expression for choosing the right template. Checked against docker-compose YAML files, folder name, etc.", "vscode-docker.config.template.composeUpSubset.description": "Command templates for `docker-compose up ` commands.", + "vscode-docker.config.template.composeDownSubset.description": "Command templates for `docker-compose down` commands.", "vscode-docker.config.template.composeDown.template": "The command template.", "vscode-docker.config.template.composeDown.label": "The label displayed to the user.", "vscode-docker.config.template.composeDown.match": "The regular expression for choosing the right template. Checked against docker-compose YAML files, folder name, etc.", @@ -203,6 +204,7 @@ "vscode-docker.config.docker.enableDockerComposeLanguageService": "Whether or not to enable the preview Docker Compose Language Service. Changing requires restart to take effect.", "vscode-docker.config.deprecated": "This setting has been deprecated and will be removed in a future release.", "vscode-docker.commands.compose.down": "Compose Down", + "vscode-docker.commands.compose.down.subset": "Compose Down - Select Services", "vscode-docker.commands.compose.restart": "Compose Restart", "vscode-docker.commands.compose.up": "Compose Up", "vscode-docker.commands.compose.up.subset": "Compose Up - Select Services", diff --git a/src/commands/compose/compose.ts b/src/commands/compose/compose.ts index 72453c2c69..88b06ab323 100644 --- a/src/commands/compose/compose.ts +++ b/src/commands/compose/compose.ts @@ -12,7 +12,7 @@ import { quickPickWorkspaceFolder } from '../../utils/quickPickWorkspaceFolder'; import { selectComposeCommand } from '../selectCommandTemplate'; import { getComposeProfileList, getComposeProfilesOrServices, getComposeServiceList } from './getComposeSubsetList'; -async function compose(context: IActionContext, commands: ('up' | 'down' | 'upSubset')[], message: string, dockerComposeFileUri?: vscode.Uri | string, selectedComposeFileUris?: vscode.Uri[], preselectedServices?: string[], preselectedProfiles?: string[]): Promise { +async function compose(context: IActionContext, commands: ('up' | 'down' | 'upSubset' | 'downSubset')[], message: string, dockerComposeFileUri?: vscode.Uri | string, selectedComposeFileUris?: vscode.Uri[], preselectedServices?: string[], preselectedProfiles?: string[]): Promise { if (!vscode.workspace.isTrusted) { throw new UserCancelledError('enforceTrust'); } @@ -90,6 +90,10 @@ export async function composeDown(context: IActionContext, dockerComposeFileUri? return await compose(context, ['down'], vscode.l10n.t('Choose Docker Compose file to take down'), dockerComposeFileUri, selectedComposeFileUris); } +export async function composeDownSubset(context: IActionContext, dockerComposeFileUri?: vscode.Uri, selectedComposeFileUris?: vscode.Uri[], preselectedServices?: string[], preselectedProfiles?: string[]): Promise { + return await compose(context, ['downSubset'], vscode.l10n.t('Choose Docker Compose file to take down'), dockerComposeFileUri, selectedComposeFileUris, preselectedServices, preselectedProfiles); +} + export async function composeRestart(context: IActionContext, dockerComposeFileUri?: vscode.Uri, selectedComposeFileUris?: vscode.Uri[]): Promise { return await compose(context, ['down', 'up'], vscode.l10n.t('Choose Docker Compose file to restart'), dockerComposeFileUri, selectedComposeFileUris); } diff --git a/src/commands/registerCommands.ts b/src/commands/registerCommands.ts index 4cda226c99..a94a5f6cd1 100644 --- a/src/commands/registerCommands.ts +++ b/src/commands/registerCommands.ts @@ -9,7 +9,7 @@ import { ext } from "../extensionVariables"; import { scaffold } from "../scaffolding/scaffold"; import { scaffoldCompose } from "../scaffolding/scaffoldCompose"; import { scaffoldDebugConfig } from "../scaffolding/scaffoldDebugConfig"; -import { composeDown, composeRestart, composeUp, composeUpSubset } from "./compose/compose"; +import { composeDown, composeDownSubset, composeRestart, composeUp, composeUpSubset } from "./compose/compose"; import { attachShellContainer } from "./containers/attachShellContainer"; import { browseContainer } from "./containers/browseContainer"; import { composeGroupDown, composeGroupLogs, composeGroupRestart, composeGroupStart, composeGroupStop } from "./containers/composeGroup"; @@ -117,6 +117,7 @@ export function registerCommands(): void { registerWorkspaceCommand('vscode-docker.debugging.initializeForDebugging', scaffoldDebugConfig); registerWorkspaceCommand('vscode-docker.compose.down', composeDown); + registerWorkspaceCommand('vscode-docker.compose.down.subset', composeDownSubset); registerWorkspaceCommand('vscode-docker.compose.restart', composeRestart); registerWorkspaceCommand('vscode-docker.compose.up', composeUp); registerWorkspaceCommand('vscode-docker.compose.up.subset', composeUpSubset); diff --git a/src/commands/selectCommandTemplate.ts b/src/commands/selectCommandTemplate.ts index 66f4a061ad..7162723187 100644 --- a/src/commands/selectCommandTemplate.ts +++ b/src/commands/selectCommandTemplate.ts @@ -10,7 +10,7 @@ import { ext } from '../extensionVariables'; import { isDockerComposeClient } from '../runtimes/OrchestratorRuntimeManager'; import { resolveVariables } from '../utils/resolveVariables'; -type TemplateCommand = 'build' | 'run' | 'runInteractive' | 'attach' | 'logs' | 'composeUp' | 'composeDown' | 'composeUpSubset'; +type TemplateCommand = 'build' | 'run' | 'runInteractive' | 'attach' | 'logs' | 'composeUp' | 'composeDown' | 'composeUpSubset' | 'composeDownSubset'; type TemplatePicker = (items: IAzureQuickPickItem[], options: IAzureQuickPickOptions) => Promise>; @@ -76,7 +76,7 @@ export async function selectLogsCommand(context: IActionContext, containerName: ); } -export async function selectComposeCommand(context: IActionContext, folder: vscode.WorkspaceFolder, composeCommand: 'up' | 'down' | 'upSubset', configurationFile?: string, detached?: boolean, build?: boolean): Promise { +export async function selectComposeCommand(context: IActionContext, folder: vscode.WorkspaceFolder, composeCommand: 'up' | 'down' | 'upSubset' | 'downSubset', configurationFile?: string, detached?: boolean, build?: boolean): Promise { let template: TemplateCommand; switch (composeCommand) { @@ -86,6 +86,9 @@ export async function selectComposeCommand(context: IActionContext, folder: vsco case 'down': template = 'composeDown'; break; + case 'downSubset': + template = 'composeDownSubset'; + break; case 'upSubset': default: template = 'composeUpSubset';