1
0
Fork 0

new name convention

This commit is contained in:
Frank Celler 2013-07-25 17:25:39 +02:00
parent 9bc0f82583
commit 1b6dfad627
15 changed files with 692 additions and 654 deletions

View File

@ -1,25 +0,0 @@
COMMAND SECTION "DATE" "" "ArangoDB"
NAME
COMMAND - user setup utility for the ArangoDB database server
SYNOPSIS
COMMAND database-directory username [password]
DESCRIPTION
The COMMAND utility can be used to create additional users in an
ArangoDB database server.
The utility must be run with exclusive access to the server's data directory,
meaning the ArangoDB server must not be running and accessing the
datafiles in the specified data directory.
OPTIONS
The options of the COMMAND utility are:
OPTION "--database.directory <string>"
path to the database directory ENDOPTION
OPTION "username"
name of the user to add ENDOPTION
OPTION "password"
password for the user. Leave empty for a password prompt ENDOPTION
EXAMPLES
EXAMPLE COMMAND --database.directory /data/arangodb fuchsia
creates a new user "fuchsia". Password prompt will follow ENDEXAMPLE
EXAMPLE COMMAND --database.directory /data/arangodb fuchsia "1234@ab"
creates a new user "fuchsia" with the specified password ENDEXAMPLE
AUTHOR

View File

@ -71,6 +71,7 @@ TRI_DATABASEDIR =
TRI_LOGDIR = /tmp TRI_LOGDIR = /tmp
TRI_PKGDATADIR = . TRI_PKGDATADIR = .
TRI_SBINDIR = ${abs_builddir}/bin TRI_SBINDIR = ${abs_builddir}/bin
TRI_BINDIR = ${abs_builddir}/bin
else else
@ -78,6 +79,7 @@ TRI_DATABASEDIR = ${localstatedir}/lib/${PACKAGE_TARNAME}
TRI_LOGDIR = ${localstatedir}/log/${PACKAGE_TARNAME} TRI_LOGDIR = ${localstatedir}/log/${PACKAGE_TARNAME}
TRI_PKGDATADIR = ${pkgdatadir} TRI_PKGDATADIR = ${pkgdatadir}
TRI_SBINDIR = ${sbindir} TRI_SBINDIR = ${sbindir}
TRI_BINDIR = ${bindir}
endif endif

View File

@ -54,11 +54,6 @@ size_t const ArangoClient::DEFAULT_RETRIES = 2;
// --SECTION-- public constants // --SECTION-- public constants
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup ArangoShell
/// @{
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief ignore sequence used for prompt length calculation (starting point) /// @brief ignore sequence used for prompt length calculation (starting point)
/// ///
@ -75,19 +70,10 @@ char const * ArangoClient::PROMPT_IGNORE_START = "\001";
char const * ArangoClient::PROMPT_IGNORE_END = "\002"; char const * ArangoClient::PROMPT_IGNORE_END = "\002";
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// --SECTION-- constructors and destructors // --SECTION-- constructors and destructors
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup ArangoShell
/// @{
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief constructor /// @brief constructor
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -126,26 +112,17 @@ ArangoClient::ArangoClient ()
_requestTimeout(DEFAULT_REQUEST_TIMEOUT) { _requestTimeout(DEFAULT_REQUEST_TIMEOUT) {
char* p = TRI_GetTempPath(); char* p = TRI_GetTempPath();
if (p != NULL) { if (p != NULL) {
_tempPath = string(p); _tempPath = string(p);
TRI_Free(TRI_CORE_MEM_ZONE, p); TRI_Free(TRI_CORE_MEM_ZONE, p);
} }
} }
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// --SECTION-- public methods // --SECTION-- public methods
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup ArangoShell
/// @{
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief sets up the general and logging options /// @brief sets up the general and logging options
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -344,12 +321,12 @@ void ArangoClient::parse (ProgramOptions& options,
// set temp path // set temp path
if (options.has("temp-path")) { if (options.has("temp-path")) {
TRI_SetUserTempPath((char*) _tempPath.c_str()); TRI_SetUserTempPath((char*) _tempPath.c_str());
} }
// check if have a password // check if have a password
_hasPassword = options.has("server.password") || _hasPassword = options.has("server.password")
_disableAuthentication || || _disableAuthentication
options.has("jslint"); || options.has("jslint");
// set colors // set colors
if (options.has("colors")) { if (options.has("colors")) {
@ -745,10 +722,6 @@ double ArangoClient::requestTimeout () const {
return _requestTimeout; return _requestTimeout;
} }
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// --SECTION-- END-OF-FILE // --SECTION-- END-OF-FILE
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------

View File

@ -74,11 +74,6 @@ using namespace triagens::arango;
// --SECTION-- private variables // --SECTION-- private variables
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup V8Shell
/// @{
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief base class for clients /// @brief base class for clients
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -133,6 +128,12 @@ static string StartupPath = "";
static vector<string> ExecuteScripts; static vector<string> ExecuteScripts;
////////////////////////////////////////////////////////////////////////////////
/// @brief javascript string to execute
////////////////////////////////////////////////////////////////////////////////
static string ExecuteString;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief javascript files to syntax check /// @brief javascript files to syntax check
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -151,19 +152,10 @@ static vector<string> UnitTests;
static vector<string> JsLint; static vector<string> JsLint;
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// --SECTION-- JavaScript functions // --SECTION-- JavaScript functions
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup V8Shell
/// @{
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief outputs the arguments /// @brief outputs the arguments
/// ///
@ -222,19 +214,10 @@ static v8::Handle<v8::Value> JS_StopOutputPager (v8::Arguments const& ) {
return v8::Undefined(); return v8::Undefined();
} }
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// --SECTION-- import function // --SECTION-- import function
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup V8Shell
/// @{
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief imports a CSV file /// @brief imports a CSV file
/// ///
@ -362,11 +345,6 @@ static v8::Handle<v8::Value> JS_ImportJsonFile (v8::Arguments const& argv) {
TRI_V8_EXCEPTION_MESSAGE(scope, TRI_ERROR_FAILED, ih.getErrorMessage().c_str()); TRI_V8_EXCEPTION_MESSAGE(scope, TRI_ERROR_FAILED, ih.getErrorMessage().c_str());
} }
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief normalize UTF 16 strings /// @brief normalize UTF 16 strings
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -404,11 +382,6 @@ static v8::Handle<v8::Value> JS_compare_string (v8::Arguments const& argv) {
// --SECTION-- private functions // --SECTION-- private functions
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup V8Shell
/// @{
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief return a new client connection instance /// @brief return a new client connection instance
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -427,12 +400,13 @@ static V8ClientConnection* CreateConnection () {
/// @brief parses the program options /// @brief parses the program options
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
static void ParseProgramOptions (int argc, char* argv[]) { static vector<string> ParseProgramOptions (int argc, char* argv[]) {
ProgramOptionsDescription description("STANDARD options"); ProgramOptionsDescription description("STANDARD options");
ProgramOptionsDescription javascript("JAVASCRIPT options"); ProgramOptionsDescription javascript("JAVASCRIPT options");
javascript javascript
("javascript.execute", &ExecuteScripts, "execute Javascript code from file") ("javascript.execute", &ExecuteScripts, "execute Javascript code from file")
("javascript.execute-string", &ExecuteString, "execute Javascript code from string")
("javascript.check", &CheckScripts, "syntax check code Javascript code from file") ("javascript.check", &CheckScripts, "syntax check code Javascript code from file")
("javascript.modules-path", &StartupModules, "one or more directories separated by semi-colons") ("javascript.modules-path", &StartupModules, "one or more directories separated by semi-colons")
("javascript.package-path", &StartupPackages, "one or more directories separated by semi-colons") ("javascript.package-path", &StartupPackages, "one or more directories separated by semi-colons")
@ -446,6 +420,10 @@ static void ParseProgramOptions (int argc, char* argv[]) {
(javascript, false) (javascript, false)
; ;
vector<string> arguments;
description.arguments(&arguments);
// fill in used options // fill in used options
BaseClient.setupGeneral(description); BaseClient.setupGeneral(description);
BaseClient.setupColors(description); BaseClient.setupColors(description);
@ -473,9 +451,12 @@ static void ParseProgramOptions (int argc, char* argv[]) {
} }
// disable excessive output in non-interactive mode // disable excessive output in non-interactive mode
if (! ExecuteScripts.empty() || ! CheckScripts.empty() || ! UnitTests.empty() || ! JsLint.empty()) { if (! ExecuteScripts.empty() || ! ExecuteString.empty() || ! CheckScripts.empty() || ! UnitTests.empty() || ! JsLint.empty()) {
BaseClient.shutup(); BaseClient.shutup();
} }
// return the positional arguments
return arguments;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -570,7 +551,7 @@ static v8::Handle<v8::Value> ClientConnection_reconnect (v8::Arguments const& ar
v8::HandleScope scope; v8::HandleScope scope;
V8ClientConnection* connection = TRI_UnwrapClass<V8ClientConnection>(argv.Holder(), WRAP_TYPE_CONNECTION); V8ClientConnection* connection = TRI_UnwrapClass<V8ClientConnection>(argv.Holder(), WRAP_TYPE_CONNECTION);
if (connection == 0) { if (connection == 0) {
TRI_V8_EXCEPTION_INTERNAL(scope, "connection class corrupted"); TRI_V8_EXCEPTION_INTERNAL(scope, "connection class corrupted");
} }
@ -580,7 +561,7 @@ static v8::Handle<v8::Value> ClientConnection_reconnect (v8::Arguments const& ar
} }
string definition = TRI_ObjectToString(argv[0]); string definition = TRI_ObjectToString(argv[0]);
string username; string username;
if (argv.Length() < 2) { if (argv.Length() < 2) {
username = BaseClient.username(); username = BaseClient.username();
@ -607,7 +588,7 @@ static v8::Handle<v8::Value> ClientConnection_reconnect (v8::Arguments const& ar
else { else {
password = TRI_ObjectToString(argv[2]); password = TRI_ObjectToString(argv[2]);
} }
delete connection; delete connection;
const string oldDefinition = BaseClient.endpointString(); const string oldDefinition = BaseClient.endpointString();
@ -615,15 +596,15 @@ static v8::Handle<v8::Value> ClientConnection_reconnect (v8::Arguments const& ar
const string oldPassword = BaseClient.password(); const string oldPassword = BaseClient.password();
BaseClient.setEndpointString(definition); BaseClient.setEndpointString(definition);
BaseClient.setUsername(username); BaseClient.setUsername(username);
BaseClient.setPassword(password); BaseClient.setPassword(password);
// re-connect using new options // re-connect using new options
BaseClient.createEndpoint(); BaseClient.createEndpoint();
if (BaseClient.endpointServer() == 0) { if (BaseClient.endpointServer() == 0) {
BaseClient.setEndpointString(oldDefinition); BaseClient.setEndpointString(oldDefinition);
BaseClient.setUsername(oldUsername); BaseClient.setUsername(oldUsername);
BaseClient.setPassword(oldPassword); BaseClient.setPassword(oldPassword);
BaseClient.createEndpoint(); BaseClient.createEndpoint();
string errorMessage = "error in '" + definition + "'"; string errorMessage = "error in '" + definition + "'";
@ -635,7 +616,7 @@ static v8::Handle<v8::Value> ClientConnection_reconnect (v8::Arguments const& ar
if (newConnection->isConnected() && newConnection->getLastHttpReturnCode() == HttpResponse::OK) { if (newConnection->isConnected() && newConnection->getLastHttpReturnCode() == HttpResponse::OK) {
cout << "Connected to ArangoDB '" << BaseClient.endpointServer()->getSpecification() cout << "Connected to ArangoDB '" << BaseClient.endpointServer()->getSpecification()
<< "' version " << newConnection->getVersion() << ", username: '" << BaseClient.username() << "'" << endl; << "' version " << newConnection->getVersion() << ", username: '" << BaseClient.username() << "'" << endl;
argv.Holder()->SetInternalField(SLOT_CLASS, v8::External::New(newConnection)); argv.Holder()->SetInternalField(SLOT_CLASS, v8::External::New(newConnection));
v8::Handle<v8::Value> db = v8::Context::GetCurrent()->Global()->Get(TRI_V8_SYMBOL("db")); v8::Handle<v8::Value> db = v8::Context::GetCurrent()->Global()->Get(TRI_V8_SYMBOL("db"));
@ -644,13 +625,13 @@ static v8::Handle<v8::Value> ClientConnection_reconnect (v8::Arguments const& ar
if (dbObj->Has(TRI_V8_STRING("_flushCache")) && dbObj->Get(TRI_V8_STRING("_flushCache"))->IsFunction()) { if (dbObj->Has(TRI_V8_STRING("_flushCache")) && dbObj->Get(TRI_V8_STRING("_flushCache"))->IsFunction()) {
v8::Handle<v8::Function> func = v8::Handle<v8::Function>::Cast(dbObj->Get(TRI_V8_STRING("_flushCache"))); v8::Handle<v8::Function> func = v8::Handle<v8::Function>::Cast(dbObj->Get(TRI_V8_STRING("_flushCache")));
v8::Handle<v8::Value>* args = 0; v8::Handle<v8::Value>* args = 0;
func->Call(dbObj, 0, args); func->Call(dbObj, 0, args);
} }
} }
// ok // ok
return scope.Close(v8::True()); return scope.Close(v8::True());
} }
else { else {
@ -658,8 +639,8 @@ static v8::Handle<v8::Value> ClientConnection_reconnect (v8::Arguments const& ar
// rollback // rollback
BaseClient.setEndpointString(oldDefinition); BaseClient.setEndpointString(oldDefinition);
BaseClient.setUsername(oldUsername); BaseClient.setUsername(oldUsername);
BaseClient.setPassword(oldPassword); BaseClient.setPassword(oldPassword);
BaseClient.createEndpoint(); BaseClient.createEndpoint();
ClientConnection = CreateConnection(); ClientConnection = CreateConnection();
@ -669,9 +650,9 @@ static v8::Handle<v8::Value> ClientConnection_reconnect (v8::Arguments const& ar
if (newConnection->getErrorMessage() != "") { if (newConnection->getErrorMessage() != "") {
errorMsg = newConnection->getErrorMessage(); errorMsg = newConnection->getErrorMessage();
} }
delete newConnection; delete newConnection;
TRI_V8_EXCEPTION_MESSAGE(scope, TRI_SIMPLE_CLIENT_COULD_NOT_CONNECT, errorMsg.c_str()); TRI_V8_EXCEPTION_MESSAGE(scope, TRI_SIMPLE_CLIENT_COULD_NOT_CONNECT, errorMsg.c_str());
} }
} }
@ -1024,20 +1005,20 @@ static v8::Handle<v8::Value> ClientConnection_httpSendFile (v8::Arguments const&
} }
TRI_Utf8ValueNFC url(TRI_UNKNOWN_MEM_ZONE, argv[0]); TRI_Utf8ValueNFC url(TRI_UNKNOWN_MEM_ZONE, argv[0]);
const string infile = TRI_ObjectToString(argv[1]); const string infile = TRI_ObjectToString(argv[1]);
if (! TRI_ExistsFile(infile.c_str())) { if (! TRI_ExistsFile(infile.c_str())) {
TRI_V8_EXCEPTION(scope, TRI_ERROR_FILE_NOT_FOUND); TRI_V8_EXCEPTION(scope, TRI_ERROR_FILE_NOT_FOUND);
} }
size_t bodySize; size_t bodySize;
char* body = TRI_SlurpFile(TRI_UNKNOWN_MEM_ZONE, infile.c_str(), &bodySize); char* body = TRI_SlurpFile(TRI_UNKNOWN_MEM_ZONE, infile.c_str(), &bodySize);
if (body == 0) { if (body == 0) {
TRI_V8_EXCEPTION_MESSAGE(scope, TRI_errno(), "could not read file"); TRI_V8_EXCEPTION_MESSAGE(scope, TRI_errno(), "could not read file");
} }
v8::TryCatch tryCatch; v8::TryCatch tryCatch;
// check header fields // check header fields
@ -1045,7 +1026,7 @@ static v8::Handle<v8::Value> ClientConnection_httpSendFile (v8::Arguments const&
v8::Handle<v8::Value> result = connection->postData(*url, body, bodySize, headerFields); v8::Handle<v8::Value> result = connection->postData(*url, body, bodySize, headerFields);
TRI_Free(TRI_UNKNOWN_MEM_ZONE, body); TRI_Free(TRI_UNKNOWN_MEM_ZONE, body);
if (tryCatch.HasCaught()) { if (tryCatch.HasCaught()) {
return scope.Close(v8::ThrowException(tryCatch.Exception())); return scope.Close(v8::ThrowException(tryCatch.Exception()));
} }
@ -1211,20 +1192,27 @@ static void RunShell (v8::Handle<v8::Context> context, bool promptError) {
string badPrompt; string badPrompt;
#ifdef __APPLE__ #ifdef __APPLE__
// ........................................................................................
// MacOS uses libedit, which does not support ignoring of non-printable characters in the prompt // MacOS uses libedit, which does not support ignoring of non-printable characters in the prompt
// using non-printable characters in the prompt will lead to wrong prompt lengths being calculated // using non-printable characters in the prompt will lead to wrong prompt lengths being calculated
// we will therefore disable colorful prompts for MacOS. // we will therefore disable colorful prompts for MacOS.
// ........................................................................................
goodPrompt = badPrompt = string("arangosh> "); goodPrompt = badPrompt = string("arangosh> ");
#elif _WIN32 #elif _WIN32
// ........................................................................................ // ........................................................................................
// Windows console is not coloured by escape sequences. So the method given below will not // Windows console is not coloured by escape sequences. So the method given below will not
// work. For now we simply ignore the colours until we move the windows version into // work. For now we simply ignore the colours until we move the windows version into
// a GUI Window. // a GUI Window.
// ........................................................................................ // ........................................................................................
goodPrompt = string("arangosh> ");
badPrompt = string("arangosh> "); goodPrompt = badPrompt = string("arangosh> ");
#else #else
if (BaseClient.colors()) { if (BaseClient.colors()) {
goodPrompt = string(ArangoClient::PROMPT_IGNORE_START) + string(TRI_SHELL_COLOR_BOLD_GREEN) + string(ArangoClient::PROMPT_IGNORE_END) + goodPrompt = string(ArangoClient::PROMPT_IGNORE_START) + string(TRI_SHELL_COLOR_BOLD_GREEN) + string(ArangoClient::PROMPT_IGNORE_END) +
string("arangosh>") + string("arangosh>") +
@ -1239,6 +1227,7 @@ static void RunShell (v8::Handle<v8::Context> context, bool promptError) {
else { else {
goodPrompt = badPrompt = string("arangosh> "); goodPrompt = badPrompt = string("arangosh> ");
} }
#endif #endif
cout << endl; cout << endl;
@ -1392,6 +1381,35 @@ static bool RunScripts (v8::Handle<v8::Context> context,
return ok; return ok;
} }
////////////////////////////////////////////////////////////////////////////////
/// @brief executes the Javascript string
////////////////////////////////////////////////////////////////////////////////
static bool RunString (v8::Handle<v8::Context> context,
const string& script) {
v8::HandleScope scope;
v8::TryCatch tryCatch;
bool ok = true;
TRI_ExecuteJavaScriptString(context,
v8::String::New(script.c_str()),
v8::String::New("(command-line)"),
false);
if (tryCatch.HasCaught()) {
string exception(TRI_StringifyV8Exception(&tryCatch));
cerr << exception << endl;
BaseClient.log("%s\n", exception.c_str());
ok = false;
}
BaseClient.flushLog();
return ok;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief runs the jslint tests /// @brief runs the jslint tests
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -1428,20 +1446,10 @@ static bool RunJsLint (v8::Handle<v8::Context> context) {
} }
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// --SECTION-- public functions // --SECTION-- public functions
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup V8Shell
/// @{
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief startup and exit functions /// @brief startup and exit functions
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -1535,7 +1543,7 @@ int main (int argc, char* argv[]) {
// parse the program options // parse the program options
// ............................................................................. // .............................................................................
ParseProgramOptions(argc, argv); vector<string> positionals = ParseProgramOptions(argc, argv);
// ............................................................................. // .............................................................................
// set-up client connection // set-up client connection
@ -1550,7 +1558,6 @@ int main (int argc, char* argv[]) {
} }
if (useServer) { if (useServer) {
BaseClient.createEndpoint(); BaseClient.createEndpoint();
if (BaseClient.endpointServer() == 0) { if (BaseClient.endpointServer() == 0) {
@ -1558,7 +1565,6 @@ int main (int argc, char* argv[]) {
TRI_EXIT_FUNCTION(EXIT_FAILURE,NULL); TRI_EXIT_FUNCTION(EXIT_FAILURE,NULL);
} }
ClientConnection = CreateConnection(); ClientConnection = CreateConnection();
} }
@ -1635,15 +1641,15 @@ int main (int argc, char* argv[]) {
connection_proto->SetCallAsFunctionHandler(ClientConnection_ConstructorCallback); connection_proto->SetCallAsFunctionHandler(ClientConnection_ConstructorCallback);
v8::Handle<v8::ObjectTemplate> connection_inst = connection_templ->InstanceTemplate(); v8::Handle<v8::ObjectTemplate> connection_inst = connection_templ->InstanceTemplate();
connection_inst->SetInternalFieldCount(2); connection_inst->SetInternalFieldCount(2);
TRI_AddGlobalVariableVocbase(context, "ArangoConnection", connection_proto->NewInstance()); TRI_AddGlobalVariableVocbase(context, "ArangoConnection", connection_proto->NewInstance());
ConnectionTempl = v8::Persistent<v8::ObjectTemplate>::New(isolate, connection_inst); ConnectionTempl = v8::Persistent<v8::ObjectTemplate>::New(isolate, connection_inst);
// add the client connection to the context: // add the client connection to the context:
TRI_AddGlobalVariableVocbase(context, "SYS_ARANGO", wrapV8ClientConnection(ClientConnection)); TRI_AddGlobalVariableVocbase(context, "SYS_ARANGO", wrapV8ClientConnection(ClientConnection));
} }
TRI_AddGlobalVariableVocbase(context, "SYS_START_PAGER", v8::FunctionTemplate::New(JS_StartOutputPager)->GetFunction()); TRI_AddGlobalVariableVocbase(context, "SYS_START_PAGER", v8::FunctionTemplate::New(JS_StartOutputPager)->GetFunction());
TRI_AddGlobalVariableVocbase(context, "SYS_STOP_PAGER", v8::FunctionTemplate::New(JS_StopOutputPager)->GetFunction()); TRI_AddGlobalVariableVocbase(context, "SYS_STOP_PAGER", v8::FunctionTemplate::New(JS_StopOutputPager)->GetFunction());
TRI_AddGlobalVariableVocbase(context, "SYS_IMPORT_CSV_FILE", v8::FunctionTemplate::New(JS_ImportCsvFile)->GetFunction()); TRI_AddGlobalVariableVocbase(context, "SYS_IMPORT_CSV_FILE", v8::FunctionTemplate::New(JS_ImportCsvFile)->GetFunction());
@ -1661,10 +1667,9 @@ int main (int argc, char* argv[]) {
#ifdef _WIN32 #ifdef _WIN32
// ............................................................................. // .............................................................................
// Quick hack for windows // Quick hack for windows
// ............................................................................. // .............................................................................
if (BaseClient.colors()) { if (BaseClient.colors()) {
int greenColour = FOREGROUND_GREEN | FOREGROUND_INTENSITY; int greenColour = FOREGROUND_GREEN | FOREGROUND_INTENSITY;
@ -1716,10 +1721,10 @@ int main (int argc, char* argv[]) {
printf(" "); printf(" ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), defaultColour); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), defaultColour);
printf("\n"); printf("\n");
} }
#else #else
char const* g = TRI_SHELL_COLOR_GREEN; char const* g = TRI_SHELL_COLOR_GREEN;
char const* r = TRI_SHELL_COLOR_RED; char const* r = TRI_SHELL_COLOR_RED;
char const* z = TRI_SHELL_COLOR_RESET; char const* z = TRI_SHELL_COLOR_RESET;
@ -1738,6 +1743,7 @@ int main (int argc, char* argv[]) {
printf("%s| (_| | | | (_| | | | | (_| | (_) %s\\__ \\ | | |%s\n", g, r, z); printf("%s| (_| | | | (_| | | | | (_| | (_) %s\\__ \\ | | |%s\n", g, r, z);
printf("%s \\__,_|_| \\__,_|_| |_|\\__, |\\___/%s|___/_| |_|%s\n", g, r, z); printf("%s \\__,_|_| \\__,_|_| |_|\\__, |\\___/%s|___/_| |_|%s\n", g, r, z);
printf("%s |___/ %s %s\n", g, r, z); printf("%s |___/ %s %s\n", g, r, z);
#endif #endif
cout << endl << "Welcome to arangosh " << TRIAGENS_VERSION << ". Copyright (c) triAGENS GmbH" << endl; cout << endl << "Welcome to arangosh " << TRIAGENS_VERSION << ". Copyright (c) triAGENS GmbH" << endl;
@ -1795,6 +1801,7 @@ int main (int argc, char* argv[]) {
TRI_AddGlobalVariableVocbase(context, "VALGRIND", v8::Boolean::New((RUNNING_ON_VALGRIND) > 0)); TRI_AddGlobalVariableVocbase(context, "VALGRIND", v8::Boolean::New((RUNNING_ON_VALGRIND) > 0));
bool isExecuteScript = false; bool isExecuteScript = false;
bool isExecuteString = false;
bool isCheckScripts = false; bool isCheckScripts = false;
bool isUnitTests = false; bool isUnitTests = false;
bool isJsLint = false; bool isJsLint = false;
@ -1802,6 +1809,9 @@ int main (int argc, char* argv[]) {
if (! ExecuteScripts.empty()) { if (! ExecuteScripts.empty()) {
isExecuteScript = true; isExecuteScript = true;
} }
else if (! ExecuteString.empty()) {
isExecuteString = true;
}
else if (! CheckScripts.empty()) { else if (! CheckScripts.empty()) {
isCheckScripts = true; isCheckScripts = true;
} }
@ -1813,6 +1823,7 @@ int main (int argc, char* argv[]) {
} }
TRI_AddGlobalVariableVocbase(context, "IS_EXECUTE_SCRIPT", v8::Boolean::New(isExecuteScript)); TRI_AddGlobalVariableVocbase(context, "IS_EXECUTE_SCRIPT", v8::Boolean::New(isExecuteScript));
TRI_AddGlobalVariableVocbase(context, "IS_EXECUTE_STRING", v8::Boolean::New(isExecuteString));
TRI_AddGlobalVariableVocbase(context, "IS_CHECK_SCRIPT", v8::Boolean::New(isCheckScripts)); TRI_AddGlobalVariableVocbase(context, "IS_CHECK_SCRIPT", v8::Boolean::New(isCheckScripts));
TRI_AddGlobalVariableVocbase(context, "IS_UNIT_TESTS", v8::Boolean::New(isUnitTests)); TRI_AddGlobalVariableVocbase(context, "IS_UNIT_TESTS", v8::Boolean::New(isUnitTests));
TRI_AddGlobalVariableVocbase(context, "IS_JS_LINT", v8::Boolean::New(isJsLint)); TRI_AddGlobalVariableVocbase(context, "IS_JS_LINT", v8::Boolean::New(isJsLint));
@ -1844,13 +1855,29 @@ int main (int argc, char* argv[]) {
} }
} }
// .............................................................................
// create arguments
// .............................................................................
v8::Handle<v8::Array> p = v8::Array::New(positionals.size());
for (size_t i = 0; i < positionals.size(); ++i) {
p->Set(i, v8::String::New(positionals[i].c_str()));
}
TRI_AddGlobalVariableVocbase(context, "ARGUMENTS", p);
// .............................................................................
// start logging
// .............................................................................
BaseClient.openLog(); BaseClient.openLog();
// ............................................................................. // .............................................................................
// run normal shell // run normal shell
// ............................................................................. // .............................................................................
if (! (isExecuteScript || isCheckScripts || isUnitTests || isJsLint)) { if (! (isExecuteScript || isExecuteString || isCheckScripts || isUnitTests || isJsLint)) {
RunShell(context, promptError); RunShell(context, promptError);
} }
@ -1862,9 +1889,13 @@ int main (int argc, char* argv[]) {
bool ok = false; bool ok = false;
if (isExecuteScript) { if (isExecuteScript) {
// we have scripts to execute or syntax check // we have scripts to execute
ok = RunScripts(context, ExecuteScripts, true); ok = RunScripts(context, ExecuteScripts, true);
} }
else if (isExecuteString) {
// we have string to execute
ok = RunString(context, ExecuteString);
}
else if (isCheckScripts) { else if (isCheckScripts) {
// we have scripts to syntax check // we have scripts to syntax check
ok = RunScripts(context, CheckScripts, false); ok = RunScripts(context, CheckScripts, false);
@ -1902,10 +1933,6 @@ int main (int argc, char* argv[]) {
return ret; return ret;
} }
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// --SECTION-- END-OF-FILE // --SECTION-- END-OF-FILE
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------

View File

@ -1,3 +1,6 @@
[server]
password =
[javascript] [javascript]
startup-directory = ./js startup-directory = ./js
modules-path = ./js/client/modules;./js/common/modules;./js/node modules-path = ./js/client/modules;./js/common/modules;./js/node

View File

@ -1,5 +1,5 @@
/*jslint indent: 2, nomen: true, maxlen: 120, sloppy: true, vars: true, nonpropdel: true, white: true, plusplus: true, evil: true */ /*jslint indent: 2, nomen: true, maxlen: 120, sloppy: true, vars: true, nonpropdel: true, white: true, plusplus: true, evil: true */
/*global require, IS_EXECUTE_SCRIPT, IS_CHECK_SCRIPT, IS_UNIT_TESTS, IS_JS_LINT */ /*global require, IS_EXECUTE_SCRIPT, IS_EXECUTE_STRING, IS_CHECK_SCRIPT, IS_UNIT_TESTS, IS_JS_LINT */
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief ArangoShell client API /// @brief ArangoShell client API
@ -94,12 +94,6 @@ var db = require("org/arangodb").db;
var arango = require("org/arangodb").arango; var arango = require("org/arangodb").arango;
////////////////////////////////////////////////////////////////////////////////
/// @brief global 'aal'
////////////////////////////////////////////////////////////////////////////////
var aal = require("org/arangodb/aal");
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief global 'Buffer' /// @brief global 'Buffer'
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -129,7 +123,7 @@ var Buffer = require("buffer").Buffer;
try { try {
// these variables don't exist in the browser context // these variables don't exist in the browser context
special = IS_EXECUTE_SCRIPT || IS_CHECK_SCRIPT || IS_UNIT_TESTS || IS_JS_LINT; special = IS_EXECUTE_SCRIPT || IS_EXECUTE_STRING || IS_CHECK_SCRIPT || IS_UNIT_TESTS || IS_JS_LINT;
} }
catch (err2) { catch (err2) {
special = false; special = false;
@ -153,7 +147,7 @@ var Buffer = require("buffer").Buffer;
try { try {
// these variables are not defined in the browser context // these variables are not defined in the browser context
__special__ = IS_EXECUTE_SCRIPT || IS_CHECK_SCRIPT || IS_UNIT_TESTS || IS_JS_LINT; __special__ = IS_EXECUTE_SCRIPT || IS_EXECUTE_STRING || IS_CHECK_SCRIPT || IS_UNIT_TESTS || IS_JS_LINT;
} }
catch (err) { catch (err) {
__special__ = true; __special__ = true;
@ -177,6 +171,7 @@ var Buffer = require("buffer").Buffer;
try { try {
delete IS_EXECUTE_SCRIPT; delete IS_EXECUTE_SCRIPT;
delete IS_EXECUTE_STRING;
delete IS_CHECK_SCRIPT; delete IS_CHECK_SCRIPT;
delete IS_UNIT_TESTS; delete IS_UNIT_TESTS;
delete IS_JS_LINT; delete IS_JS_LINT;

View File

@ -45,39 +45,6 @@ var foxxManager = require("org/arangodb/foxx-manager");
/// @{ /// @{
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief installs a FOXX application
////////////////////////////////////////////////////////////////////////////////
actions.defineHttp({
url : "_admin/foxx/install",
context : "admin",
prefix : false,
callback : function (req, res) {
'use strict';
var result;
var body = actions.getJsonBody(req, res);
if (body === undefined) {
return;
}
var appId = body.appId;
var mount = body.mount;
var options = body.options || {};
try {
result = foxxManager.installApp(appId, mount, options);
actions.resultOk(req, res, actions.HTTP_OK, result);
}
catch (err) {
actions.resultException(req, res, err);
}
}
});
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief sets up a FOXX dev application /// @brief sets up a FOXX dev application
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -141,42 +108,11 @@ actions.defineHttp({
}); });
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief uninstalls a FOXX application /// @brief fetches a FOXX application
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
actions.defineHttp({ actions.defineHttp({
url : "_admin/foxx/uninstall", url : "_admin/foxx/fetch",
context : "admin",
prefix : false,
callback : function (req, res) {
'use strict';
var result;
var body = actions.getJsonBody(req, res);
if (body === undefined) {
return;
}
var key = body.key;
try {
result = foxxManager.uninstallApp(key);
actions.resultOk(req, res, actions.HTTP_OK, result);
}
catch (err) {
actions.resultException(req, res, err);
}
}
});
////////////////////////////////////////////////////////////////////////////////
/// @brief loads a FOXX application
////////////////////////////////////////////////////////////////////////////////
actions.defineHttp({
url : "_admin/foxx/load",
context : "admin", context : "admin",
prefix : false, prefix : false,
@ -245,6 +181,68 @@ actions.defineHttp({
} }
}); });
////////////////////////////////////////////////////////////////////////////////
/// @brief mounts a FOXX application
////////////////////////////////////////////////////////////////////////////////
actions.defineHttp({
url : "_admin/foxx/mount",
context : "admin",
prefix : false,
callback : function (req, res) {
'use strict';
var body = actions.getJsonBody(req, res);
if (body === undefined) {
return;
}
var appId = body.appId;
var mount = body.mount;
var options = body.options || {};
try {
var result = foxxManager.mount(appId, mount, options);
actions.resultOk(req, res, actions.HTTP_OK, result);
}
catch (err) {
actions.resultException(req, res, err);
}
}
});
////////////////////////////////////////////////////////////////////////////////
/// @brief unmounts a FOXX application
////////////////////////////////////////////////////////////////////////////////
actions.defineHttp({
url : "_admin/foxx/unmount",
context : "admin",
prefix : false,
callback : function (req, res) {
'use strict';
var body = actions.getJsonBody(req, res);
if (body === undefined) {
return;
}
var key = body.key;
try {
var result = foxxManager.unmount(key);
actions.resultOk(req, res, actions.HTTP_OK, result);
}
catch (err) {
actions.resultException(req, res, err);
}
}
});
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @} /// @}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View File

@ -67,12 +67,12 @@
}, },
install: function (name, mount, version) { install: function (name, mount, version) {
return foxxmanager.installApp(name, mount, version); return foxxmanager.mount(name, mount, version);
}, },
// Define the functionality to uninstall an installed foxx // Define the functionality to uninstall an installed foxx
uninstall: function (key) { uninstall: function (key) {
return foxxmanager.uninstallApp(key); return foxxmanager.unmount(key);
}, },
// Define the functionality to deactivate an installed foxx. // Define the functionality to deactivate an installed foxx.

View File

@ -1,5 +1,5 @@
/*jslint indent: 2, nomen: true, maxlen: 120, sloppy: true, vars: true, nonpropdel: true, white: true, plusplus: true, evil: true */ /*jslint indent: 2, nomen: true, maxlen: 120, sloppy: true, vars: true, nonpropdel: true, white: true, plusplus: true, evil: true */
/*global require, IS_EXECUTE_SCRIPT, IS_CHECK_SCRIPT, IS_UNIT_TESTS, IS_JS_LINT */ /*global require, IS_EXECUTE_SCRIPT, IS_EXECUTE_STRING, IS_CHECK_SCRIPT, IS_UNIT_TESTS, IS_JS_LINT */
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief ArangoShell client API /// @brief ArangoShell client API
@ -94,12 +94,6 @@ var db = require("org/arangodb").db;
var arango = require("org/arangodb").arango; var arango = require("org/arangodb").arango;
////////////////////////////////////////////////////////////////////////////////
/// @brief global 'aal'
////////////////////////////////////////////////////////////////////////////////
var aal = require("org/arangodb/aal");
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief global 'Buffer' /// @brief global 'Buffer'
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -129,7 +123,7 @@ var Buffer = require("buffer").Buffer;
try { try {
// these variables don't exist in the browser context // these variables don't exist in the browser context
special = IS_EXECUTE_SCRIPT || IS_CHECK_SCRIPT || IS_UNIT_TESTS || IS_JS_LINT; special = IS_EXECUTE_SCRIPT || IS_EXECUTE_STRING || IS_CHECK_SCRIPT || IS_UNIT_TESTS || IS_JS_LINT;
} }
catch (err2) { catch (err2) {
special = false; special = false;
@ -153,7 +147,7 @@ var Buffer = require("buffer").Buffer;
try { try {
// these variables are not defined in the browser context // these variables are not defined in the browser context
__special__ = IS_EXECUTE_SCRIPT || IS_CHECK_SCRIPT || IS_UNIT_TESTS || IS_JS_LINT; __special__ = IS_EXECUTE_SCRIPT || IS_EXECUTE_STRING || IS_CHECK_SCRIPT || IS_UNIT_TESTS || IS_JS_LINT;
} }
catch (err) { catch (err) {
__special__ = true; __special__ = true;
@ -177,6 +171,7 @@ var Buffer = require("buffer").Buffer;
try { try {
delete IS_EXECUTE_SCRIPT; delete IS_EXECUTE_SCRIPT;
delete IS_EXECUTE_STRING;
delete IS_CHECK_SCRIPT; delete IS_CHECK_SCRIPT;
delete IS_UNIT_TESTS; delete IS_UNIT_TESTS;
delete IS_JS_LINT; delete IS_JS_LINT;

View File

@ -815,10 +815,10 @@ function require (path) {
return module.exports; return module.exports;
} }
throw "cannot locate module '" + unormalizedPath + "'" throw new Error("cannot locate module '" + unormalizedPath + "'"
+ " for package '" + this._package.id + "'" + " for package '" + this._package.id + "'"
+ " using module path '" + modulesPath + "'" + " using module path '" + modulesPath + "'"
+ " and package path '" + this._package._paths + "'"; + " and package path '" + this._package._paths + "'");
}; };
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View File

@ -169,7 +169,7 @@
var found = aal.firstExample({ type: "mount", mount: "/_admin/aardvark" }); var found = aal.firstExample({ type: "mount", mount: "/_admin/aardvark" });
if (found === null) { if (found === null) {
fm.installApp("aardvark", "/_admin/aardvark", {reload: false}); fm.mount("aardvark", "/_admin/aardvark", {reload: false});
} }
} }
}; };

View File

@ -537,21 +537,13 @@ exports.scanAppDirectory = function () {
}; };
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief installs a FOXX application /// @brief mounts a FOXX application
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
exports.installApp = function (appId, mount, options) { exports.mount = function (appId, mount, options) {
'use strict'; 'use strict';
var aal; var aal = getStorage();
var app;
var desc;
var doc;
var prefix;
var routes;
var version;
aal = getStorage();
// ............................................................................. // .............................................................................
// locate the application // locate the application
@ -561,7 +553,7 @@ exports.installApp = function (appId, mount, options) {
appId = "app:" + appId + ":latest"; appId = "app:" + appId + ":latest";
} }
app = module.createApp(appId); var app = module.createApp(appId);
if (app === null) { if (app === null) {
throw new Error("cannot find application '" + appId + "'"); throw new Error("cannot find application '" + appId + "'");
@ -571,8 +563,8 @@ exports.installApp = function (appId, mount, options) {
// compute the routing information // compute the routing information
// ............................................................................. // .............................................................................
prefix = options && options.collectionPrefix; var prefix = options && options.collectionPrefix;
routes = routingAalApp(app, mount, prefix, false); var routes = routingAalApp(app, mount, prefix, false);
if (routes === null) { if (routes === null) {
throw new Error("cannot compute the routing table for fox application '" throw new Error("cannot compute the routing table for fox application '"
@ -583,6 +575,9 @@ exports.installApp = function (appId, mount, options) {
// install the application // install the application
// ............................................................................. // .............................................................................
var doc;
var desc;
try { try {
doc = installAalApp(app, mount, prefix, false); doc = installAalApp(app, mount, prefix, false);
} }
@ -609,21 +604,14 @@ exports.installApp = function (appId, mount, options) {
}; };
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief uninstalls a FOXX application /// @brief unmounts a FOXX application
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
exports.uninstallApp = function (key) { exports.unmount = function (key) {
'use strict'; 'use strict';
var aal; var aal = getStorage();
var app; var doc = aal.firstExample({ type: "mount", _key: key });
var appDoc;
var context;
var doc;
var routing;
aal = getStorage();
doc = aal.firstExample({ type: "mount", _key: key });
if (doc === null) { if (doc === null) {
doc = aal.firstExample({ type: "mount", mount: key }); doc = aal.firstExample({ type: "mount", mount: key });
@ -637,23 +625,20 @@ exports.uninstallApp = function (key) {
try { try {
if (appId.substr(0,4) === "app:") { if (appId.substr(0,4) === "app:") {
appDoc = aal.firstExample({ app: appId, type: "app" }); var appDoc = aal.firstExample({ app: appId, type: "app" });
if (appDoc === null) { if (appDoc === null) {
throw new Error("cannot find app '" + appId + "' in _aal collection"); throw new Error("cannot find app '" + appId + "' in _aal collection");
} }
} }
app = module.createApp(appId); var app = module.createApp(appId);
teardownApp(app, doc.mount, doc.collectionPrefix); teardownApp(app, doc.mount, doc.collectionPrefix);
} }
catch (err) { catch (err) {
console.error("teardown not possible for application '%s': %s", appId, String(err)); console.error("teardown not possible for application '%s': %s", appId, String(err));
} }
routing = arangodb.db._collection("_routing");
routing.removeByExample({ foxxMount: doc._key });
aal.remove(doc); aal.remove(doc);
internal.executeGlobalContextFunction("require(\"org/arangodb/actions\").reloadRouting()"); internal.executeGlobalContextFunction("require(\"org/arangodb/actions\").reloadRouting()");

View File

@ -10,7 +10,7 @@
bin_SCRIPTS += \ bin_SCRIPTS += \
bin/arango-dfdb \ bin/arango-dfdb \
bin/arango-password bin/foxx-manager
CLEANUP += $(bin_SCRIPTS) CLEANUP += $(bin_SCRIPTS)
@ -27,15 +27,14 @@ bin/arango-dfdb: utils/arango-dfdb.in
chmod 755 $@ chmod 755 $@
################################################################################ ################################################################################
### @brief arango password: this create a file with a warning message only ### @brief foxx manager
### as arango-password is deprecated
################################################################################ ################################################################################
.PHONY: bin/arango-password bin/foxx-manager: utils/foxx-manager.in
sed \
bin/arango-password: -e 's%@BINDIR@%${TRI_BINDIR}%g' \
@echo "echo \"arango-password is not part of this ArangoDB release.\"; exit 1" > $@ $< > $@
@chmod 755 $@ chmod 755 $@
## ----------------------------------------------------------------------------- ## -----------------------------------------------------------------------------
## --SECTION-- END-OF-FILE ## --SECTION-- END-OF-FILE

17
utils/foxx-manager.in Normal file
View File

@ -0,0 +1,17 @@
#!/bin/bash
# Placeholders starting with @ will be replaced by make
ARANGOSH="@BINDIR@/arangosh"
RCFILE=""
if [ "$1" == "--relative" ] ; then
shift
ARANGOSH="./bin/arangosh"
RCFILE="-c etc/relative/arangosh.conf"
fi
$ARANGOSH \
$RCFILE \
--javascript.execute-string 'require("org/arangodb/foxx-manager").run(ARGUMENTS);' \
$*