Skip to content

Commit 3993409

Browse files
yeion7CompuIves
authored andcommitted
Fix honoured gitignore (codesandbox#3003)
* add ignore * ignore files
1 parent fd22716 commit 3993409

File tree

7 files changed

+55
-15
lines changed

7 files changed

+55
-15
lines changed

packages/app/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
"http-browserify": "^1.7.0",
130130
"https-browserify": "^1.0.0",
131131
"humps": "CompuIves/humps",
132+
"ignore": "^5.1.4",
132133
"immer": "^3.2.0",
133134
"immutability-helper": "^2.6.6",
134135
"instantsearch.css": "^7.1.0",

packages/app/src/app/overmind/effects/git/export-to-github.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ export default async function deploy(sandbox: Sandbox) {
99
sandbox,
1010
sandbox.modules,
1111
sandbox.directories,
12-
false
12+
false,
13+
true
1314
);
1415

1516
if (!zipFile) {

packages/app/src/app/overmind/effects/zip/create-zip/create-react-app-typescript/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ export default function createZip(
4545
await Promise.all(
4646
modules
4747
.filter(x => x.directoryShortid == null)
48-
.filter(x => x.title !== 'yarn.lock' && x.title !== 'package-lock.json')
4948
.map(x => {
5049
if (x.title === 'package.json' && x.directoryShortid == null) {
5150
return createFile(alterPackageJSON(x), src);

packages/app/src/app/overmind/effects/zip/create-zip/full/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ export default async function createZip(
1111
await Promise.all(
1212
modules
1313
.filter(x => x.directoryShortid == null)
14-
.filter(x => x.title !== 'yarn.lock' && x.title !== 'package-lock.json')
1514
.map(x => createFile(x, zip, downloadBlobs))
1615
);
1716

packages/app/src/app/overmind/effects/zip/create-zip/index.ts

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import JSZip from 'jszip';
22
import { saveAs } from 'file-saver';
3+
import ignore from 'ignore';
34
import { Sandbox, Module, Directory } from '@codesandbox/common/lib/types';
45
import {
56
react,
@@ -8,7 +9,10 @@ import {
89
preact,
910
svelte,
1011
} from '@codesandbox/common/lib/templates/index';
11-
import { resolveModule } from '@codesandbox/common/lib/sandbox/modules';
12+
import {
13+
resolveModule,
14+
getModulePath,
15+
} from '@codesandbox/common/lib/sandbox/modules';
1216

1317
export const BLOB_ID = 'blob-url://';
1418

@@ -192,17 +196,42 @@ export async function createDirectoryWithFiles(
192196
);
193197
}
194198

199+
const DEFAULT_IGNORE = ['yarn.lock', 'package-lock.json'];
200+
195201
export async function createZip(
196202
sandbox: Sandbox,
197203
modules: Array<Module>,
198204
directories: Array<Directory>,
199-
downloadBlobs: boolean = true
205+
downloadBlobs: boolean = true,
206+
useGitIgnore: boolean = false
200207
) {
201208
const zip = new JSZip();
209+
const ignorer = ignore().add(DEFAULT_IGNORE);
210+
211+
if (useGitIgnore) {
212+
const gitIgnore = modules.find(
213+
module =>
214+
module.title === '.gitignore' && module.directoryShortid === null
215+
);
216+
217+
ignorer.add(gitIgnore ? gitIgnore.code : '');
218+
}
219+
220+
const filteredModules = modules.filter(module => {
221+
// Relative path
222+
const path = getModulePath(modules, directories, module.id).substring(1);
223+
return !ignorer.ignores(path);
224+
});
202225

203226
const fullPromise = () =>
204227
import(/* webpackChunkName: 'full-zip' */ './full').then(generator =>
205-
generator.default(zip, sandbox, modules, directories, downloadBlobs)
228+
generator.default(
229+
zip,
230+
sandbox,
231+
filteredModules,
232+
directories,
233+
downloadBlobs
234+
)
206235
);
207236

208237
let promise = null;
@@ -218,11 +247,15 @@ export async function createZip(
218247
} else if (sandbox.template === react.name) {
219248
promise = import(
220249
/* webpackChunkName: 'create-react-app-zip' */ './create-react-app'
221-
).then(generator => generator.default(zip, sandbox, modules, directories));
250+
).then(generator =>
251+
generator.default(zip, sandbox, filteredModules, directories)
252+
);
222253
} else if (sandbox.template === reactTs.name) {
223254
promise = import(
224255
/* webpackChunkName: 'create-react-app-typescript-zip' */ './create-react-app-typescript'
225-
).then(generator => generator.default(zip, sandbox, modules, directories));
256+
).then(generator =>
257+
generator.default(zip, sandbox, filteredModules, directories)
258+
);
226259
} else if (sandbox.template === vue.name) {
227260
try {
228261
const packageJSONModule = sandbox.modules.find(
@@ -238,30 +271,38 @@ export async function createZip(
238271
promise = fullPromise();
239272
} else {
240273
promise = import(/* webpackChunkName: 'vue-zip' */ './vue-cli').then(
241-
generator => generator.default(zip, sandbox, modules, directories)
274+
generator =>
275+
generator.default(zip, sandbox, filteredModules, directories)
242276
);
243277
}
244278
} catch (e) {
245279
promise = fullPromise();
246280
}
247281
} else if (sandbox.template === preact.name) {
248282
promise = import(/* webpackChunkName: 'preact-zip' */ './preact-cli').then(
249-
generator => generator.default(zip, sandbox, modules, directories)
283+
generator => generator.default(zip, sandbox, filteredModules, directories)
250284
);
251285
} else if (sandbox.template === svelte.name) {
252286
promise = import(/* webpackChunkName: 'svelte-zip' */ './svelte').then(
253-
generator => generator.default(zip, sandbox, modules, directories)
287+
generator => generator.default(zip, sandbox, filteredModules, directories)
254288
);
255289
} else {
256290
// If no specific zip generator is found we will default to the full generator
257291
promise = import(/* webpackChunkName: 'full-zip' */ './full').then(
258292
generator =>
259-
generator.default(zip, sandbox, modules, directories, downloadBlobs)
293+
generator.default(
294+
zip,
295+
sandbox,
296+
filteredModules,
297+
directories,
298+
downloadBlobs
299+
)
260300
);
261301
}
262302

263303
if (promise) {
264304
await promise;
305+
265306
const file = await zip.generateAsync({ type: 'blob' });
266307

267308
return file;

packages/app/src/app/overmind/effects/zip/create-zip/vue-cli/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ export default function createZip(
1313
await Promise.all(
1414
modules
1515
.filter(x => x.directoryShortid == null)
16-
.filter(x => x.title !== 'yarn.lock' && x.title !== 'package-lock.json')
1716
.map(x => createFile(x, src))
1817
);
1918

yarn.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8206,7 +8206,7 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
82068206
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
82078207

82088208
console-feed@CompuIves/console-feed#build2, console-feed@^2.8.5:
8209-
version "2.8.8"
8209+
version "2.8.9"
82108210
resolved "https://codeload.github.com/CompuIves/console-feed/tar.gz/42f10eb3063f0f26ee9745c4c9e4542cb5591f46"
82118211
dependencies:
82128212
emotion "^9.1.1"
@@ -14011,7 +14011,7 @@ ignore@^4.0.3, ignore@^4.0.6:
1401114011
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
1401214012
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
1401314013

14014-
ignore@^5.1.1:
14014+
ignore@^5.1.1, ignore@^5.1.4:
1401514015
version "5.1.4"
1401614016
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
1401714017
integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==

0 commit comments

Comments
 (0)