diff --git a/bin/gulp.js b/bin/gulp.js index 2c3449e4a..95b3e4a62 100755 --- a/bin/gulp.js +++ b/bin/gulp.js @@ -8,13 +8,14 @@ var chalk = require('chalk'); var resolve = require('resolve'); var tasks = argv._; -var gulpFile = getGulpFile(process.cwd()); +var initialCwd = process.cwd(); +var gulpFile = getGulpFileAndChangeCwd(initialCwd); var cliPkg = require('../package.json'); var cliGulp = require('../'); if (!gulpFile) { - cliGulp.log(chalk.red('No Gulpfile found')); - return; + cliGulp.log(chalk.red('No Gulpfile found in any parent directory starting at: '+initialCwd)); + process.exit(1); } // find the local gulp @@ -74,16 +75,29 @@ function loadGulpFile(localGulp, gulpFile, tasks){ return theGulpfile; } -function getGulpFile(baseDir) { - var extensions = Object.keys(require.extensions); - var Gulpfiles = extensions.map(function(ext){ - return path.join(baseDir, "Gulpfile" + ext); - }); - - var gulpFiles = extensions.map(function(ext){ - return path.join(baseDir, "gulpfile" + ext); - }); - - return gulpFiles.concat(Gulpfiles) - .filter(fs.existsSync)[0]; -} \ No newline at end of file +function getGulpFileAndChangeCwd(baseDir) { + var processed={}; + var proposedPath; + var gulpFile; + + while(!(baseDir in processed)){ + processed[baseDir]=1; + + proposedPath = path.resolve(baseDir, "Gulpfile.js"); + if(fs.existsSync(proposedPath)){ + gulpFile=proposedPath; + } else { + proposedPath = path.resolve(baseDir, "gulpfile.js"); + if(fs.existsSync(proposedPath)){ + gulpFile=proposedPath; + } + } + + if(gulpFile){ + process.chdir(baseDir); + return gulpFile; + } + baseDir = path.resolve(baseDir, '..'); + } + return null; +}