diff --git a/lib/server/console.js b/lib/server/console.js index 1fa05ae8..b92f7bc1 100644 --- a/lib/server/console.js +++ b/lib/server/console.js @@ -16,6 +16,7 @@ win = require(DIR_SERVER + 'win'), update = require(DIR_SERVER + 'update'), socket = require(DIR_SERVER + 'socket'), + find = require(DIR_SERVER + 'find'), mainpackage = require(DIR_ROOT + 'package'), CLOUDCMD = mainpackage.name, @@ -37,7 +38,13 @@ HELP = { stdout : CLOUDCMD + ' exit \n' + CLOUDCMD + ' update \n', - }; + }, + + glob = function(callback) {callback(null, [])}; + + Util.exec.try(function() { + glob = require('glob'); + }); /** * function listen on servers port @@ -284,7 +291,27 @@ regStrEnd = getRegStrEnd(), regStrHome = '^~$|^~', regExpHome = new RegExp(regStrHome + regStrEnd), - isHome = paramDir.match(regExpHome) && !WIN; + + isWildCard = Util.isContainStr(paramDir, ['*', '?']), + isHome = paramDir.match(regExpHome) && !WIN, + + onExec = function (error, stdout, stderr) { + var path = paramDir, + errorStr = ''; + + if (stderr) { + errorStr = stderr; + } else if (error) { + errorStr = error.message; + path = ''; + } + + callback(error || stderr, { + stderr : addNewLine(errorStr), + stdout : stdout, + path : path + }); + }; if (isHome) { paramDir = process.env.HOME; @@ -306,26 +333,19 @@ if (paramDir !== '/') paramDir = path.join(currDir, paramDir); - command = CD + '"' + paramDir + '" ' + command; + if (isWildCard) + command = CD + paramDir + ' ' + command; + else + command = CD + '"' + paramDir + '" ' + command; } - exec(command, {cwd: paramDir}, function (error, stdout, stderr) { - var path = paramDir, - errorStr = ''; - - if (stderr) { - errorStr = stderr; - } else if (error) { - errorStr = error.message; - path = ''; - } - - callback(error || stderr, { - stderr : addNewLine(errorStr), - stdout : stdout, - path : path + if (!isWildCard) + exec(command, {cwd: paramDir}, onExec); + else + find(paramDir, function(error, dir) { + paramDir = dir; + exec(command, {cwd: dir}, onExec); }); - }); } function getFirstWord(str) { diff --git a/lib/server/find.js b/lib/server/find.js new file mode 100644 index 00000000..cb0de5c7 --- /dev/null +++ b/lib/server/find.js @@ -0,0 +1,35 @@ +(function() { + 'use strict'; + + var fs = require('fs'), + path = require('path'), + Util = require('../util'); + + module.exports = function(card, callback) { + var dir = path.dirname(card), + nameCard = path.basename(card), + regExp = Util.getRegExp(nameCard); + + if (!callback) + throw(Error('Callback is absent!')); + + fs.readdir(dir, function(error, names) { + var result; + + if (!error) + names.some(function(name) { + var is = name.match(regExp); + + if (is) + result = name; + + return is; + }); + + if (result) + result = path.join(dir, result); + + callback(error, result); + }); + }; +})();