WordPress.org

Make WordPress Core

Ticket #18546: 18546.2.diff

File 18546.2.diff, 3.3 KB (added by whyisjake, 13 months ago)
  • Gruntfile.js

     
    77module.exports = function(grunt) {
    88        var path = require('path'),
    99                fs = require( 'fs' ),
     10                path = require( 'path' ),
    1011                spawn = require( 'child_process' ).spawnSync,
    1112                SOURCE_DIR = 'src/',
    1213                BUILD_DIR = 'build/',
     
    15101511                } );
    15111512        } );
    15121513
     1514        grunt.registerTask( 'folders', 'Ensures every directory has an index.php file.', function() {
     1515                var folders = [
     1516                        'js',
     1517                        'wp-includes',
     1518                        'wp-admin',
     1519                        'wp-content',
     1520                ],
     1521                blocked = [
     1522                        'node_modules',
     1523                        'src/js/_enqueues',
     1524                        'src/wp-admin/network/',
     1525                        'src/wp-admin/user/',
     1526                        'src/wp-includes/blocks/',
     1527                        'src/wp-includes/ID3',
     1528                        'src/wp-includes/js',
     1529                        'src/wp-includes/PHPMailer',
     1530                        'src/wp-includes/pomo',
     1531                        'src/wp-includes/Requests',
     1532                        'src/wp-includes/SimplePie',
     1533                        'src/wp-includes/sodium_compat',
     1534                        'src/wp-includes/Text',
     1535                ],
     1536                prefix = 'src/';
     1537
     1538                /**
     1539                 *
     1540                 * @param {string} dirPath Directory path to search against.
     1541                 * @param {array} arrayOfFiles Array of files in the directory.
     1542                 * @param {array} arrayOfFolders Array of directories in the directory.
     1543                 * @returns {array} Array of folders
     1544                 */
     1545                var getAllFolders = function( dirPath, arrayOfFiles, arrayOfFolders ) {
     1546                        // Let's get all of the folders on this path.
     1547                        var files = fs.readdirSync( dirPath );
     1548                        arrayOfFiles = arrayOfFiles || [];
     1549                        arrayOfFolders = arrayOfFolders || [];
     1550
     1551                        // Let's loop through the folders, looking for more directories.
     1552                        files.forEach(function(file) {
     1553                                // Let's look for a directory.
     1554                                if (fs.statSync(dirPath + "/" + file).isDirectory()) {
     1555                                        // Let's see if the path contains any of the `blocked` paths.
     1556                                        var dir = dirPath + "/" + file;
     1557                                        var block = false;
     1558                                        blocked.map(function(path) {
     1559                                                if( dir.includes(path) ) {
     1560                                                        block = true;
     1561                                                }
     1562                                        });
     1563                                        // This is a legit path, let's add to our array of valid paths.
     1564                                        if ( ! block ) {
     1565                                                arrayOfFolders.push( dir );
     1566                                                arrayOfFolders = getAllFolders( dirPath + "/" + file, arrayOfFiles, arrayOfFolders );
     1567                                        }
     1568                                } else {
     1569                                        // Keep digging for paths.
     1570                                        arrayOfFiles.push( path.join( __dirname, dirPath, "/", file ) );
     1571                                }
     1572                        });
     1573                        return arrayOfFolders;
     1574
     1575                }
     1576
     1577                /**
     1578                 *
     1579                 * @param {string} dirPath Path to start a search for index.php files.
     1580                 * @returns {bool}
     1581                 */
     1582                var doesDirHaveIndex = function ( dirPath ) {
     1583                        var index = '/index.php';
     1584                        return fs.existsSync(dirPath + index);
     1585                }
     1586
     1587                // Loop through folders, looking for blank index.php files.
     1588                folders.forEach(function(path) {
     1589                        var folder = getAllFolders( prefix + path );
     1590                        folder.forEach(function(path) {
     1591                                if( ! doesDirHaveIndex( path ) ) {
     1592                                        var newFile = path + '/index.php';
     1593                                        // Read a default file, and stream that into a new file.
     1594                                        var index = fs.readFileSync('src/wp-content/index.php');
     1595                                        // The `wx` flag ensures that it doesn't overwrite any existing files.
     1596                                        fs.writeFileSync( newFile, index, {flag: "wx"} );
     1597                                }
     1598                        })
     1599                });
     1600
     1601        } );
     1602
    15131603        // Travis CI tasks.
    15141604        grunt.registerTask('travis:js', 'Runs Javascript Travis CI tasks.', [ 'jshint:corejs', 'qunit:compiled' ]);
    15151605        grunt.registerTask('travis:phpunit', 'Runs PHPUnit Travis CI tasks.', [ 'build', 'phpunit' ]);