mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-15 09:35:37 -05:00
Open sql projects in opened folder (#11333)
* open projects in workspace automatically * add test * fix for windows
This commit is contained in:
@@ -7,6 +7,7 @@ import * as azdata from 'azdata';
|
||||
import * as templates from '../templates/templates';
|
||||
import * as constants from '../common/constants';
|
||||
import * as path from 'path';
|
||||
import * as glob from 'fast-glob';
|
||||
|
||||
import { Uri, Disposable, ExtensionContext, WorkspaceFolder } from 'vscode';
|
||||
import { ApiWrapper } from '../common/apiWrapper';
|
||||
@@ -37,6 +38,10 @@ export default class MainController implements Disposable {
|
||||
return this.context;
|
||||
}
|
||||
|
||||
public get projController(): ProjectsController {
|
||||
return this.projectsController;
|
||||
}
|
||||
|
||||
public deactivate(): void {
|
||||
}
|
||||
|
||||
@@ -78,6 +83,29 @@ export default class MainController implements Disposable {
|
||||
|
||||
// ensure .net core is installed
|
||||
await this.netcoreTool.findOrInstallNetCore();
|
||||
|
||||
// load any sql projects that are open in workspace folder
|
||||
await this.loadProjectsInWorkspace();
|
||||
}
|
||||
|
||||
public async loadProjectsInWorkspace(): Promise<void> {
|
||||
const workspaceFolders = this.apiWrapper.workspaceFolders();
|
||||
if (workspaceFolders?.length) {
|
||||
await Promise.all(workspaceFolders.map(async (workspaceFolder) => {
|
||||
await this.loadProjectsInFolder(workspaceFolder.uri.fsPath);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
public async loadProjectsInFolder(folderPath: string): Promise<void> {
|
||||
// path needs to use forward slashes for glob to work
|
||||
let escapedPath = glob.escapePath(folderPath.replace(/\\/g, '/'));
|
||||
let sqlprojFilter = path.posix.join(escapedPath, '**', '*.sqlproj');
|
||||
let results = await glob(sqlprojFilter);
|
||||
|
||||
for (let f in results) {
|
||||
await this.projectsController.openProject(Uri.file(results[f]));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@ import * as constants from '../common/constants';
|
||||
|
||||
import { createContext, TestContext } from './testContext';
|
||||
import MainController from '../controllers/mainController';
|
||||
import { shouldThrowSpecificError } from './testUtils';
|
||||
import { shouldThrowSpecificError, generateTestFolderPath, createTestProject } from './testUtils';
|
||||
|
||||
let testContext: TestContext;
|
||||
|
||||
@@ -77,4 +77,27 @@ describe('MainController: main controller operations', function (): void {
|
||||
should.doesNotThrow(() => controller.activate(), 'activate() should not throw an error');
|
||||
should.doesNotThrow(() => controller.dispose(), 'dispose() should not throw an error');
|
||||
});
|
||||
|
||||
it('Should load projects in workspace', async function (): Promise<void> {
|
||||
const rootFolderPath = await generateTestFolderPath();
|
||||
const project = await createTestProject(baselines.openProjectFileBaseline, rootFolderPath);
|
||||
const nestedFolder = path.join(rootFolderPath, 'nestedProject');
|
||||
const nestedProject = await createTestProject(baselines.openProjectFileBaseline, nestedFolder);
|
||||
|
||||
testContext.apiWrapper.setup(x => x.workspaceFolders()).returns(() => [workspaceFolder]);
|
||||
const workspaceFolder: vscode.WorkspaceFolder = {
|
||||
uri: vscode.Uri.file(rootFolderPath),
|
||||
name: '',
|
||||
index: 0
|
||||
};
|
||||
|
||||
const controller = new MainController(testContext.context, testContext.apiWrapper.object);
|
||||
should(controller.projController.projects.length).equal(0);
|
||||
|
||||
await controller.loadProjectsInWorkspace();
|
||||
|
||||
should(controller.projController.projects.length).equal(2);
|
||||
should(controller.projController.projects[0].projectFolderPath).equal(project.projectFolderPath);
|
||||
should(controller.projController.projects[1].projectFolderPath).equal(nestedProject.projectFolderPath);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user