From 26aeeb588d010bcd2382f50e2e8ea5f048bf1b2f Mon Sep 17 00:00:00 2001 From: Ian Huff Date: Fri, 28 Aug 2020 09:24:28 -0700 Subject: [PATCH 1/8] Both changes --- src/client/common/installer/moduleInstaller.ts | 2 ++ src/client/common/process/internal/python.ts | 6 +++++- src/client/common/process/internal/scripts/index.ts | 2 +- src/client/common/terminal/service.ts | 2 ++ src/client/common/terminal/syncTerminalService.ts | 2 ++ 5 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/client/common/installer/moduleInstaller.ts b/src/client/common/installer/moduleInstaller.ts index c227c9e56906..2cf43bc43cc2 100644 --- a/src/client/common/installer/moduleInstaller.ts +++ b/src/client/common/installer/moduleInstaller.ts @@ -4,6 +4,7 @@ import { injectable } from 'inversify'; import * as path from 'path'; import { CancellationToken, OutputChannel, ProgressLocation, ProgressOptions } from 'vscode'; +import { logMessage } from '../../../datascience-ui/react-common/logger'; import { IInterpreterService } from '../../interpreter/contracts'; import { IServiceContainer } from '../../ioc/types'; import { EnvironmentType } from '../../pythonEnvironments/info'; @@ -47,6 +48,7 @@ export abstract class ModuleInstaller implements IModuleInstaller { : resource; const pythonPath = isResource(resource) ? settings.pythonPath : resource.path; const args = internalPython.execModule(executionInfo.moduleName, executionInfoArgs); + logMessage(`**** Module Installer Install ${args}`); if (!interpreter || interpreter.envType !== EnvironmentType.Unknown) { await terminalService.sendCommand(pythonPath, args, token); } else if (settings.globalModuleInstallation) { diff --git a/src/client/common/process/internal/python.ts b/src/client/common/process/internal/python.ts index 86123367f852..5c23e0d240a1 100644 --- a/src/client/common/process/internal/python.ts +++ b/src/client/common/process/internal/python.ts @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +import { logMessage } from '../../../../datascience-ui/react-common/logger'; import { _ISOLATED as ISOLATED } from './scripts'; // "python" contains functions corresponding to the various ways that @@ -28,10 +29,13 @@ export function execCode(code: string, isolated = true): string[] { export function execModule(name: string, moduleArgs: string[], isolated = true): string[] { const args = ['-m', name, ...moduleArgs]; if (isolated) { - args[0] = ISOLATED; // replace + // .fileToCommandArgument here? + args[0] = ISOLATED.fileToCommandArgument(); // replace + //args[0] = ISOLATED; // replace } // "code" isn't specific enough to know how to parse it, // so we only return the args. + logMessage(`**** execModule ${name} ${moduleArgs}`); return args; } diff --git a/src/client/common/process/internal/scripts/index.ts b/src/client/common/process/internal/scripts/index.ts index ec59c6f6a483..74408e81e1e6 100644 --- a/src/client/common/process/internal/scripts/index.ts +++ b/src/client/common/process/internal/scripts/index.ts @@ -306,7 +306,7 @@ export function shell_exec(command: string, lockfile: string, shellArgs: string[ // We don't bother with a "parse" function since the output // could be anything. return [ - ISOLATED, + ISOLATED.fileToCommandArgument(), script, command.fileToCommandArgument(), // The shell args must come after the command diff --git a/src/client/common/terminal/service.ts b/src/client/common/terminal/service.ts index dd9bb04074e3..61bf36fcadcc 100644 --- a/src/client/common/terminal/service.ts +++ b/src/client/common/terminal/service.ts @@ -3,6 +3,7 @@ import { inject, injectable } from 'inversify'; import { CancellationToken, Disposable, Event, EventEmitter, Terminal } from 'vscode'; +import { logMessage } from '../../../datascience-ui/react-common/logger'; import '../../common/extensions'; import { IInterpreterService } from '../../interpreter/contracts'; import { IServiceContainer } from '../../ioc/types'; @@ -51,6 +52,7 @@ export class TerminalService implements ITerminalService, Disposable { if (!this.options?.hideFromUser) { this.terminal!.show(true); } + logMessage(`**** Terminal Send Command: ${text}`); this.terminal!.sendText(text, true); } public async sendText(text: string): Promise { diff --git a/src/client/common/terminal/syncTerminalService.ts b/src/client/common/terminal/syncTerminalService.ts index 53e6231be95d..3b34632eabe0 100644 --- a/src/client/common/terminal/syncTerminalService.ts +++ b/src/client/common/terminal/syncTerminalService.ts @@ -5,6 +5,7 @@ import { inject } from 'inversify'; import { CancellationToken, Disposable, Event } from 'vscode'; +import { logMessage } from '../../../datascience-ui/react-common/logger'; import { IInterpreterService } from '../../interpreter/contracts'; import { PythonEnvironment } from '../../pythonEnvironments/info'; import { Cancellation } from '../cancellation'; @@ -138,6 +139,7 @@ export class SynchronousTerminalService implements ITerminalService, Disposable const state = new ExecutionState(lockFile.filePath, this.fs, [command, ...args]); try { const pythonExec = this.pythonInterpreter || (await this.interpreter.getActiveInterpreter(undefined)); + logMessage(`**** Terminal Service Send Command ${command} ${args}`); const sendArgs = internalScripts.shell_exec(command, lockFile.filePath, args); await this.terminalService.sendCommand(pythonExec?.path || 'python', sendArgs); const promise = swallowExceptions ? state.completed : state.completed.catch(noop); From 87e90bea7045ba020483e6b715feb46895d31540 Mon Sep 17 00:00:00 2001 From: Ian Huff Date: Fri, 28 Aug 2020 13:28:17 -0700 Subject: [PATCH 2/8] remove args change --- src/client/common/process/internal/python.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/common/process/internal/python.ts b/src/client/common/process/internal/python.ts index 5c23e0d240a1..8749027e41fa 100644 --- a/src/client/common/process/internal/python.ts +++ b/src/client/common/process/internal/python.ts @@ -30,8 +30,8 @@ export function execModule(name: string, moduleArgs: string[], isolated = true): const args = ['-m', name, ...moduleArgs]; if (isolated) { // .fileToCommandArgument here? - args[0] = ISOLATED.fileToCommandArgument(); // replace - //args[0] = ISOLATED; // replace + //args[0] = ISOLATED.fileToCommandArgument(); // replace + args[0] = ISOLATED; // replace } // "code" isn't specific enough to know how to parse it, // so we only return the args. From 6c1f8000b865b097ed194959b5a7656e1762a859 Mon Sep 17 00:00:00 2001 From: Ian Huff Date: Fri, 28 Aug 2020 13:30:15 -0700 Subject: [PATCH 3/8] Remove logging message --- src/client/common/installer/moduleInstaller.ts | 1 - src/client/common/process/internal/python.ts | 2 -- src/client/common/terminal/service.ts | 1 - src/client/common/terminal/syncTerminalService.ts | 1 - 4 files changed, 5 deletions(-) diff --git a/src/client/common/installer/moduleInstaller.ts b/src/client/common/installer/moduleInstaller.ts index 2cf43bc43cc2..646ef0463116 100644 --- a/src/client/common/installer/moduleInstaller.ts +++ b/src/client/common/installer/moduleInstaller.ts @@ -48,7 +48,6 @@ export abstract class ModuleInstaller implements IModuleInstaller { : resource; const pythonPath = isResource(resource) ? settings.pythonPath : resource.path; const args = internalPython.execModule(executionInfo.moduleName, executionInfoArgs); - logMessage(`**** Module Installer Install ${args}`); if (!interpreter || interpreter.envType !== EnvironmentType.Unknown) { await terminalService.sendCommand(pythonPath, args, token); } else if (settings.globalModuleInstallation) { diff --git a/src/client/common/process/internal/python.ts b/src/client/common/process/internal/python.ts index 8749027e41fa..6a09d29c8a83 100644 --- a/src/client/common/process/internal/python.ts +++ b/src/client/common/process/internal/python.ts @@ -30,12 +30,10 @@ export function execModule(name: string, moduleArgs: string[], isolated = true): const args = ['-m', name, ...moduleArgs]; if (isolated) { // .fileToCommandArgument here? - //args[0] = ISOLATED.fileToCommandArgument(); // replace args[0] = ISOLATED; // replace } // "code" isn't specific enough to know how to parse it, // so we only return the args. - logMessage(`**** execModule ${name} ${moduleArgs}`); return args; } diff --git a/src/client/common/terminal/service.ts b/src/client/common/terminal/service.ts index 61bf36fcadcc..96ab68681ee4 100644 --- a/src/client/common/terminal/service.ts +++ b/src/client/common/terminal/service.ts @@ -52,7 +52,6 @@ export class TerminalService implements ITerminalService, Disposable { if (!this.options?.hideFromUser) { this.terminal!.show(true); } - logMessage(`**** Terminal Send Command: ${text}`); this.terminal!.sendText(text, true); } public async sendText(text: string): Promise { diff --git a/src/client/common/terminal/syncTerminalService.ts b/src/client/common/terminal/syncTerminalService.ts index 3b34632eabe0..f545397f999c 100644 --- a/src/client/common/terminal/syncTerminalService.ts +++ b/src/client/common/terminal/syncTerminalService.ts @@ -139,7 +139,6 @@ export class SynchronousTerminalService implements ITerminalService, Disposable const state = new ExecutionState(lockFile.filePath, this.fs, [command, ...args]); try { const pythonExec = this.pythonInterpreter || (await this.interpreter.getActiveInterpreter(undefined)); - logMessage(`**** Terminal Service Send Command ${command} ${args}`); const sendArgs = internalScripts.shell_exec(command, lockFile.filePath, args); await this.terminalService.sendCommand(pythonExec?.path || 'python', sendArgs); const promise = swallowExceptions ? state.completed : state.completed.catch(noop); From f8ec9812882833c261eff7abd3adabc0be9cc5d3 Mon Sep 17 00:00:00 2001 From: Ian Huff Date: Fri, 28 Aug 2020 13:32:13 -0700 Subject: [PATCH 4/8] Add news --- news/2 Fixes/13493.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 news/2 Fixes/13493.md diff --git a/news/2 Fixes/13493.md b/news/2 Fixes/13493.md new file mode 100644 index 000000000000..c7c567cfed4a --- /dev/null +++ b/news/2 Fixes/13493.md @@ -0,0 +1 @@ +Fix path to isolated script on Windows shell_exec. From e5dac0903446b6af5de855e6f14654dddbfe1358 Mon Sep 17 00:00:00 2001 From: Ian Huff Date: Fri, 28 Aug 2020 13:35:09 -0700 Subject: [PATCH 5/8] remove logMessage imports --- src/client/common/installer/moduleInstaller.ts | 1 - src/client/common/process/internal/python.ts | 1 - src/client/common/terminal/service.ts | 1 - src/client/common/terminal/syncTerminalService.ts | 1 - 4 files changed, 4 deletions(-) diff --git a/src/client/common/installer/moduleInstaller.ts b/src/client/common/installer/moduleInstaller.ts index 646ef0463116..c227c9e56906 100644 --- a/src/client/common/installer/moduleInstaller.ts +++ b/src/client/common/installer/moduleInstaller.ts @@ -4,7 +4,6 @@ import { injectable } from 'inversify'; import * as path from 'path'; import { CancellationToken, OutputChannel, ProgressLocation, ProgressOptions } from 'vscode'; -import { logMessage } from '../../../datascience-ui/react-common/logger'; import { IInterpreterService } from '../../interpreter/contracts'; import { IServiceContainer } from '../../ioc/types'; import { EnvironmentType } from '../../pythonEnvironments/info'; diff --git a/src/client/common/process/internal/python.ts b/src/client/common/process/internal/python.ts index 6a09d29c8a83..79901aabce4f 100644 --- a/src/client/common/process/internal/python.ts +++ b/src/client/common/process/internal/python.ts @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -import { logMessage } from '../../../../datascience-ui/react-common/logger'; import { _ISOLATED as ISOLATED } from './scripts'; // "python" contains functions corresponding to the various ways that diff --git a/src/client/common/terminal/service.ts b/src/client/common/terminal/service.ts index 96ab68681ee4..dd9bb04074e3 100644 --- a/src/client/common/terminal/service.ts +++ b/src/client/common/terminal/service.ts @@ -3,7 +3,6 @@ import { inject, injectable } from 'inversify'; import { CancellationToken, Disposable, Event, EventEmitter, Terminal } from 'vscode'; -import { logMessage } from '../../../datascience-ui/react-common/logger'; import '../../common/extensions'; import { IInterpreterService } from '../../interpreter/contracts'; import { IServiceContainer } from '../../ioc/types'; diff --git a/src/client/common/terminal/syncTerminalService.ts b/src/client/common/terminal/syncTerminalService.ts index f545397f999c..53e6231be95d 100644 --- a/src/client/common/terminal/syncTerminalService.ts +++ b/src/client/common/terminal/syncTerminalService.ts @@ -5,7 +5,6 @@ import { inject } from 'inversify'; import { CancellationToken, Disposable, Event } from 'vscode'; -import { logMessage } from '../../../datascience-ui/react-common/logger'; import { IInterpreterService } from '../../interpreter/contracts'; import { PythonEnvironment } from '../../pythonEnvironments/info'; import { Cancellation } from '../cancellation'; From fcd196604b849b60c8c6f810809d693dea90f85d Mon Sep 17 00:00:00 2001 From: Rich Chiodo Date: Thu, 3 Sep 2020 14:04:32 -0700 Subject: [PATCH 6/8] Update python.ts --- src/client/common/process/internal/python.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/client/common/process/internal/python.ts b/src/client/common/process/internal/python.ts index 79901aabce4f..d553e54293c1 100644 --- a/src/client/common/process/internal/python.ts +++ b/src/client/common/process/internal/python.ts @@ -28,8 +28,7 @@ export function execCode(code: string, isolated = true): string[] { export function execModule(name: string, moduleArgs: string[], isolated = true): string[] { const args = ['-m', name, ...moduleArgs]; if (isolated) { - // .fileToCommandArgument here? - args[0] = ISOLATED; // replace + args[0] = ISOLATED.fileToCommandArgument(); } // "code" isn't specific enough to know how to parse it, // so we only return the args. From d7c10e0998cd91f1301b4067f11ccedc825e98d4 Mon Sep 17 00:00:00 2001 From: rchiodo Date: Thu, 3 Sep 2020 17:08:04 -0700 Subject: [PATCH 7/8] Fix unit tests --- src/test/common/moduleInstaller.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/common/moduleInstaller.test.ts b/src/test/common/moduleInstaller.test.ts index abae5cd316a5..947f88e5fff6 100644 --- a/src/test/common/moduleInstaller.test.ts +++ b/src/test/common/moduleInstaller.test.ts @@ -140,7 +140,7 @@ import { closeActiveWindows, initializeTest } from './../initialize'; chai_use(chaiAsPromised); -const isolated = path.join(EXTENSION_ROOT_DIR_FOR_TESTS, 'pythonFiles', 'pyvsc-run-isolated.py'); +const isolated = path.join(EXTENSION_ROOT_DIR_FOR_TESTS, 'pythonFiles', 'pyvsc-run-isolated.py').replace(/\\\\/g, '/'); const info: PythonEnvironment = { architecture: Architecture.Unknown, From a28b75176f1d3177e6dd3cf704bb9c85dc556620 Mon Sep 17 00:00:00 2001 From: rchiodo Date: Fri, 4 Sep 2020 09:52:26 -0700 Subject: [PATCH 8/8] Actually fix the unit tests --- src/test/common/moduleInstaller.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/common/moduleInstaller.test.ts b/src/test/common/moduleInstaller.test.ts index 947f88e5fff6..a5bccb537869 100644 --- a/src/test/common/moduleInstaller.test.ts +++ b/src/test/common/moduleInstaller.test.ts @@ -140,7 +140,7 @@ import { closeActiveWindows, initializeTest } from './../initialize'; chai_use(chaiAsPromised); -const isolated = path.join(EXTENSION_ROOT_DIR_FOR_TESTS, 'pythonFiles', 'pyvsc-run-isolated.py').replace(/\\\\/g, '/'); +const isolated = path.join(EXTENSION_ROOT_DIR_FOR_TESTS, 'pythonFiles', 'pyvsc-run-isolated.py').replace(/\\/g, '/'); const info: PythonEnvironment = { architecture: Architecture.Unknown,