Skip to content

Commit

Permalink
Provide default sync destination if not set (#569)
Browse files Browse the repository at this point in the history
https://user-images.githubusercontent.com/88345179/225662235-59621b9c-81bd-4ca9-9393-a65b35785838.mov

---------

Co-authored-by: Fabian Jakobs <fabian.jakobs@databricks.com>
  • Loading branch information
kartikgupta-db and fjakobs authored Mar 17, 2023
1 parent 646601a commit 0a641d4
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 11 deletions.
5 changes: 5 additions & 0 deletions packages/databricks-vscode/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import {
} from "./workspace-fs";
import {generateBundleSchema} from "./bundle/GenerateBundle";
import {CustomWhenContext} from "./vscode-objs/CustomWhenContext";
import {WorkspaceStateManager} from "./vscode-objs/WorkspaceState";

export async function activate(
context: ExtensionContext
Expand Down Expand Up @@ -85,8 +86,11 @@ export async function activate(
metadata: packageMetadata,
});

const workspaceStateManager = new WorkspaceStateManager(context);

const configureAutocomplete = new ConfigureAutocomplete(
context,
workspaceStateManager,
workspace.workspaceFolders[0].uri.fsPath
);
context.subscriptions.push(
Expand Down Expand Up @@ -115,6 +119,7 @@ export async function activate(
);
const workspaceFsCommands = new WorkspaceFsCommands(
workspace.workspaceFolders[0].uri,
workspaceStateManager,
connectionManager,
workspaceFsDataProvider
);
Expand Down
14 changes: 4 additions & 10 deletions packages/databricks-vscode/src/language/ConfigureAutocomplete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
ConfigurationTarget,
} from "vscode";
import {Loggers} from "../logger";
import {WorkspaceStateManager} from "../vscode-objs/WorkspaceState";

type Resource = Uri | undefined;

Expand Down Expand Up @@ -65,6 +66,7 @@ export class ConfigureAutocomplete implements Disposable {

constructor(
private readonly context: ExtensionContext,
private readonly workspaceState: WorkspaceStateManager,
private readonly workspaceFolder: string
) {
this.configure();
Expand Down Expand Up @@ -113,12 +115,7 @@ export class ConfigureAutocomplete implements Disposable {
}

private async configure(force = false) {
if (
!force &&
this.context.workspaceState.get<boolean>(
"databricks.autocompletion.skipConfigure"
)
) {
if (!force && this.workspaceState.skipAutocompleteConfigure) {
return;
}

Expand Down Expand Up @@ -181,10 +178,7 @@ export class ConfigureAutocomplete implements Disposable {
}

if (choice === "Never for this workspace") {
this.context.workspaceState.update(
"databricks.autocompletion.skipConfigure",
true
);
this.workspaceState.skipAutocompleteConfigure = true;
return;
}

Expand Down
31 changes: 31 additions & 0 deletions packages/databricks-vscode/src/vscode-objs/WorkspaceState.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import {randomUUID} from "crypto";
import {ExtensionContext} from "vscode";

export class WorkspaceStateManager {
constructor(private context: ExtensionContext) {}

get skipAutocompleteConfigure() {
return this.context.workspaceState.get(
"databricks.autocompletion.skipConfigure",
false
);
}

set skipAutocompleteConfigure(value: boolean) {
this.context.workspaceState.update(
"databricks.autocompletion.skipConfigure",
true
);
}

get fixedUUID() {
let uuid = this.context.workspaceState.get<string>(
"databricks.fixedUUID"
);
if (!uuid) {
uuid = randomUUID();
this.context.workspaceState.update("databricks.fixedUUID", uuid);
}
return uuid;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,44 @@ import {Loggers} from "../logger";
import {workspaceConfigs} from "../vscode-objs/WorkspaceConfigs";
import {createDirWizard} from "./createDirectoryWizard";
import {WorkspaceFsDataProvider} from "./WorkspaceFsDataProvider";
import path from "node:path";
import {WorkspaceStateManager} from "../vscode-objs/WorkspaceState";

export class WorkspaceFsCommands implements Disposable {
private disposables: Disposable[] = [];

constructor(
private _workspaceFolder: Uri,
private readonly _workspaceState: WorkspaceStateManager,
private _connectionManager: ConnectionManager,
private _workspaceFsDataProvider: WorkspaceFsDataProvider
) {}
) {
this.disposables.push(
this._connectionManager.onDidChangeState(async (state) => {
if (
state !== "CONNECTED" ||
!workspaceConfigs.enableFilesInWorkspace ||
this._connectionManager.syncDestinationMapper !== undefined
) {
return;
}

const root = await this.getValidRoot(
this._connectionManager.databricksWorkspace?.currentFsRoot
.path
);

const element = await root?.mkdir(
`${path.basename(
this._workspaceFolder.fsPath
)}-${this._workspaceState.fixedUUID.slice(0, 8)}`
);
if (element) {
this.attachSyncDestination(element);
}
})
);
}

async attachSyncDestination(element: WorkspaceFsEntity) {
await this._connectionManager.attachSyncDestination(
Expand Down

0 comments on commit 0a641d4

Please sign in to comment.