diff --git a/tasks/ftp-deploy.js b/tasks/ftp-deploy.js index 17b2084..c025535 100644 --- a/tasks/ftp-deploy.js +++ b/tasks/ftp-deploy.js @@ -79,7 +79,11 @@ module.exports = function (grunt) { ftp.raw.mkd(inPath, function (err) { if(err) { log.error('Error creating new remote folder ' + inPath + ' --> ' + err); - cb(err); + log.ok('Trying to create all intermediary folders'); + inPath = inPath.replace(/[/]$/g, ""); // remove trailing "/" if present + var pathComponents = inPath.split("/"); + pathComponents[0] = pathComponents[0].replace(/^$/, "/"); // if path is absolute, first component should be "/" + ftpCwdPathComponents(pathComponents, cb); } else { log.ok('New remote folder created ' + inPath.yellow); ftpCwd(inPath, cb); @@ -91,6 +95,32 @@ module.exports = function (grunt) { }); } + function ftpCwdPathComponents (pathComponents, cb) { + if (!pathComponents || pathComponents.length === 0) { + cb(null); + + } else { + var folder = pathComponents.shift(); + + ftp.raw.cwd(folder, function (err) { + if (err) { + ftp.raw.mkd(folder, function (err) { + if (err) { + log.error('Error creating new remote folder ' + folder + ' --> ' + err); + cb(err); + } else { + log.ok('New remote folder created ' + folder.yellow); + pathComponents.unshift(folder); + ftpCwdPathComponents(pathComponents, cb); + } + }) + } else { + ftpCwdPathComponents(pathComponents, cb); + } + }) + } + } + // A method for uploading a single file function ftpPut (inFilename, done) { var fpath = path.normalize(localRoot + path.sep + currPath + path.sep + inFilename);