提交 0aa93121 编写于 作者: D Daniel Imms

Merge remote-tracking branch 'origin/master' into terminal_split

......@@ -76,17 +76,11 @@ export class IssueReporter extends Disposable {
this.issueReporterModel = new IssueReporterModel({
issueType: configuration.data.issueType || IssueType.Bug,
includeSystemInfo: true,
includeWorkspaceInfo: true,
includeProcessInfo: true,
includeSearchedExtensions: true,
includeSettingsSearchDetails: true,
versionInfo: {
vscodeVersion: `${pkg.name} ${pkg.version} (${product.commit || 'Commit unknown'}, ${product.date || 'Date unknown'})`,
os: `${os.type()} ${os.arch()} ${os.release()}`
},
extensionsDisabled: this.environmentService.disableExtensions,
reprosWithoutExtensions: false
});
this.features = configuration.features;
......
......@@ -38,7 +38,17 @@ export class IssueReporterModel {
private _data: IssueReporterData;
constructor(initialData?: IssueReporterData) {
this._data = initialData || {};
const defaultData = {
includeSystemInfo: true,
includeWorkspaceInfo: true,
includeProcessInfo: true,
includeExtensions: true,
includeSearchedExtensions: true,
includeSettingsSearchDetails: true,
reprosWithoutExtensions: false
};
this._data = initialData ? assign(defaultData, initialData) : defaultData;
}
getData(): IssueReporterData {
......
......@@ -10,7 +10,20 @@ import { IssueReporterModel } from 'vs/code/electron-browser/issue/issueReporter
suite('IssueReporter', () => {
test('serializes model', () => {
test('sets defaults to include all data', () => {
const issueReporterModel = new IssueReporterModel();
assert.deepEqual(issueReporterModel.getData(), {
includeSystemInfo: true,
includeWorkspaceInfo: true,
includeProcessInfo: true,
includeExtensions: true,
includeSearchedExtensions: true,
includeSettingsSearchDetails: true,
reprosWithoutExtensions: false
});
});
test('serializes model skeleton when no data is provided', () => {
const issueReporterModel = new IssueReporterModel();
assert.equal(issueReporterModel.serialize(),
`
......
......@@ -177,8 +177,8 @@ export class MainThreadDebugService implements MainThreadDebugServiceShape {
}
public $startDebugging(_folderUri: uri | undefined, nameOrConfiguration: string | IConfig): TPromise<boolean> {
const folderUriString = _folderUri ? uri.revive(_folderUri).toString() : undefined;
const launch = folderUriString ? this.debugService.getConfigurationManager().getLaunches().filter(l => l.workspace && l.workspace.uri.toString() === folderUriString).pop() : undefined;
const folderUri = _folderUri ? uri.revive(_folderUri) : undefined;
const launch = this.debugService.getConfigurationManager().getLaunch(folderUri);
return this.debugService.startDebugging(launch, nameOrConfiguration).then(x => {
return true;
}, err => {
......
......@@ -131,7 +131,7 @@ export class BreakpointWidget extends ZoneWidget {
hitCondition,
verified: oldBreakpoint.verified
}
});
}, false);
} else {
this.debugService.addBreakpoints(uri, [{
lineNumber: this.lineNumber,
......
......@@ -156,7 +156,7 @@ export class StartDebugActionItem implements IActionItem {
const manager = this.debugService.getConfigurationManager();
const launches = manager.getLaunches();
const inWorkspace = this.contextService.getWorkbenchState() === WorkbenchState.WORKSPACE;
manager.getLaunches().forEach(launch =>
launches.forEach(launch =>
launch.getConfigurationNames().forEach(name => {
if (name === manager.selectedConfiguration.name && launch === manager.selectedConfiguration.launch) {
this.selected = this.options.length;
......
......@@ -222,7 +222,7 @@ export class DebugEditorModelManager implements IWorkbenchContribution {
}
modelData.dirty = this.debugService.state !== State.Inactive;
this.debugService.updateBreakpoints(modelUri, data);
this.debugService.updateBreakpoints(modelUri, data, true);
}
private onBreakpointsChange(): void {
......
......@@ -429,6 +429,8 @@ export interface IConfigurationManager {
getLaunches(): ILaunch[];
getLaunch(workspaceUri: uri): ILaunch | undefined;
/**
* Allows to register on change of selected debug configuration.
*/
......@@ -547,7 +549,7 @@ export interface IDebugService {
/**
* Updates the breakpoints.
*/
updateBreakpoints(uri: uri, data: { [id: string]: IBreakpointUpdateData }): void;
updateBreakpoints(uri: uri, data: { [id: string]: IBreakpointUpdateData }, sendOnResourceSaved: boolean): void;
/**
* Enables or disables all breakpoints. If breakpoint is passed only enables or disables the passed breakpoint.
......
......@@ -390,6 +390,14 @@ export class ConfigurationManager implements IConfigurationManager {
return this.launches;
}
public getLaunch(workspaceUri: uri): ILaunch {
if (!uri.isUri(workspaceUri)) {
return undefined;
}
return this.launches.filter(l => l.workspace && l.workspace.uri.toString() === workspaceUri.toString()).pop();
}
public get selectedConfiguration(): { launch: ILaunch, name: string } {
return {
launch: this.selectedLaunch,
......
......@@ -408,12 +408,13 @@ export class DebugEditorContribution implements IDebugEditorContribution {
// configuration widget
private updateConfigurationWidgetVisibility(): void {
const model = this.editor.getModel();
if (this.configurationWidget) {
this.configurationWidget.dispose();
}
if (model && LAUNCH_JSON_REGEX.test(model.uri.toString())) {
this.configurationWidget = this.instantiationService.createInstance(FloatingClickWidget, this.editor, nls.localize('addConfiguration', "Add Configuration..."), null);
this.configurationWidget.render();
this.toDispose.push(this.configurationWidget.onClick(() => this.addLaunchConfiguration().done(undefined, errors.onUnexpectedError)));
} else if (this.configurationWidget) {
this.configurationWidget.dispose();
}
}
......
......@@ -587,9 +587,13 @@ export class DebugService implements debug.IDebugService {
return this.sendBreakpoints(uri);
}
public updateBreakpoints(uri: uri, data: { [id: string]: DebugProtocol.Breakpoint }): void {
public updateBreakpoints(uri: uri, data: { [id: string]: DebugProtocol.Breakpoint }, sendOnResourceSaved: boolean): void {
this.model.updateBreakpoints(data);
if (sendOnResourceSaved) {
this.breakpointsToSendOnResourceSaved.add(uri.toString());
} else {
this.sendBreakpoints(uri);
}
}
public removeBreakpoints(id?: string): TPromise<any> {
......@@ -1061,7 +1065,7 @@ export class DebugService implements debug.IDebugService {
// Read the configuration again if a launch.json has been changed, if not just use the inmemory configuration
let config = process.configuration;
const launch = this.configurationManager.getLaunches().filter(l => l.workspace && process.session.root && l.workspace.uri.toString() === process.session.root.uri.toString()).pop();
const launch = process.session.root ? this.configurationManager.getLaunch(process.session.root.uri) : undefined;
if (this.launchJsonChanged && launch) {
this.launchJsonChanged = false;
config = launch.getConfiguration(process.configuration.name) || config;
......
......@@ -50,16 +50,26 @@ export class TerminalSupport {
private static isBusy(t: ITerminalInstance): boolean {
if (t.processId) {
try {
// if shell has at least one child process, assume that shell is busy
if (platform.isWindows) {
const result = cp.spawnSync('wmic', ['process', 'get', 'ParentProcessId']);
if (result.stdout) {
const pids = result.stdout.toString().split('\r\n');
return pids.some(p => parseInt(p) === t.processId);
}
} else {
const result = cp.spawnSync('/usr/bin/pgrep', ['-P', String(t.processId)]);
if (result.stdout) {
return result.stdout.toString().trim().length > 0;
}
}
}
catch (e) {
// silently ignore
}
}
// fall back to safe side
return true;
}
......
......@@ -43,7 +43,7 @@ export class MockDebugService implements IDebugService {
return TPromise.as(null);
}
public updateBreakpoints(uri: uri, data: { [id: string]: IBreakpointUpdateData }): void { }
public updateBreakpoints(uri: uri, data: { [id: string]: IBreakpointUpdateData }, sendOnResourceSaved: boolean): void { }
public enableOrDisableBreakpoints(enabled: boolean): TPromise<void> {
return TPromise.as(null);
......
......@@ -109,6 +109,7 @@
.monaco-workbench.linux .explorer-viewlet .explorer-item .monaco-inputbox,
.monaco-workbench.mac .explorer-viewlet .explorer-item .monaco-inputbox {
height: 22px;
margin-left: -1px;
}
.explorer-viewlet .explorer-item .monaco-inputbox > .wrapper > .input {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册