diff --git a/arangod/RestServer/ArangoServer.cpp b/arangod/RestServer/ArangoServer.cpp index a382b3cc31..5003304c2d 100644 --- a/arangod/RestServer/ArangoServer.cpp +++ b/arangod/RestServer/ArangoServer.cpp @@ -740,6 +740,7 @@ int ArangoServer::executeConsole (OperationMode::server_operation_mode_e mode) { sysTestFiles->Set((uint32_t) i, v8::String::New(_unitTests[i].c_str())); } + context->_context->Global()->Set(v8::String::New("DATABASEPATH"), v8::String::New(_databasePath.c_str())); context->_context->Global()->Set(v8::String::New("VALGRIND"), _runningOnValgrind ? v8::True() : v8::False()); context->_context->Global()->Set(v8::String::New("SYS_UNIT_TESTS"), sysTestFiles); context->_context->Global()->Set(v8::String::New("SYS_UNIT_TESTS_RESULT"), v8::True()); @@ -774,6 +775,7 @@ int ArangoServer::executeConsole (OperationMode::server_operation_mode_e mode) { sysTestFiles->Set((uint32_t) i, v8::String::New(_jslint[i].c_str())); } + context->_context->Global()->Set(v8::String::New("DATABASEPATH"), v8::String::New(_databasePath.c_str())); context->_context->Global()->Set(v8::String::New("VALGRIND"), _runningOnValgrind ? v8::True() : v8::False()); context->_context->Global()->Set(v8::String::New("SYS_UNIT_TESTS"), sysTestFiles); context->_context->Global()->Set(v8::String::New("SYS_UNIT_TESTS_RESULT"), v8::True()); @@ -799,6 +801,7 @@ int ArangoServer::executeConsole (OperationMode::server_operation_mode_e mode) { case OperationMode::MODE_SCRIPT: { v8::TryCatch tryCatch; + context->_context->Global()->Set(v8::String::New("DATABASEPATH"), v8::String::New(_databasePath.c_str())); context->_context->Global()->Set(v8::String::New("VALGRIND"), _runningOnValgrind ? v8::True() : v8::False()); for (size_t i = 0; i < _scriptFile.size(); ++i) { @@ -856,6 +859,7 @@ int ArangoServer::executeConsole (OperationMode::server_operation_mode_e mode) { // ............................................................................. case OperationMode::MODE_CONSOLE: { + context->_context->Global()->Set(v8::String::New("DATABASEPATH"), v8::String::New(_databasePath.c_str())); context->_context->Global()->Set(v8::String::New("VALGRIND"), _runningOnValgrind ? v8::True() : v8::False()); V8LineEditor* console = new V8LineEditor(context->_context, ".arango"); diff --git a/js/server/arango-upgrade.js b/js/server/arango-upgrade.js index c574693a31..cbb87088a2 100644 --- a/js/server/arango-upgrade.js +++ b/js/server/arango-upgrade.js @@ -39,11 +39,24 @@ function main (argv) { var console = require("console"); var db = internal.db; - var tasks = [ ]; + var versionFile = DATABASEPATH + "/VERSION"; + + var allTasks = [ ]; + var activeTasks = [ ]; + + var currentVersion = 0; + if (FS_EXISTS(versionFile)) { + currentVersion = parseInt(SYS_READ(versionFile)); + } // helper function to define tasks - function addTask (description, code) { - tasks.push({ description: description, code: code }); + function addTask (description, maxVersion, code) { + var task = { description: description, maxVersion: maxVersion, code: code }; + + allTasks.push(task); + if (currentVersion < parseInt(maxVersion)) { + activeTasks.push(task); + } } // -------------------------------------------------------------------------- @@ -51,7 +64,7 @@ function main (argv) { // -------------------------------------------------------------------------- // set up the collection _users - addTask("setup _users collection", function () { + addTask("setup _users collection", 0, function () { var users = db._collection("_users"); if (users == null) { @@ -66,7 +79,7 @@ function main (argv) { }); // create a unique index on username attribute in _users - addTask("create index on username attribute in _users collection", function () { + addTask("create index on username attribute in _users collection", 0, function () { var users = db._collection("_users"); if (users == null) { return false; @@ -78,7 +91,7 @@ function main (argv) { }); // add a default root user with no passwd - addTask("add default root user", function () { + addTask("add default root user", 0, function () { var users = db._collection("_users"); if (users == null) { return false; @@ -93,7 +106,7 @@ function main (argv) { }); // set up the collection _graphs - addTask("setup _graphs collection", function () { + addTask("setup _graphs collection", 0, function () { var graphs = db._collection("_graphs"); if (graphs == null) { @@ -108,7 +121,7 @@ function main (argv) { }); // create a unique index on name attribute in _graphs - addTask("create index on name attribute in _graphs collection", function () { + addTask("create index on name attribute in _graphs collection", 0, function () { var graphs = db._collection("_graphs"); if (graphs == null) { return false; @@ -120,7 +133,7 @@ function main (argv) { }); // make distinction between document and edge collections - addTask("set new collection type for edge collections and update collection version", function () { + addTask("set new collection type for edge collections and update collection version", 0, function () { var collections = db._collections(); for (var i in collections) { @@ -167,16 +180,24 @@ function main (argv) { return true; }); + + // create the VERSION file + addTask("create VERSION file", 0, function () { + SYS_SAVE(versionFile, "1"); + return true; + }); console.log("Upgrade script " + argv[0] + " started"); + console.log("Server VERSION is: " + currentVersion); // loop through all tasks and execute them - console.log("Found " + tasks.length + " tasks to run..."); - for (var i in tasks) { - var task = tasks[i]; + console.log("Found " + allTasks.length + " defined task(s), " + activeTasks.length + " task(s) to run"); - console.log("Executing task #" + i + ": " + task.description); + for (var i in activeTasks) { + var task = activeTasks[i]; + + console.log("Executing task #" + (i + 1) + ": " + task.description); var result = task.code(); if (! result) {