File tree Expand file tree Collapse file tree
wait-for-bundle-input-object
watch-config-early-update
watch-config-initial-error Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11const fs = require ( 'fs' ) ;
22const path = require ( 'path' ) ;
3+ const { atomicWriteFileSync } = require ( '../../../utils' ) ;
34
45let second ;
56let third ;
@@ -17,9 +18,9 @@ module.exports = {
1718 } ,
1819 abortOnStderr ( data ) {
1920 if ( data . includes ( 'waiting for input second' ) ) {
20- fs . writeFileSync ( second , "export default 'second'" ) ;
21+ atomicWriteFileSync ( second , "export default 'second'" ) ;
2122 } else if ( data . includes ( 'waiting for input third' ) ) {
22- fs . writeFileSync ( third , "export default 'third'" ) ;
23+ atomicWriteFileSync ( third , "export default 'third'" ) ;
2324 }
2425 }
2526} ;
Original file line number Diff line number Diff line change 11const fs = require ( 'fs' ) ;
22const path = require ( 'path' ) ;
3+ const { atomicWriteFileSync } = require ( '../../../utils' ) ;
34
45let mainFile ;
56
@@ -15,7 +16,7 @@ module.exports = {
1516 abortOnStderr ( data ) {
1617 if ( data . includes ( 'waiting for input main.js' ) ) {
1718 // wait longer than one polling interval
18- setTimeout ( ( ) => fs . writeFileSync ( mainFile , 'export default 42;' ) , 600 ) ;
19+ setTimeout ( ( ) => atomicWriteFileSync ( mainFile , 'export default 42;' ) , 600 ) ;
1920 }
2021 }
2122} ;
Original file line number Diff line number Diff line change 11const fs = require ( 'fs' ) ;
22const path = require ( 'path' ) ;
3+ const { atomicWriteFileSync } = require ( '../../../../utils' ) ;
34
45let mainFile ;
56
@@ -16,7 +17,7 @@ module.exports = {
1617 } ,
1718 abortOnStderr ( data ) {
1819 if ( data . includes ( 'Error: Unexpected token' ) ) {
19- setTimeout ( ( ) => fs . writeFileSync ( mainFile , 'export default 42;' ) , 500 ) ;
20+ setTimeout ( ( ) => atomicWriteFileSync ( mainFile , 'export default 42;' ) , 500 ) ;
2021 return false ;
2122 }
2223 if ( data . includes ( 'created _actual' ) ) {
Original file line number Diff line number Diff line change 11const fs = require ( 'fs' ) ;
22const path = require ( 'path' ) ;
3+ const { atomicWriteFileSync } = require ( '../../../../utils' ) ;
34
45let configFile ;
56
@@ -34,7 +35,7 @@ module.exports = {
3435 } ,
3536 abortOnStderr ( data ) {
3637 if ( data === 'initial\n' ) {
37- fs . writeFileSync (
38+ atomicWriteFileSync (
3839 configFile ,
3940 `
4041 console.error('updated');
Original file line number Diff line number Diff line change 11const fs = require ( 'fs' ) ;
22const path = require ( 'path' ) ;
3+ const { atomicWriteFileSync } = require ( '../../../../utils' ) ;
34
45let configFile ;
56
@@ -25,12 +26,12 @@ module.exports = {
2526 } ,
2627 abortOnStderr ( data ) {
2728 if ( data . includes ( `created _actual${ path . sep } main1.js` ) ) {
28- fs . writeFileSync ( configFile , 'throw new Error("Config contains errors");' ) ;
29+ atomicWriteFileSync ( configFile , 'throw new Error("Config contains errors");' ) ;
2930 return false ;
3031 }
3132 if ( data . includes ( 'Config contains errors' ) ) {
3233 setTimeout ( ( ) => {
33- fs . writeFileSync (
34+ atomicWriteFileSync (
3435 configFile ,
3536 'export default {\n' +
3637 '\tinput: "main.js",\n' +
Original file line number Diff line number Diff line change 11const fs = require ( 'fs' ) ;
22const path = require ( 'path' ) ;
3+ const { atomicWriteFileSync } = require ( '../../../../utils' ) ;
34
45let configFile ;
56
@@ -16,7 +17,7 @@ module.exports = {
1617 async abortOnStderr ( data ) {
1718 if ( data . includes ( 'Config contains initial errors' ) ) {
1819 await new Promise ( resolve => setTimeout ( resolve , 100 ) ) ;
19- fs . writeFileSync (
20+ atomicWriteFileSync (
2021 configFile ,
2122 'export default {\n' +
2223 '\tinput: "main.js",\n' +
Original file line number Diff line number Diff line change 11const fs = require ( 'fs' ) ;
22const path = require ( 'path' ) ;
3+ const { atomicWriteFileSync } = require ( '../../../../utils' ) ;
34
45let configFile ;
56const configContent =
@@ -23,7 +24,7 @@ module.exports = {
2324 } ,
2425 abortOnStderr ( data ) {
2526 if ( data . includes ( 'created _actual/main.js' ) ) {
26- fs . writeFileSync ( configFile , configContent ) ;
27+ atomicWriteFileSync ( configFile , configContent ) ;
2728 return new Promise ( resolve => setTimeout ( ( ) => resolve ( true ) , 500 ) ) ;
2829 }
2930 } ,
Original file line number Diff line number Diff line change 11const assert = require ( 'assert' ) ;
2+ const fs = require ( 'fs' ) ;
23const path = require ( 'path' ) ;
34const fixturify = require ( 'fixturify' ) ;
45const sander = require ( 'sander' ) ;
@@ -14,6 +15,7 @@ exports.runTestSuiteWithSamples = runTestSuiteWithSamples;
1415exports . assertDirectoriesAreEqual = assertDirectoriesAreEqual ;
1516exports . assertFilesAreEqual = assertFilesAreEqual ;
1617exports . assertIncludes = assertIncludes ;
18+ exports . atomicWriteFileSync = atomicWriteFileSync ;
1719
1820function normaliseError ( error ) {
1921 delete error . stack ;
@@ -220,3 +222,12 @@ function assertIncludes(actual, expected) {
220222 throw err ;
221223 }
222224}
225+
226+ // Workaround a race condition in fs.writeFileSync that temporarily creates
227+ // an empty file for a brief moment which may be read by rollup watch - even
228+ // if the content being overwritten is identical.
229+ function atomicWriteFileSync ( filePath , contents ) {
230+ const stagingPath = filePath + '_' ;
231+ fs . writeFileSync ( stagingPath , contents ) ;
232+ fs . renameSync ( stagingPath , filePath ) ;
233+ }
You can’t perform that action at this time.
0 commit comments