From ae1eb65528d005d9ef1d34e30576e28575e745f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Sverre=20Lien=20Sell=C3=A6g?= Date: Thu, 18 Mar 2021 14:24:30 +0100 Subject: [PATCH 1/3] fix crash of wds when trying to follow emacs lock files by ignoring them in file watcher. closes https://github.com/facebook/create-react-app/issues/9056 --- packages/react-dev-utils/ignoredFiles.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/react-dev-utils/ignoredFiles.js b/packages/react-dev-utils/ignoredFiles.js index 73a6e8bc5cf..1c95177d2c5 100644 --- a/packages/react-dev-utils/ignoredFiles.js +++ b/packages/react-dev-utils/ignoredFiles.js @@ -11,10 +11,15 @@ const path = require('path'); const escape = require('escape-string-regexp'); module.exports = function ignoredFiles(appSrc) { - return new RegExp( - `^(?!${escape( - path.normalize(appSrc + '/').replace(/[\\]+/g, '/') - )}).+/node_modules/`, - 'g' - ); + return [ + new RegExp( + `^(?!${escape( + path.normalize(appSrc + '/').replace(/[\\]+/g, '/'), + )}).+/node_modules/`, + 'g', + ), + '**/.#*', + '**/*~', + '**/#*#', + ]; }; From 027b95b713f3244842076a2efb46c25d4d50a2a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Sverre=20Lien=20Sell=C3=A6g?= Date: Tue, 1 Jun 2021 16:54:13 +0200 Subject: [PATCH 2/3] update ignoredFiles test to use anymatch as it does in webpack as well --- .../__tests__/ignoredFiles.test.js | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/packages/react-dev-utils/__tests__/ignoredFiles.test.js b/packages/react-dev-utils/__tests__/ignoredFiles.test.js index 6feed979797..83a2b9a42ce 100644 --- a/packages/react-dev-utils/__tests__/ignoredFiles.test.js +++ b/packages/react-dev-utils/__tests__/ignoredFiles.test.js @@ -9,11 +9,13 @@ const ignoredFiles = require('../ignoredFiles'); +const anymatch = require('anymatch'); + describe('ignore watch files regex', () => { it('normal file', () => { const appSrc = '/root/src/'; - const isIgnored = ignoredFiles(appSrc).test('/foo'); - const isIgnoredInSrc = ignoredFiles(appSrc).test('/root/src/foo'); + const isIgnored = anymatch(ignoredFiles(appSrc), '/foo'); + const isIgnoredInSrc = anymatch(ignoredFiles(appSrc), '/root/src/foo'); expect(isIgnored).toBe(false); expect(isIgnoredInSrc).toBe(false); @@ -21,15 +23,19 @@ describe('ignore watch files regex', () => { it('node modules', () => { const appSrc = '/root/src/'; - const isIgnored = ignoredFiles(appSrc).test('/root/node_modules/foo'); + const isIgnored = anymatch(ignoredFiles(appSrc), '/root/node_modules/foo'); expect(isIgnored).toBe(true); }); it('node modules inside source directory', () => { const appSrc = '/root/src/'; - const isIgnored = ignoredFiles(appSrc).test('/root/src/node_modules/foo'); - const isIgnoredMoreThanOneLevel = ignoredFiles(appSrc).test( + const isIgnored = anymatch( + ignoredFiles(appSrc), + '/root/src/node_modules/foo' + ); + const isIgnoredMoreThanOneLevel = anymatch( + ignoredFiles(appSrc), '/root/src/bar/node_modules/foo' ); @@ -39,7 +45,8 @@ describe('ignore watch files regex', () => { it('path contains source directory', () => { const appSrc = '/root/src/'; - const isIgnored = ignoredFiles(appSrc).test( + const isIgnored = anymatch( + ignoredFiles(appSrc), '/bar/root/src/node_modules/foo' ); @@ -48,7 +55,10 @@ describe('ignore watch files regex', () => { it('path starts with source directory', () => { const appSrc = '/root/src/'; - const isIgnored = ignoredFiles(appSrc).test('/root/src2/node_modules/foo'); + const isIgnored = anymatch( + ignoredFiles(appSrc), + '/root/src2/node_modules/foo' + ); expect(isIgnored).toBe(true); }); From 2074e1ef405b1405ab8d5857a37de43a363b54ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Sverre=20Lien=20Sell=C3=A6g?= Date: Tue, 1 Jun 2021 16:58:15 +0200 Subject: [PATCH 3/3] add tests for ignore emacs case --- .../__tests__/ignoredFiles.test.js | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/react-dev-utils/__tests__/ignoredFiles.test.js b/packages/react-dev-utils/__tests__/ignoredFiles.test.js index 83a2b9a42ce..03175d7ecee 100644 --- a/packages/react-dev-utils/__tests__/ignoredFiles.test.js +++ b/packages/react-dev-utils/__tests__/ignoredFiles.test.js @@ -62,4 +62,25 @@ describe('ignore watch files regex', () => { expect(isIgnored).toBe(true); }); + + it('ignores emacs temporary files', () => { + const appSrc = '/root/src/'; + const isIgnored = anymatch(ignoredFiles(appSrc), 'file.txt~'); + + expect(isIgnored).toBe(true); + }); + + it('ignores emacs lock files', () => { + const appSrc = '/root/src/'; + const isIgnored = anymatch(ignoredFiles(appSrc), '.#file.txt'); + + expect(isIgnored).toBe(true); + }); + + it('ignores emacs backup files', () => { + const appSrc = '/root/src/'; + const isIgnored = anymatch(ignoredFiles(appSrc), '.#file.txt#'); + + expect(isIgnored).toBe(true); + }); });