From a2cf11d1da37856a9d2f4dd26dd9ba45ec598e27 Mon Sep 17 00:00:00 2001 From: Mohit Suman Date: Sat, 14 Sep 2019 01:15:19 +0530 Subject: [PATCH 1/4] 1. Add context folder selection at start for git workflow 2. Check for component folder already existing --- src/openshift/component.ts | 58 +++++++-------------------------- src/util/workspace.ts | 54 ------------------------------ src/util/workspaceUtil.ts | 67 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 101 deletions(-) delete mode 100644 src/util/workspace.ts create mode 100644 src/util/workspaceUtil.ts diff --git a/src/openshift/component.ts b/src/openshift/component.ts index 58bf268a1..a49cf9c51 100644 --- a/src/openshift/component.ts +++ b/src/openshift/component.ts @@ -17,7 +17,7 @@ import { Platform } from '../util/platform'; import path = require('path'); import fs = require('fs-extra'); import globby = require('globby'); -import { selectWorkspaceFolder } from '../util/workspace'; +import { workspaceUtil } from '../util/workspaceUtil'; interface WorkspaceFolderItem extends QuickPickItem { uri: Uri; @@ -380,7 +380,7 @@ export class Component extends OpenShiftItem { if (!application) application = await Component.getOpenshiftData(context); if (!application) return null; - const workspacePath = await selectWorkspaceFolder(); + const workspacePath = await workspaceUtil.selectWorkspaceFolder(); if (!workspacePath) return null; const componentList: Array = await Component.odo.getComponents(application); @@ -426,7 +426,10 @@ export class Component extends OpenShiftItem { let application: OpenShiftObject = context; if (!application) application = await Component.getOpenshiftData(context); if (!application) return null; + const workspacePath = await workspaceUtil.selectWorkspaceFolder(); + if (!workspacePath) return null; const delayer = new Delayer(500); + const repoURI = await window.showInputBox({ prompt: 'Git repository URI', validateInput: (value: string) => { @@ -459,65 +462,26 @@ export class Component extends OpenShiftItem { if (!componentTypeVersion) return null; - const folder = await window.showOpenDialog({ - canSelectFiles: false, - canSelectFolders: true, - canSelectMany: false, - defaultUri: Uri.file(Platform.getUserHomePath()), - openLabel: "Select Context Folder for Component" - }); - - if (!folder) return null; - window.showInformationMessage('Do you want to clone git repository for created Component?', 'Yes', 'No').then((value) => { value === 'Yes' && commands.executeCommand('git.clone', repoURI); }); - await Component.odo.createComponentFromGit(application, componentTypeName, componentTypeVersion, componentName, repoURI, folder[0], gitRef.label); + await Component.odo.createComponentFromGit(application, componentTypeName, componentTypeVersion, componentName, repoURI, workspacePath, gitRef.label); return `Component '${componentName}' successfully created`; } static async createFromBinary(context: OpenShiftObject): Promise { let application: OpenShiftObject = context; - let folder: WorkspaceFolderItem[] = []; + if (!application) application = await Component.getOpenshiftData(context); + if (!application) return null; - if (workspace.workspaceFolders && workspace.workspaceFolders.length > 0) { - folder = workspace.workspaceFolders.filter( - (value) => { - let result = true; - try { - result = !fs.statSync(path.join(value.uri.fsPath, '.odo', 'config.yaml')).isFile(); - } catch (ignore) { - } - return result; - } - ).map( - (folder) => ({ label: `$(file-directory) ${folder.uri.fsPath}`, uri: folder.uri }) - ); - } - const addWorkspaceFolder = new CreateWorkspaceItem(); - const choice: any = await window.showQuickPick([addWorkspaceFolder, ...folder], {placeHolder: "Select context folder"}); - if (!choice) return null; - let workspacePath: Uri; - - if (choice.label === addWorkspaceFolder.label) { - const folders = await window.showOpenDialog({ - canSelectFiles: false, - canSelectFolders: true, - canSelectMany: false, - defaultUri: Uri.file(Platform.getUserHomePath()), - openLabel: "Add context Folder for Component" - }); - if (!folders) return null; - workspacePath = folders[0]; - } else { - workspacePath = choice.uri; - } + const workspacePath = await workspaceUtil.selectWorkspaceFolder(); if (!workspacePath) return null; + const globPath = process.platform === 'win32' ? workspacePath.fsPath.replace(/\\/g, '/') : workspacePath.path; const paths = globby.sync(`${globPath}/*.+(jar|war)`, { extglob: true }); @@ -560,7 +524,7 @@ export class Component extends OpenShiftItem { throw new Error(`Cannot import unknown Component type '${componentType}'.`); } - const workspaceFolder = await selectWorkspaceFolder(); + const workspaceFolder = await workspaceUtil.selectWorkspaceFolder(); if (!workspaceFolder) return null; return await Progress.execFunctionWithProgress(`Importing component '${compName}'`, async (progress) => { try { diff --git a/src/util/workspace.ts b/src/util/workspace.ts deleted file mode 100644 index c2c12a3be..000000000 --- a/src/util/workspace.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { workspace, QuickPickItem, window, Uri } from "vscode"; -import { Platform } from "./platform"; -import path = require('path'); -import fs = require('fs-extra'); - -interface WorkspaceFolderItem extends QuickPickItem { - uri: Uri; -} - -class CreateWorkspaceItem implements QuickPickItem { - - constructor() { } - - get label(): string { return `$(plus) Add new workspace folder.`; } - get description(): string { return 'Folder which does not have an openshift context'; } - -} - -export async function selectWorkspaceFolder(): Promise { - let folder: WorkspaceFolderItem[] = []; - if (workspace.workspaceFolders && workspace.workspaceFolders.length > 0) { - folder = workspace.workspaceFolders.filter( - (value) => { - let result = true; - try { - result = !fs.statSync(path.join(value.uri.fsPath, '.odo', 'config.yaml')).isFile(); - } catch (ignore) { - } - return result; - } - ).map( - (folder) => ({ label: `$(file-directory) ${folder.uri.fsPath}`, uri: folder.uri }) - ); - } - const addWorkspaceFolder = new CreateWorkspaceItem(); - const choice: any = await window.showQuickPick([addWorkspaceFolder, ...folder], {placeHolder: "Select workspace folder"}); - - let workspacePath: Uri; - - if (choice === addWorkspaceFolder) { - const folders = await window.showOpenDialog({ - canSelectFiles: false, - canSelectFolders: true, - canSelectMany: false, - defaultUri: Uri.file(Platform.getUserHomePath()), - openLabel: "Add workspace Folder for Component" - }); - if (!folders) return null; - workspacePath = folders[0]; - } else if (choice) { - workspacePath = choice.uri; - } - return workspacePath; -} \ No newline at end of file diff --git a/src/util/workspaceUtil.ts b/src/util/workspaceUtil.ts new file mode 100644 index 000000000..57ae821d0 --- /dev/null +++ b/src/util/workspaceUtil.ts @@ -0,0 +1,67 @@ +import { workspace, QuickPickItem, window, Uri } from "vscode"; +import { Platform } from "./platform"; +import path = require('path'); +import fs = require('fs-extra'); + +interface WorkspaceFolderItem extends QuickPickItem { + uri: Uri; +} + +class CreateWorkspaceItem implements QuickPickItem { + + constructor() { } + + get label(): string { return `$(plus) Add new context folder.`; } + get description(): string { return 'Folder which does not have an openshift context'; } + +} + +export class workspaceUtil { + + static async selectWorkspaceFolder(): Promise { + let folder: WorkspaceFolderItem[] = []; + if (workspace.workspaceFolders && workspace.workspaceFolders.length > 0) { + folder = workspace.workspaceFolders.filter( + (value) => { + let result = true; + try { + result = !fs.statSync(path.join(value.uri.fsPath, '.odo', 'config.yaml')).isFile(); + } catch (ignore) { + } + return result; + } + ).map( + (folder) => ({ label: `$(file-directory) ${folder.uri.fsPath}`, uri: folder.uri }) + ); + } + const addWorkspaceFolder = new CreateWorkspaceItem(); + const choice: any = await window.showQuickPick([addWorkspaceFolder, ...folder], {placeHolder: "Select context folder"}); + if (!choice) return null; + + let workspacePath: Uri; + + if (choice === addWorkspaceFolder) { + const folders = await window.showOpenDialog({ + canSelectFiles: false, + canSelectFolders: true, + canSelectMany: false, + defaultUri: Uri.file(Platform.getUserHomePath()), + openLabel: "Add context folder for component in workspace." + }); + if (!folders) return null; + if (await this.checkComponentFolder(folders[0])) { + window.showErrorMessage('The folder selected already contains a component. Please select a different folder'); + return null; + } else { + workspacePath = folders[0]; + } + } else if (choice) { + workspacePath = choice.uri; + } + return workspacePath; + } + + static async checkComponentFolder(folder) { + return fs.existsSync(path.join(folder.path, '.odo', 'config.yaml')); + } +} \ No newline at end of file From bc99b5b52eb94ec8ac69ad63f961c04eb8f82442 Mon Sep 17 00:00:00 2001 From: Mohit Suman Date: Sat, 14 Sep 2019 01:21:20 +0530 Subject: [PATCH 2/4] fix tslint issues --- src/openshift/component.ts | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/openshift/component.ts b/src/openshift/component.ts index a49cf9c51..e272650f3 100644 --- a/src/openshift/component.ts +++ b/src/openshift/component.ts @@ -15,23 +15,9 @@ import { Refs, Ref, Type } from '../util/refs'; import { Delayer } from '../util/async'; import { Platform } from '../util/platform'; import path = require('path'); -import fs = require('fs-extra'); import globby = require('globby'); import { workspaceUtil } from '../util/workspaceUtil'; -interface WorkspaceFolderItem extends QuickPickItem { - uri: Uri; -} - -class CreateWorkspaceItem implements QuickPickItem { - - constructor() { } - - get label(): string { return `$(plus) Add new workspace folder.`; } - get description(): string { return 'Folder which does not have an openshift context'; } - -} - export class Component extends OpenShiftItem { public static extensionContext: ExtensionContext; static async getOpenshiftData(context: OpenShiftObject): Promise { From 39e5580b035068f516d2b105c8e432718e434f1f Mon Sep 17 00:00:00 2001 From: Mohit Suman Date: Sat, 14 Sep 2019 01:54:20 +0530 Subject: [PATCH 3/4] remove class declaration from workspace.ts --- src/openshift/component.ts | 10 +++--- src/util/workspace.ts | 64 ++++++++++++++++++++++++++++++++++++ src/util/workspaceUtil.ts | 67 -------------------------------------- 3 files changed, 69 insertions(+), 72 deletions(-) create mode 100644 src/util/workspace.ts delete mode 100644 src/util/workspaceUtil.ts diff --git a/src/openshift/component.ts b/src/openshift/component.ts index e272650f3..5fc588014 100644 --- a/src/openshift/component.ts +++ b/src/openshift/component.ts @@ -16,7 +16,7 @@ import { Delayer } from '../util/async'; import { Platform } from '../util/platform'; import path = require('path'); import globby = require('globby'); -import { workspaceUtil } from '../util/workspaceUtil'; +import { selectWorkspaceFolder } from '../util/workspace'; export class Component extends OpenShiftItem { public static extensionContext: ExtensionContext; @@ -366,7 +366,7 @@ export class Component extends OpenShiftItem { if (!application) application = await Component.getOpenshiftData(context); if (!application) return null; - const workspacePath = await workspaceUtil.selectWorkspaceFolder(); + const workspacePath = await selectWorkspaceFolder(); if (!workspacePath) return null; const componentList: Array = await Component.odo.getComponents(application); @@ -412,7 +412,7 @@ export class Component extends OpenShiftItem { let application: OpenShiftObject = context; if (!application) application = await Component.getOpenshiftData(context); if (!application) return null; - const workspacePath = await workspaceUtil.selectWorkspaceFolder(); + const workspacePath = await selectWorkspaceFolder(); if (!workspacePath) return null; const delayer = new Delayer(500); @@ -464,7 +464,7 @@ export class Component extends OpenShiftItem { if (!application) return null; - const workspacePath = await workspaceUtil.selectWorkspaceFolder(); + const workspacePath = await selectWorkspaceFolder(); if (!workspacePath) return null; @@ -510,7 +510,7 @@ export class Component extends OpenShiftItem { throw new Error(`Cannot import unknown Component type '${componentType}'.`); } - const workspaceFolder = await workspaceUtil.selectWorkspaceFolder(); + const workspaceFolder = await selectWorkspaceFolder(); if (!workspaceFolder) return null; return await Progress.execFunctionWithProgress(`Importing component '${compName}'`, async (progress) => { try { diff --git a/src/util/workspace.ts b/src/util/workspace.ts new file mode 100644 index 000000000..b413ad18a --- /dev/null +++ b/src/util/workspace.ts @@ -0,0 +1,64 @@ +import { workspace, QuickPickItem, window, Uri } from "vscode"; +import { Platform } from "./platform"; +import path = require('path'); +import fs = require('fs-extra'); + +interface WorkspaceFolderItem extends QuickPickItem { + uri: Uri; +} + +class CreateWorkspaceItem implements QuickPickItem { + + constructor() { } + + get label(): string { return `$(plus) Add new context folder.`; } + get description(): string { return 'Folder which does not have an openshift context'; } + +} + +export async function selectWorkspaceFolder(): Promise { + let folder: WorkspaceFolderItem[] = []; + if (workspace.workspaceFolders && workspace.workspaceFolders.length > 0) { + folder = workspace.workspaceFolders.filter( + (value) => { + let result = true; + try { + result = !fs.statSync(path.join(value.uri.fsPath, '.odo', 'config.yaml')).isFile(); + } catch (ignore) { + } + return result; + } + ).map( + (folder) => ({ label: `$(file-directory) ${folder.uri.fsPath}`, uri: folder.uri }) + ); + } + const addWorkspaceFolder = new CreateWorkspaceItem(); + const choice: any = await window.showQuickPick([addWorkspaceFolder, ...folder], {placeHolder: "Select context folder"}); + if (!choice) return null; + + let workspacePath: Uri; + + if (choice === addWorkspaceFolder) { + const folders = await window.showOpenDialog({ + canSelectFiles: false, + canSelectFolders: true, + canSelectMany: false, + defaultUri: Uri.file(Platform.getUserHomePath()), + openLabel: "Add context folder for component in workspace." + }); + if (!folders) return null; + if (await checkComponentFolder(folders[0])) { + window.showInformationMessage('The folder selected already contains a component. Please select a different folder'); + return this.selectWorkspaceFolder(); + } else { + workspacePath = folders[0]; + } + } else if (choice) { + workspacePath = choice.uri; + } + return workspacePath; + } + + async function checkComponentFolder(folder) { + return fs.existsSync(path.join(folder.path, '.odo', 'config.yaml')); + } \ No newline at end of file diff --git a/src/util/workspaceUtil.ts b/src/util/workspaceUtil.ts deleted file mode 100644 index 57ae821d0..000000000 --- a/src/util/workspaceUtil.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { workspace, QuickPickItem, window, Uri } from "vscode"; -import { Platform } from "./platform"; -import path = require('path'); -import fs = require('fs-extra'); - -interface WorkspaceFolderItem extends QuickPickItem { - uri: Uri; -} - -class CreateWorkspaceItem implements QuickPickItem { - - constructor() { } - - get label(): string { return `$(plus) Add new context folder.`; } - get description(): string { return 'Folder which does not have an openshift context'; } - -} - -export class workspaceUtil { - - static async selectWorkspaceFolder(): Promise { - let folder: WorkspaceFolderItem[] = []; - if (workspace.workspaceFolders && workspace.workspaceFolders.length > 0) { - folder = workspace.workspaceFolders.filter( - (value) => { - let result = true; - try { - result = !fs.statSync(path.join(value.uri.fsPath, '.odo', 'config.yaml')).isFile(); - } catch (ignore) { - } - return result; - } - ).map( - (folder) => ({ label: `$(file-directory) ${folder.uri.fsPath}`, uri: folder.uri }) - ); - } - const addWorkspaceFolder = new CreateWorkspaceItem(); - const choice: any = await window.showQuickPick([addWorkspaceFolder, ...folder], {placeHolder: "Select context folder"}); - if (!choice) return null; - - let workspacePath: Uri; - - if (choice === addWorkspaceFolder) { - const folders = await window.showOpenDialog({ - canSelectFiles: false, - canSelectFolders: true, - canSelectMany: false, - defaultUri: Uri.file(Platform.getUserHomePath()), - openLabel: "Add context folder for component in workspace." - }); - if (!folders) return null; - if (await this.checkComponentFolder(folders[0])) { - window.showErrorMessage('The folder selected already contains a component. Please select a different folder'); - return null; - } else { - workspacePath = folders[0]; - } - } else if (choice) { - workspacePath = choice.uri; - } - return workspacePath; - } - - static async checkComponentFolder(folder) { - return fs.existsSync(path.join(folder.path, '.odo', 'config.yaml')); - } -} \ No newline at end of file From e5a041e187a4956d06dd8294fedc41422458ede2 Mon Sep 17 00:00:00 2001 From: Denis Golovin Date: Fri, 13 Sep 2019 13:45:45 -0700 Subject: [PATCH 4/4] fix path validation function --- src/util/workspace.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/util/workspace.ts b/src/util/workspace.ts index b413ad18a..763dac662 100644 --- a/src/util/workspace.ts +++ b/src/util/workspace.ts @@ -12,7 +12,7 @@ class CreateWorkspaceItem implements QuickPickItem { constructor() { } get label(): string { return `$(plus) Add new context folder.`; } - get description(): string { return 'Folder which does not have an openshift context'; } + get description(): string { return 'Folder which does not have an OpenShift context'; } } @@ -48,7 +48,7 @@ export async function selectWorkspaceFolder(): Promise { }); if (!folders) return null; if (await checkComponentFolder(folders[0])) { - window.showInformationMessage('The folder selected already contains a component. Please select a different folder'); + window.showInformationMessage('The folder selected already contains a component. Please select a different folder.'); return this.selectWorkspaceFolder(); } else { workspacePath = folders[0]; @@ -59,6 +59,6 @@ export async function selectWorkspaceFolder(): Promise { return workspacePath; } - async function checkComponentFolder(folder) { - return fs.existsSync(path.join(folder.path, '.odo', 'config.yaml')); + async function checkComponentFolder(folder: Uri) { + return fs.existsSync(path.join(folder.fsPath, '.odo', 'config.yaml')); } \ No newline at end of file