1
0
Fork 0
This commit is contained in:
Jan Steemann 2012-12-21 23:52:04 +01:00
parent 0fcca94874
commit 3ef80ee03d
1 changed files with 31 additions and 13 deletions

View File

@ -124,7 +124,13 @@ static string StartupPath = "";
/// @brief javascript files to execute /// @brief javascript files to execute
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
static vector<string> Scripts; static vector<string> ExecuteScripts;
////////////////////////////////////////////////////////////////////////////////
/// @brief javascript files to syntax check
////////////////////////////////////////////////////////////////////////////////
static vector<string> CheckScripts;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief unit file test cases /// @brief unit file test cases
@ -423,7 +429,8 @@ static void ParseProgramOptions (int argc, char* argv[]) {
ProgramOptionsDescription javascript("JAVASCRIPT options"); ProgramOptionsDescription javascript("JAVASCRIPT options");
javascript javascript
("javascript.execute", &Scripts, "execute Javascript code from file") ("javascript.execute", &ExecuteScripts, "execute Javascript code from file")
("javascript.check", &CheckScripts, "syntax check code Javascript code from file")
("javascript.modules-path", &StartupModules, "one or more directories separated by cola") ("javascript.modules-path", &StartupModules, "one or more directories separated by cola")
("javascript.startup-directory", &StartupPath, "startup paths containing the JavaScript files; multiple directories can be separated by cola") ("javascript.startup-directory", &StartupPath, "startup paths containing the JavaScript files; multiple directories can be separated by cola")
("javascript.unit-tests", &UnitTests, "do not start as shell, run unit tests instead") ("javascript.unit-tests", &UnitTests, "do not start as shell, run unit tests instead")
@ -463,7 +470,7 @@ static void ParseProgramOptions (int argc, char* argv[]) {
} }
// disable excessive output in non-interactive mode // disable excessive output in non-interactive mode
if (! Scripts.empty() || ! UnitTests.empty() || ! JsLint.empty()) { if (! ExecuteScripts.empty() || ! CheckScripts.empty() || ! UnitTests.empty() || ! JsLint.empty()) {
BaseClient.shutup(); BaseClient.shutup();
} }
} }
@ -953,22 +960,29 @@ static bool RunUnitTests (v8::Handle<v8::Context> context) {
/// @brief executes the Javascript files /// @brief executes the Javascript files
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
static bool RunScripts (v8::Handle<v8::Context> context) { static bool RunScripts (v8::Handle<v8::Context> context,
const vector<string>& scripts,
const bool execute) {
v8::HandleScope scope; v8::HandleScope scope;
v8::TryCatch tryCatch; v8::TryCatch tryCatch;
bool ok; bool ok;
ok = true; ok = true;
for (size_t i = 0; i < Scripts.size(); ++i) { for (size_t i = 0; i < scripts.size(); ++i) {
if (! FileUtils::exists(Scripts[i])) { if (! FileUtils::exists(scripts[i])) {
cerr << "error: Javascript file not found: '" << Scripts[i].c_str() << "'" << endl; cerr << "error: Javascript file not found: '" << scripts[i].c_str() << "'" << endl;
BaseClient.log("error: Javascript file not found: '%s'\n", Scripts[i].c_str()); BaseClient.log("error: Javascript file not found: '%s'\n", scripts[i].c_str());
ok = false; ok = false;
break; break;
} }
TRI_ExecuteJavaScriptFile(context, Scripts[i].c_str()); if (execute) {
TRI_ExecuteJavaScriptFile(context, scripts[i].c_str());
}
else {
TRI_LoadJavaScriptFile(context, scripts[i].c_str());
}
if (tryCatch.HasCaught()) { if (tryCatch.HasCaught()) {
string exception(TRI_StringifyV8Exception(&tryCatch)); string exception(TRI_StringifyV8Exception(&tryCatch));
@ -1355,7 +1369,7 @@ int main (int argc, char* argv[]) {
// run normal shell // run normal shell
// ............................................................................. // .............................................................................
if (Scripts.empty() && UnitTests.empty() && JsLint.empty()) { if (ExecuteScripts.empty() && CheckScripts.empty() && UnitTests.empty() && JsLint.empty()) {
RunShell(context, promptError); RunShell(context, promptError);
} }
@ -1366,9 +1380,13 @@ int main (int argc, char* argv[]) {
else { else {
bool ok = false; bool ok = false;
if (! Scripts.empty()) { if (! ExecuteScripts.empty()) {
// we have scripts to execute // we have scripts to execute or syntax check
ok = RunScripts(context); ok = RunScripts(context, ExecuteScripts, true);
}
else if (! CheckScripts.empty()) {
// we have scripts to syntax check
ok = RunScripts(context, CheckScripts, false);
} }
else if (! UnitTests.empty()) { else if (! UnitTests.empty()) {
// we have unit tests // we have unit tests