Skip to content

Commit 3cd0856

Browse files
Merge pull request #792 from DustinCampbell/stream-restore-output
Stream output of dotnet restore to .NET Pane
2 parents ffc5229 + c19a49c commit 3cd0856

File tree

1 file changed

+35
-16
lines changed

1 file changed

+35
-16
lines changed

src/features/commands.ts

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ export default function registerCommands(server: OmnisharpServer, extensionPath:
3030

3131
// register two commands for running and debugging xunit tests
3232
let d6 = dotnetTest.registerDotNetTestRunCommand(server);
33-
let d7 = dotnetTest.registerDotNetTestDebugCommand(server);
34-
33+
let d7 = dotnetTest.registerDotNetTestDebugCommand(server);
34+
3535
// register process picker for attach
3636
let attachItemsProvider = DotNetAttachItemsProviderFactory.Get();
3737
let attacher = new AttachPicker(attachItemsProvider);
@@ -92,7 +92,7 @@ function projectsToCommands(projects: protocol.DotNetProject[]): Promise<Command
9292
label: `dotnet restore - (${project.Name || path.basename(project.Path)})`,
9393
description: projectDirectory,
9494
execute() {
95-
return runDotnetRestore(projectDirectory);
95+
return dotnetRestore(projectDirectory);
9696
}
9797
};
9898
});
@@ -107,7 +107,7 @@ export function dotnetRestoreAllProjects(server: OmnisharpServer) {
107107

108108
return serverUtils.requestWorkspaceInformation(server).then(info => {
109109

110-
if (!('DotNet in info') || info.DotNet.Projects.length < 1) {
110+
if (!info.DotNet || info.DotNet.Projects.length < 1) {
111111
return Promise.reject("No .NET Core projects found");
112112
}
113113

@@ -131,36 +131,55 @@ export function dotnetRestoreForProject(server: OmnisharpServer, fileName: strin
131131

132132
return serverUtils.requestWorkspaceInformation(server).then(info => {
133133

134-
if (!('DotNet in info') || info.DotNet.Projects.length < 1) {
134+
if (!info.DotNet || info.DotNet.Projects.length < 1) {
135135
return Promise.reject("No .NET Core projects found");
136136
}
137137

138138
let directory = path.dirname(fileName);
139139

140140
for (let project of info.DotNet.Projects) {
141141
if (project.Path === directory) {
142-
return runDotnetRestore(directory, fileName);
142+
return dotnetRestore(directory, fileName);
143143
}
144144
}
145145
});
146146
}
147147

148-
function runDotnetRestore(cwd: string, fileName?: string) {
149-
return new Promise<cp.ChildProcess>((resolve, reject) => {
148+
function dotnetRestore(cwd: string, fileName?: string) {
149+
return new Promise<void>((resolve, reject) => {
150150
channel.clear();
151151
channel.show();
152152

153-
let cmd = 'dotnet restore';
153+
let cmd = 'dotnet';
154+
let args = ['restore'];
155+
154156
if (fileName) {
155-
cmd = `${cmd} "${fileName}"`
157+
args.push(fileName);
156158
}
157159

158-
return cp.exec(cmd, { cwd: cwd, env: process.env }, (err, stdout, stderr) => {
159-
channel.append(stdout.toString());
160-
channel.append(stderr.toString());
161-
if (err) {
162-
channel.append('ERROR: ' + err);
163-
}
160+
let dotnet = cp.spawn(cmd, args, { cwd: cwd, env: process.env });
161+
162+
function handleData(stream: NodeJS.ReadableStream) {
163+
stream.on('data', chunk => {
164+
channel.append(chunk.toString());
165+
});
166+
167+
stream.on('err', err => {
168+
channel.append(`ERROR: ${err}`);
169+
});
170+
}
171+
172+
handleData(dotnet.stdout);
173+
handleData(dotnet.stderr);
174+
175+
dotnet.on('close', (code, signal) => {
176+
channel.appendLine(`Done: ${code}.`);
177+
resolve();
178+
});
179+
180+
dotnet.on('error', err => {
181+
channel.appendLine(`ERROR: ${err}`);
182+
reject(err)
164183
});
165184
});
166185
}

0 commit comments

Comments
 (0)