From 50fe27724238d89de752c6446cadfb5a030a709d Mon Sep 17 00:00:00 2001 From: develar Date: Mon, 26 Jun 2017 18:52:13 +0200 Subject: [PATCH] fix: 19.8.0 broke ignoring folders Close #1741 --- .idea/dictionaries/develar.xml | 2 + packages/electron-builder/src/fileMatcher.ts | 39 ++++++++++---------- test/out/__snapshots__/ignoreTest.js.snap | 6 +++ test/src/ignoreTest.ts | 23 ++++++++++++ 4 files changed, 51 insertions(+), 19 deletions(-) diff --git a/.idea/dictionaries/develar.xml b/.idea/dictionaries/develar.xml index f81b400a75d..c5b7607aade 100644 --- a/.idea/dictionaries/develar.xml +++ b/.idea/dictionaries/develar.xml @@ -90,6 +90,7 @@ gtar guid guiinit + gypi hdiutil headerimage hicolor @@ -129,6 +130,7 @@ libgconf libgcrypt libgnome + liblzma libnotify libnss libunity diff --git a/packages/electron-builder/src/fileMatcher.ts b/packages/electron-builder/src/fileMatcher.ts index 6bd82abfbf3..b53c30fb206 100644 --- a/packages/electron-builder/src/fileMatcher.ts +++ b/packages/electron-builder/src/fileMatcher.ts @@ -62,7 +62,8 @@ export class FileMatcher { const parsedPattern = new Minimatch(pattern, minimatchOptions) result.push(parsedPattern) - if (!hasMagic(parsedPattern)) { + // do not add if contains dot (possibly file if has extension) + if (!pattern.includes(".") && !hasMagic(parsedPattern)) { // https://github.com/electron-userland/electron-builder/issues/545 // add **/* result.push(new Minimatch(`${pattern}/**/*`, minimatchOptions)) @@ -88,36 +89,38 @@ export function createFileMatcher(appDir: string, resourcesPath: string, macroEx const patterns = packager.info.isPrepackedAppAsar ? null : getFileMatchers(packager.info.config, "files", appDir, path.join(resourcesPath, "app"), false, macroExpander, platformSpecificBuildOptions) const matcher = patterns == null ? new FileMatcher(appDir, path.join(resourcesPath, "app"), macroExpander) : patterns[0] - const relativeBuildResourceDir = path.relative(matcher.from, buildResourceDir) - const ignoreBuildResourceDirPattern = (relativeBuildResourceDir.length !== 0 && !relativeBuildResourceDir.startsWith(".")) ? `!${relativeBuildResourceDir}{,/**/*}` : null const customFirstPatterns: Array = [] if (matcher.isEmpty() || matcher.containsOnlyIgnore()) { - if (ignoreBuildResourceDirPattern != null) { - matcher.addPattern(ignoreBuildResourceDirPattern) - } customFirstPatterns.push("**/*") } else { - if (ignoreBuildResourceDirPattern != null) { - customFirstPatterns.push(ignoreBuildResourceDirPattern) - } - // prependPattern - user pattern should be after to be able to override customFirstPatterns.push("**/node_modules/**/*") matcher.addPattern("package.json") } + // https://github.com/electron-userland/electron-builder/issues/1482 + const relativeBuildResourceDir = path.relative(matcher.from, buildResourceDir) + if (relativeBuildResourceDir.length !== 0 && !relativeBuildResourceDir.startsWith(".")) { + customFirstPatterns.push(`!${relativeBuildResourceDir}{,/**/*}`) + } + if (packager.platform !== Platform.WINDOWS) { // https://github.com/electron-userland/electron-builder/issues/1738 customFirstPatterns.push("!**/node_modules/**/*.{dll,exe}") } - matcher.patterns.unshift(...customFirstPatterns) + // add our default exclusions after user possibly defined "all" pattern + const insertIndex = Math.max(0, matcher.patterns.findIndex(it => it == "**/*")) + matcher.patterns.splice(insertIndex, 0, ...customFirstPatterns) // https://github.com/electron-userland/electron-builder/issues/1738#issuecomment-310729208 - // must be before common ignore patterns (to ignore common ignores like .svn) - matcher.addPattern("!**/node_modules/lzma-native/build/**/*") - matcher.addPattern("**/node_modules/lzma-native/build/{Release,Debug}") + // https://github.com/electron-userland/electron-builder/issues/1741#issuecomment-311111418 so, do not use inclusive pattern + // matcher.addPattern("**/node_modules/lzma-native/build/{Release,Debug}") + matcher.addPattern("!**/node_modules/lzma-native/build/*.{mk,gypi,Makefile}") + matcher.addPattern("!**/node_modules/lzma-native/build/{Makefile,gyp-mac-tool}") + matcher.addPattern("!**/node_modules/lzma-native/build/liblzma{,/**/*}") + matcher.addPattern("!**/node_modules/lzma-native/deps/xz-*") matcher.addPattern("!**/node_modules/lzma-native/deps/doc{,/**/*}") @@ -128,11 +131,9 @@ export function createFileMatcher(appDir: string, resourcesPath: string, macroEx //noinspection SpellCheckingInspection matcher.addPattern("!**/{.git,.hg,.svn,CVS,RCS,SCCS," + "__pycache__,.DS_Store,thumbs.db,.gitignore,.gitattributes," + - ".editorconfig,.flowconfig,.jshintrc,.eslintrc," + - ".yarn-integrity,.yarn-metadata.json,yarn-error.log,yarn.lock,npm-debug.log," + - ".idea,.vs," + - "appveyor.yml,.travis.yml,circle.yml," + - ".nyc_output}") + ".idea,.vs,.editorconfig,.flowconfig,.jshintrc,.eslintrc," + + ".yarn-integrity,.yarn-metadata.json,yarn-error.log,yarn.lock,package-lock.json,npm-debug.log," + + "appveyor.yml,.travis.yml,circle.yml,.nyc_output}") return matcher } diff --git a/test/out/__snapshots__/ignoreTest.js.snap b/test/out/__snapshots__/ignoreTest.js.snap index 4576f933359..8b52d4da701 100644 --- a/test/out/__snapshots__/ignoreTest.js.snap +++ b/test/out/__snapshots__/ignoreTest.js.snap @@ -1,5 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`2 ignore 1`] = ` +Object { + "linux": Array [], +} +`; + exports[`ignore build resources 1`] = ` Object { "linux": Array [], diff --git a/test/src/ignoreTest.ts b/test/src/ignoreTest.ts index 8e63dd975f5..fe23314f9ce 100644 --- a/test/src/ignoreTest.ts +++ b/test/src/ignoreTest.ts @@ -19,6 +19,29 @@ test.ifDevOrLinuxCi("ignore build resources", app({ }, })) +test.ifDevOrLinuxCi("2 ignore", app({ + targets: Platform.LINUX.createTarget(DIR_TARGET), + config: { + asar: false, + files: [ + "**/*", + "!{app,build,electron,mobile,theme,uploads,util,dist,dist-app/aot,dist-app/app.bundle.js,dist-app/dependencies/shim.min.js,dist-app/dependencies/classList.min.js,dist-app/dependencies/web-animations.min.js,main.js,main-aot.js,favicon.ico,index.html,index-aot.html,index-cordova.html,index-aot.js,index-electron.js,index.bundle.js,systemjs.config.js,systemjs-angular-loader.js,package-lock.json}", + "!*config*.json", + "!**/*.{ts,scss,map,md,csv,wrapped}", + "!**/*.{o,hprof,orig,pyc,pyo,rbc}", + "!**/._*", + "!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,thumbs.db,.gitignore,.gitattributes,.editorconfig,.flowconfig,.yarn-metadata.json,.idea,appveyor.yml,.travis.yml,circle.yml,npm-debug.log,.nyc_output,yarn.lock,.yarn-integrity}" + ], + } +}, { + projectDirCreated: projectDir => { + return outputFile(path.join(projectDir, "electron/foo.txt"), "data") + }, + packed: context => { + return assertThat(path.join(context.getResources(Platform.LINUX), "app", "electron", "foo.txt")).doesNotExist() + }, +})) + test.ifDevOrLinuxCi("ignore known ignored files", app({ targets: Platform.LINUX.createTarget(DIR_TARGET), config: {