Skip to content

Commit e1763db

Browse files
authored
Merge pull request #1962 from codefori/feature/deployIgnore
Added support for .deployignore
2 parents a7d6e69 + b930d9e commit e1763db

File tree

3 files changed

+45
-9
lines changed

3 files changed

+45
-9
lines changed

src/api/local/deployTools.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ import createIgnore, { Ignore } from 'ignore';
22
import path, { basename } from 'path';
33
import vscode, { Uri, WorkspaceFolder } from 'vscode';
44
import { instance } from '../../instantiate';
5-
import { LocalLanguageActions } from './LocalLanguageActions';
65
import { DeploymentMethod, DeploymentParameters } from '../../typings';
7-
import { ConnectionConfiguration } from '../Configuration';
86
import { Tools } from '../Tools';
7+
import { LocalLanguageActions } from './LocalLanguageActions';
98
import { Deployment } from './deployment';
109

1110
type ServerFileChanges = {uploads: Uri[], relativeRemoteDeletes: string[]};
@@ -337,13 +336,18 @@ export namespace DeployTools {
337336

338337
export async function getDefaultIgnoreRules(workspaceFolder: vscode.WorkspaceFolder): Promise<Ignore> {
339338
const ignoreRules = createIgnore({ ignorecase: true }).add(`.git`);
340-
// get the .gitignore file from workspace
341-
const gitignores = await vscode.workspace.findFiles(new vscode.RelativePattern(workspaceFolder, `.gitignore`), ``, 1);
342-
if (gitignores.length > 0) {
339+
// get the .deployignore file or .gitignore file from workspace with priority to .deployignore
340+
const ignoreFile = [
341+
...await vscode.workspace.findFiles(new vscode.RelativePattern(workspaceFolder, `.deployignore`), ``, 1),
342+
...await vscode.workspace.findFiles(new vscode.RelativePattern(workspaceFolder, `.gitignore`), ``, 1)
343+
].at(0);
344+
345+
if (ignoreFile) {
343346
// get the content from the file
344-
const gitignoreContent = (await vscode.workspace.fs.readFile(gitignores[0])).toString().replace(new RegExp(`\\\r`, `g`), ``);
347+
const gitignoreContent = (await vscode.workspace.fs.readFile(ignoreFile)).toString().replace(new RegExp(`\\\r`, `g`), ``);
345348
ignoreRules.add(gitignoreContent.split(`\n`));
346349
ignoreRules.add('**/.gitignore');
350+
ignoreRules.add('**/.deployignore');
347351
}
348352

349353
return ignoreRules;

src/testing/deployTools.ts

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class File {
2525
remotePath?: string;
2626

2727
constructor(readonly name: string, content?: string[]) {
28-
if(content) {
28+
if (content) {
2929
this.content = content;
3030
} else {
3131
this.changeContent();
@@ -162,13 +162,45 @@ export const DeployToolsSuite: TestSuite = {
162162
};
163163

164164
await CompileTools.runAction(instance, vscode.Uri.joinPath(fakeProject.localPath!, "hello.txt"), action);
165-
165+
166166
const localRoot = vscode.workspace.getWorkspaceFolder(fakeProject.localPath!)?.uri;
167167
assert.ok(localRoot, "No workspace folder");
168168
assert.ok(existsSync(vscode.Uri.joinPath(localRoot, `random`, `random.txt`).fsPath));
169169
assert.ok(existsSync(vscode.Uri.joinPath(localRoot, "hello.txt").fsPath));
170170
}
171171
},
172+
{
173+
name: `Test .deployignore`, test: async () => {
174+
const workspace = vscode.workspace.workspaceFolders![0];
175+
const getRootFile = (name: string) => vscode.Uri.joinPath(workspace.uri, name);
176+
const prepare = async (name: string, rollback?: boolean) => {
177+
const file = getRootFile(rollback ? `${name}_backup` : name);
178+
if (existsSync(file.fsPath)) {
179+
await vscode.workspace.fs.rename(file, getRootFile(rollback ? name : `${name}_backup`), { overwrite: true });
180+
}
181+
return file;
182+
};
183+
184+
try {
185+
const toIgnore = ["ignore1", "ignore2", "ignore3", "ignore4", ".gitignore", ".deployignore", ".notignored"];
186+
187+
const deployignore = await prepare(".deployignore");
188+
vscode.workspace.fs.writeFile(deployignore, Buffer.from("**/ignore2\n**/ignore4"));
189+
const ignoreDeploy = await DeployTools.getDefaultIgnoreRules(workspace);
190+
assert.strictEqual(ignoreDeploy.filter(toIgnore).join(","), "ignore1,ignore3,.notignored");
191+
await vscode.workspace.fs.delete(deployignore);
192+
193+
const gitignore = await prepare(".gitignore");
194+
await vscode.workspace.fs.writeFile(gitignore, Buffer.from("**/ignore1\n**/ignore3"));
195+
const ignoreGit = await DeployTools.getDefaultIgnoreRules(workspace);
196+
assert.strictEqual(ignoreGit.filter(toIgnore).join(","), "ignore2,ignore4,.notignored");
197+
}
198+
finally {
199+
await prepare(".gitignore", true);
200+
await prepare(".deployignore", true);
201+
}
202+
}
203+
},
172204
],
173205
after: async () => {
174206
if (fakeProject.localPath && existsSync(fakeProject.localPath.fsPath)) {

src/views/ifsBrowser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { BrowserItem, BrowserItemParameters, FocusOptions, IFSFile, IFS_BROWSER_
1515
const URI_LIST_MIMETYPE = "text/uri-list";
1616
const URI_LIST_SEPARATOR = "\r\n";
1717
const PROTECTED_DIRS = /^(\/|\/QOpenSys|\/QSYS\.LIB|\/QDLS|\/QOPT|\/QNTC|\/QFileSvr\.400|\/bin|\/dev|\/home|\/tmp|\/usr|\/var)$/i;
18-
const ALWAYS_SHOW_FILES = /^(\.gitignore|\.vscode)$/i;
18+
const ALWAYS_SHOW_FILES = /^(\.gitignore|\.vscode|\.deployignore)$/i;
1919
type DragNDropAction = "move" | "copy";
2020
type DragNDropBehavior = DragNDropAction | "ask";
2121
const getDragDropBehavior = () => GlobalConfiguration.get<DragNDropBehavior>(`IfsBrowser.DragAndDropDefaultBehavior`) || "ask";

0 commit comments

Comments
 (0)