diff --git a/package.json b/package.json index 0b09a19..7ba3d19 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "rech-git-sparse-scm", "displayName": "SCM Sparse Checkout Extension", "description": "Rech Git Sparse enhances your version control experience in Visual Studio Code Source Control by integrating sparse checkout capabilities.", - "version": "0.0.10", + "version": "0.0.12", "publisher": "rechinformatica", "engines": { "vscode": "^1.89.0" diff --git a/src/extension.ts b/src/extension.ts index b94ec9d..6e4d164 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -10,19 +10,19 @@ export function activate(context: vscode.ExtensionContext) { const updateContext = - // Update context when active editor changes - vscode.window.onDidChangeActiveTextEditor(() => { - const editor = vscode.window.activeTextEditor; - if (editor) { - const filePath = editor.document.fileName; - const config = vscode.workspace.getConfiguration('rech-git-sparse-scm'); - const mirrorRepositories = config.get('mirrorRepository', []); - const isInMirrorRepo = mirrorRepositories.some(repo => filePath.startsWith(repo)); - vscode.commands.executeCommand('setContext', 'isInMirrorRepository', isInMirrorRepo); - } else { - vscode.commands.executeCommand('setContext', 'isInMirrorRepository', false); - } - }); + // Update context when active editor changes + vscode.window.onDidChangeActiveTextEditor(() => { + const editor = vscode.window.activeTextEditor; + if (editor) { + const filePath = editor.document.fileName; + const config = vscode.workspace.getConfiguration('rech-git-sparse-scm'); + const mirrorRepositories = config.get('mirrorRepository', []); + const isInMirrorRepo = mirrorRepositories.some(repo => filePath.startsWith(repo)); + vscode.commands.executeCommand('setContext', 'isInMirrorRepository', isInMirrorRepo); + } else { + vscode.commands.executeCommand('setContext', 'isInMirrorRepository', false); + } + }); // Initialize remote repository only after git extensions opens a repository const resourceStateProviderGit = new ResourceStateProviderGit(); @@ -136,16 +136,24 @@ export function activate(context: vscode.ExtensionContext) { }); context.subscriptions.push(removeAllSparseCheckout); - const activeEditor = vscode.window.activeTextEditor; // Remove selected file in sparse-checkout control const removeSparseCheckout = vscode.commands.registerCommand('rech-git-sparse-scm.removeSparseCheckout', (resource: vscode.SourceControlResourceState | vscode.Uri) => { - let resourcePath = ""; + const activeEditor = vscode.window.activeTextEditor; + let resourcePath; + let workspaceFolderFromFile; + + if (activeEditor) { + workspaceFolderFromFile = vscode.workspace.getWorkspaceFolder(activeEditor.document.uri)?.uri.fsPath.replaceAll("\\", "/") + "/"; + } if (resource) { if (resource instanceof RemoteResource) { resourcePath = resource.resourceUri.path; } if (resource instanceof vscode.Uri) { resourcePath = resource.path; + workspaceFolderFromFile = vscode.workspace.getWorkspaceFolder(resource)?.uri.fsPath.replaceAll("\\", "/") + "/"; + vscode.window.showInformationMessage(`resourcePath: ${resourcePath}`); + vscode.window.showInformationMessage(`workspaceFolderFromFile: ${workspaceFolderFromFile}`); } } else { // Obtain repository directory mirror list @@ -158,15 +166,11 @@ export function activate(context: vscode.ExtensionContext) { }); } } - if (activeEditor) { - let workspaceFolderFromFile = vscode.workspace.getWorkspaceFolder(activeEditor.document.uri)?.uri.fsPath; - if (workspaceFolderFromFile) { - workspaceFolderFromFile = workspaceFolderFromFile.replaceAll("\\", "/") + "/"; - resourcePath = resourcePath.replace(workspaceFolderFromFile, ''); - } + if (workspaceFolderFromFile && resourcePath) { + resourcePath = resourcePath.replace(new RegExp(workspaceFolderFromFile.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'gi'), ''); } // Is there a valid file to sparse checkout? - if (resourcePath.length > 0) { + if (resourcePath) { RemoveSparseCheckoutCommand.removeSparseCheckout(resourcePath); } else { vscode.window.showErrorMessage('Nenhum arquivo selecionado ou aberto para adicionar no sparse-checkout.');