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
////////////////////////////////////////////////////////////////////////////////
static vector<string> Scripts;
static vector<string> ExecuteScripts;
////////////////////////////////////////////////////////////////////////////////
/// @brief javascript files to syntax check
////////////////////////////////////////////////////////////////////////////////
static vector<string> CheckScripts;
////////////////////////////////////////////////////////////////////////////////
/// @brief unit file test cases
@ -423,7 +429,8 @@ static void ParseProgramOptions (int argc, char* argv[]) {
ProgramOptionsDescription javascript("JAVASCRIPT options");
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.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")
@ -463,7 +470,7 @@ static void ParseProgramOptions (int argc, char* argv[]) {
}
// 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();
}
}
@ -953,22 +960,29 @@ static bool RunUnitTests (v8::Handle<v8::Context> context) {
/// @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::TryCatch tryCatch;
bool ok;
ok = true;
for (size_t i = 0; i < Scripts.size(); ++i) {
if (! FileUtils::exists(Scripts[i])) {
cerr << "error: Javascript file not found: '" << Scripts[i].c_str() << "'" << endl;
BaseClient.log("error: Javascript file not found: '%s'\n", Scripts[i].c_str());
for (size_t i = 0; i < scripts.size(); ++i) {
if (! FileUtils::exists(scripts[i])) {
cerr << "error: Javascript file not found: '" << scripts[i].c_str() << "'" << endl;
BaseClient.log("error: Javascript file not found: '%s'\n", scripts[i].c_str());
ok = false;
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()) {
string exception(TRI_StringifyV8Exception(&tryCatch));
@ -1355,7 +1369,7 @@ int main (int argc, char* argv[]) {
// run normal shell
// .............................................................................
if (Scripts.empty() && UnitTests.empty() && JsLint.empty()) {
if (ExecuteScripts.empty() && CheckScripts.empty() && UnitTests.empty() && JsLint.empty()) {
RunShell(context, promptError);
}
@ -1366,9 +1380,13 @@ int main (int argc, char* argv[]) {
else {
bool ok = false;
if (! Scripts.empty()) {
// we have scripts to execute
ok = RunScripts(context);
if (! ExecuteScripts.empty()) {
// we have scripts to execute or syntax check
ok = RunScripts(context, ExecuteScripts, true);
}
else if (! CheckScripts.empty()) {
// we have scripts to syntax check
ok = RunScripts(context, CheckScripts, false);
}
else if (! UnitTests.empty()) {
// we have unit tests