Make WordPress Core

Ticket #44492: build-with-symlinks3.patch

File build-with-symlinks3.patch, 14.1 KB (added by omarreiss, 6 years ago)

Makes clean task a little bit less eager, cleans the symlinks before cleaning the files, shows better errors when symlinking fails.

  • Gruntfile.js

    diff --git Gruntfile.js Gruntfile.js
    index 0dc8b7f..9a3e4a2 100644
    module.exports = function(grunt) { 
    1212                BANNER_TEXT = '/*! This file is auto-generated */',
    1313                autoprefixer = require( 'autoprefixer' ),
    1414                phpUnitWatchGroup = grunt.option( 'group' ),
     15                themeFiles = [
     16                        'wp-content/themes/index.php',
     17                        'wp-content/themes/twenty*/**'
     18                ],
    1519                buildFiles = [
    1620                        '*.php',
    1721                        '*.txt',
    module.exports = function(grunt) { 
    1923                        'wp-includes/**', // Include everything in wp-includes.
    2024                        'wp-admin/**', // Include everything in wp-admin.
    2125                        'wp-content/index.php',
    22                         'wp-content/themes/index.php',
    23                         'wp-content/themes/twenty*/**',
    2426                        'wp-content/plugins/index.php',
    2527                        'wp-content/plugins/hello.php',
    2628                        'wp-content/plugins/akismet/**'
    27                 ],
     29                ].concat( themeFiles ),
    2830                cleanFiles = [];
    2931
    3032        buildFiles.forEach( function( buildFile ) {
    module.exports = function(grunt) { 
    124126                                ]
    125127                        }
    126128                },
     129                symlink: {
     130                        expanded: {
     131                                files: [
     132                                  {
     133                                    expand: true,
     134                                    overwrite: true,
     135                                    cwd: SOURCE_DIR,
     136                                    src: [
     137                                                        'wp-admin/*',
     138                                                        'wp-content/uploads/',
     139                                                        'wp-content/index.php',
     140                                                        'wp-content/plugins/*',
     141                                                        'wp-includes/*',
     142                                                        '*.php',
     143                                                        '*.txt',
     144                                                        '*.html',
     145                                                        '!wp-admin/css',
     146                                                        '!wp-content/themes',
     147                                                        '!wp-includes/css',
     148                                                        '!wp-includes/version.php', // Exclude version.php
     149                                                        '!wp-includes/formatting.php', // Exclude formatting.php
     150                                                        '!wp-includes/embed.php', // Exclude formatting.php
     151                                                        '!index.php', '!wp-admin/index.php',
     152                                                        '!_index.php', '!wp-admin/_index.php'
     153                                                ],
     154                                    dest: BUILD_DIR
     155                                  },
     156                                        {
     157                                                'build/wp-config-sample.php': ['wp-config-sample.php'],
     158                                                'build/index.php': ['src/_index.php'],
     159                                                'build/wp-admin/index.php': ['src/wp-admin/_index.php']
     160                                        }
     161                                ]
     162                        }
     163                },
    127164                copy: {
    128165                        files: {
    129166                                files: [
    module.exports = function(grunt) { 
    135172                                                        '!js/**', // JavaScript is extracted into separate copy tasks.
    136173                                                        '!.{svn,git}', // Exclude version control folders.
    137174                                                        '!wp-includes/version.php', // Exclude version.php
     175                                                        '!wp-admin/css/**/*', // Exclude the CSS
     176                                                        '!wp-includes/css/**/*', // Exclude the CSS
    138177                                                        '!index.php', '!wp-admin/index.php',
    139178                                                        '!_index.php', '!wp-admin/_index.php'
    140179                                                ] ),
    module.exports = function(grunt) { 
    150189                                        }
    151190                                ]
    152191                        },
     192                        css: {
     193                                dot: true,
     194                                expand: true,
     195                                cwd: SOURCE_DIR,
     196                                src: [
     197                                        'wp-admin/**/*.css',
     198                                        'wp-includes/**/*.css'
     199                                ],
     200                                dest: BUILD_DIR
     201                        },
     202                        themes: {
     203                                dot: true,
     204                                expand: true,
     205                                cwd: SOURCE_DIR,
     206                                src: themeFiles,
     207                                dest: BUILD_DIR
     208                        },
    153209                        'npm-packages': {
    154210                                files: {
    155211                                        'build/wp-includes/js/backbone.js': ['./node_modules/backbone/backbone.js'],
    module.exports = function(grunt) { 
    338394                                src: SOURCE_DIR + 'wp-includes/version.php',
    339395                                dest: BUILD_DIR + 'wp-includes/version.php'
    340396                        },
     397                        'php-buildFiles': {
     398                                files: {
     399                                        'build/wp-includes/formatting.php': ['src/wp-includes/formatting.php'],
     400                                        'build/wp-includes/embed.php': ['src/wp-includes/embed.php'],
     401                                }
     402                        },
    341403                        dynamic: {
    342404                                dot: true,
    343405                                expand: true,
    module.exports = function(grunt) { 
    11531215
    11541216        grunt.registerTask( 'watch', function() {
    11551217                if ( ! this.args.length || this.args.indexOf( 'webpack' ) > -1 ) {
    1156                         grunt.task.run( 'build' );
     1218                        grunt.task.run( 'build:dev' );
    11571219                }
    11581220
    11591221                if ( 'watch:phpunit' === grunt.cli.tasks[ 0 ] || 'undefined' !== typeof grunt.option( 'phpunit' ) ) {
    module.exports = function(grunt) { 
    12811343                }
    12821344        } );
    12831345
     1346        grunt.registerTask( 'uglify:all', [
     1347                'uglify:core',
     1348                'uglify:embed',
     1349                'uglify:jqueryui',
     1350                'uglify:imgareaselect'
     1351        ] );
     1352
    12841353        grunt.registerTask( 'copy:js', [
    12851354                'copy:npm-packages',
    12861355                'copy:vendor-js',
    module.exports = function(grunt) { 
    12881357                'copy:includes-js'
    12891358        ] );
    12901359
    1291         grunt.registerTask( 'uglify:all', [
    1292                 'uglify:core',
    1293                 'uglify:embed',
    1294                 'uglify:jqueryui',
    1295                 'uglify:imgareaselect'
     1360        grunt.registerTask( 'copyOrSymlink', function() {
     1361                var task = grunt.option( 'symlink' ) === true ? 'symlink:expanded' : 'copy:files';
     1362                grunt.task.run( task );
     1363        } );
     1364
     1365        grunt.registerTask( 'copy:all', [
     1366                'copyOrSymlink',
     1367                'copy:php-buildFiles',
     1368                'copy:css',
     1369                'copy:themes',
     1370                'copy:wp-admin-css-compat-rtl',
     1371                'copy:wp-admin-css-compat-min',
     1372                'copy:version',
     1373                'copy:js'
    12961374        ] );
    12971375
    12981376        grunt.registerTask( 'build:tinymce', [
    module.exports = function(grunt) { 
    13121390                'jsvalidate:build'
    13131391        ] );
    13141392
    1315         grunt.registerTask( 'copy:all', [
    1316                 'copy:files',
    1317                 'copy:wp-admin-css-compat-rtl',
    1318                 'copy:wp-admin-css-compat-min',
    1319                 'copy:version',
    1320                 'copy:js'
    1321         ] );
     1393        grunt.registerTask( 'clean-all', function() {
     1394                if ( grunt.option( 'symlink' ) === true ) {
     1395                        // clean all symlinks
     1396                        try {
     1397                                var delSymlinks = require('del-symlinks');
     1398
     1399                                var result = delSymlinks.sync(['./build/**']);
     1400                                grunt.log.writeln( '>> ' + result.length + ' symlinks cleaned.' );
     1401                        } catch ( e ) {
     1402                                grunt.verbose.error( 'Error:', e.message );
     1403                                grunt.fail.warn( "Failed to delete symlinks. If you're on Windows, " +
     1404                                                                                                 "running as administrator could resolve this issue.");
     1405                        }
     1406                }
     1407
     1408                grunt.task.run( 'clean:all' );
     1409        } );
    13221410
    1323         grunt.registerTask( 'build', [
    1324                 'clean:all',
     1411        grunt.registerTask( 'build:all', [
     1412                'clean-all',
    13251413                'webpack:dev',
    13261414                'copy:all',
    13271415                'file_append',
    module.exports = function(grunt) { 
    13391427                'jsvalidate:build'
    13401428        ] );
    13411429
     1430        grunt.registerTask( 'build', function() {
     1431                grunt.task.run( 'build:all' );
     1432        } );
     1433
     1434        grunt.registerTask( 'build:dev', function() {
     1435                try {
     1436                        // Try creating a symlink.
     1437                        fs.symlinkSync( './symlink', './symlinktest');
     1438                        grunt.option( 'symlink', true );
     1439                        // If succeeded, remove it again.
     1440                        fs.unlinkSync( './symlinktest' );
     1441                } catch( e ) {
     1442                        grunt.verbose.error( 'Error:', e.message );
     1443                        grunt.log.error( "Failed to delete symlinks. Falling back to copying " +
     1444                                                                                         "files instead. If you're on Windows, " +
     1445                                                                                         "running as administrator could resolve this issue.");
     1446                } finally {
     1447                        grunt.task.run( 'build:all' );
     1448                }
     1449        } );
     1450
    13421451        grunt.registerTask( 'prerelease', [
    13431452                'precommit:php',
    13441453                'precommit:js',
  • package-lock.json

    diff --git package-lock.json package-lock.json
    index 3f81fc7..3cbb62c 100644
     
    653653                        "version": "1.0.2",
    654654                        "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
    655655                        "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
    656                         "dev": true,
    657656                        "requires": {
    658657                                "array-uniq": "^1.0.1"
    659658                        }
     
    661660                "array-uniq": {
    662661                        "version": "1.0.3",
    663662                        "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
    664                         "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
    665                         "dev": true
     663                        "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
    666664                },
    667665                "array-unique": {
    668666                        "version": "0.2.1",
     
    788786                "balanced-match": {
    789787                        "version": "1.0.0",
    790788                        "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
    791                         "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
    792                         "dev": true
     789                        "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
    793790                },
    794791                "base": {
    795792                        "version": "0.11.2",
     
    10401037                        "version": "1.1.11",
    10411038                        "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
    10421039                        "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
    1043                         "dev": true,
    10441040                        "requires": {
    10451041                                "balanced-match": "^1.0.0",
    10461042                                "concat-map": "0.0.1"
     
    18251821                "concat-map": {
    18261822                        "version": "0.0.1",
    18271823                        "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
    1828                         "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
    1829                         "dev": true
     1824                        "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
    18301825                },
    18311826                "concat-stream": {
    18321827                        "version": "1.6.1",
     
    23682363                                }
    23692364                        }
    23702365                },
     2366                "del-symlinks": {
     2367                        "version": "0.1.2",
     2368                        "resolved": "https://registry.npmjs.org/del-symlinks/-/del-symlinks-0.1.2.tgz",
     2369                        "integrity": "sha1-rE/ePWow7Xk23QMH8APLtTUkP2U=",
     2370                        "requires": {
     2371                                "get-symlinks": "^1.0.0",
     2372                                "object-assign": "^4.1.0",
     2373                                "pify": "^2.3.0",
     2374                                "pinkie-promise": "^2.0.1"
     2375                        }
     2376                },
    23712377                "delayed-stream": {
    23722378                        "version": "1.0.0",
    23732379                        "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
     
    34973503                "fs.realpath": {
    34983504                        "version": "1.0.0",
    34993505                        "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
    3500                         "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
    3501                         "dev": true
     3506                        "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
    35023507                },
    35033508                "fsevents": {
    35043509                        "version": "1.1.3",
     
    45054510                        "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
    45064511                        "dev": true
    45074512                },
     4513                "get-symlinks": {
     4514                        "version": "1.0.2",
     4515                        "resolved": "https://registry.npmjs.org/get-symlinks/-/get-symlinks-1.0.2.tgz",
     4516                        "integrity": "sha1-sOYpxRHeGYGd08dskruNLi9CPGM=",
     4517                        "requires": {
     4518                                "globby": "^6.0.0",
     4519                                "is-symbolic-link": "^1.0.3",
     4520                                "object-assign": "^4.1.0",
     4521                                "pinkie-promise": "^2.0.1"
     4522                        }
     4523                },
    45084524                "get-value": {
    45094525                        "version": "2.0.6",
    45104526                        "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
     
    46424658                        "version": "6.1.0",
    46434659                        "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
    46444660                        "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
    4645                         "dev": true,
    46464661                        "requires": {
    46474662                                "array-union": "^1.0.1",
    46484663                                "glob": "^7.0.3",
     
    46554670                                        "version": "7.1.2",
    46564671                                        "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
    46574672                                        "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
    4658                                         "dev": true,
    46594673                                        "requires": {
    46604674                                                "fs.realpath": "^1.0.0",
    46614675                                                "inflight": "^1.0.4",
     
    46694683                                        "version": "3.0.4",
    46704684                                        "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
    46714685                                        "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
    4672                                         "dev": true,
    46734686                                        "requires": {
    46744687                                                "brace-expansion": "^1.1.7"
    46754688                                        }
     
    49764989                                "grunt-lib-phantomjs": "^1.0.0"
    49774990                        }
    49784991                },
     4992                "grunt-contrib-symlink": {
     4993                        "version": "1.0.0",
     4994                        "resolved": "https://registry.npmjs.org/grunt-contrib-symlink/-/grunt-contrib-symlink-1.0.0.tgz",
     4995                        "integrity": "sha1-yDYWwDVxGmwAYqKBDPHHf/xr7Ss=",
     4996                        "dev": true
     4997                },
    49794998                "grunt-contrib-uglify": {
    49804999                        "version": "2.0.0",
    49815000                        "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-2.0.0.tgz",
     
    58835902                        "version": "1.0.6",
    58845903                        "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
    58855904                        "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
    5886                         "dev": true,
    58875905                        "requires": {
    58885906                                "once": "^1.3.0",
    58895907                                "wrappy": "1"
     
    58925910                "inherits": {
    58935911                        "version": "2.0.3",
    58945912                        "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
    5895                         "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
    5896                         "dev": true
     5913                        "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
    58975914                },
    58985915                "ini": {
    58995916                        "version": "1.3.5",
     
    64146431                        "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
    64156432                        "dev": true
    64166433                },
     6434                "is-symbolic-link": {
     6435                        "version": "1.0.3",
     6436                        "resolved": "https://registry.npmjs.org/is-symbolic-link/-/is-symbolic-link-1.0.3.tgz",
     6437                        "integrity": "sha1-e9PWyeX+lONCpHRQRIcW8MJUOIM=",
     6438                        "requires": {
     6439                                "pinkie-promise": "^2.0.1"
     6440                        }
     6441                },
    64176442                "is-tar": {
    64186443                        "version": "1.0.0",
    64196444                        "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz",
     
    79898014                "object-assign": {
    79908015                        "version": "4.1.1",
    79918016                        "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
    7992                         "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
    7993                         "dev": true
     8017                        "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
    79948018                },
    79958019                "object-copy": {
    79968020                        "version": "0.1.0",
     
    81448168                        "version": "1.4.0",
    81458169                        "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
    81468170                        "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
    8147                         "dev": true,
    81488171                        "requires": {
    81498172                                "wrappy": "1"
    81508173                        }
     
    84068429                "path-is-absolute": {
    84078430                        "version": "1.0.1",
    84088431                        "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
    8409                         "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
    8410                         "dev": true
     8432                        "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
    84118433                },
    84128434                "path-is-inside": {
    84138435                        "version": "1.0.2",
     
    85028524                "pify": {
    85038525                        "version": "2.3.0",
    85048526                        "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
    8505                         "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
    8506                         "dev": true
     8527                        "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
    85078528                },
    85088529                "pinkie": {
    85098530                        "version": "2.0.4",
    85108531                        "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
    8511                         "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
    8512                         "dev": true
     8532                        "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
    85138533                },
    85148534                "pinkie-promise": {
    85158535                        "version": "2.0.1",
    85168536                        "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
    85178537                        "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
    8518                         "dev": true,
    85198538                        "requires": {
    85208539                                "pinkie": "^2.0.0"
    85218540                        }
     
    1172111740                "wrappy": {
    1172211741                        "version": "1.0.2",
    1172311742                        "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
    11724                         "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
    11725                         "dev": true
     11743                        "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
    1172611744                },
    1172711745                "xmlbuilder": {
    1172811746                        "version": "8.2.2",
  • package.json

    diff --git package.json package.json
    index 06a5a5e..c91331c 100644
     
    1515        "devDependencies": {
    1616                "autoprefixer": "^6.5.1",
    1717                "check-node-version": "3.2.0",
     18                "del-symlinks": "0.1.2",
    1819                "grunt": "1.0.2",
    1920                "grunt-banner": "^0.6.0",
    2021                "grunt-contrib-clean": "~1.0.0",
     
    2526                "grunt-contrib-imagemin": "~1.0.0",
    2627                "grunt-contrib-jshint": "~1.0.0",
    2728                "grunt-contrib-qunit": "^1.2.0",
     29                "grunt-contrib-symlink": "1.0.0",
    2830                "grunt-contrib-uglify": "~2.0.0",
    2931                "grunt-contrib-watch": "~1.0.0",
    3032                "grunt-file-append": "0.0.7",