1
0
Fork 0

Merge branch 'devel' of https://github.com/arangodb/arangodb into spdvpk

This commit is contained in:
jsteemann 2016-03-17 15:21:32 +01:00
commit 6ce73b439c
12 changed files with 257 additions and 164 deletions

View File

@ -2,12 +2,13 @@
# swagger # swagger
add_custom_target(swagger add_custom_target(swagger
COMMAND ${PYTHON_EXECUTABLE} COMMAND ${PROJECT_SOURCE_DIR}/utils/generateSwagger.sh
${PROJECT_SOURCE_DIR}/Documentation/Scripts/generateSwagger.py WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/js/apps/system/_admin/aardvark/APP/api-docs api-docs # swagger
${PROJECT_SOURCE_DIR}/Documentation/DocuBlocks/Rest/ add_custom_target(examples
> ${PROJECT_SOURCE_DIR}/js/apps/system/_admin/aardvark/APP/api-docs.json) COMMAND ${PROJECT_SOURCE_DIR}/utils/generateExamples.sh
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
# manual pages # manual pages
if (USE_MAINTAINER_MODE) if (USE_MAINTAINER_MODE)

View File

@ -138,7 +138,7 @@ void V8ShellFeature::stop() {
v8::Locker locker{_isolate}; v8::Locker locker{_isolate};
v8::Isolate::Scope isolate_scope{_isolate}; v8::Isolate::Scope isolate_scope{_isolate};
TRI_v8_global_t* v8g = \ TRI_v8_global_t* v8g =
static_cast<TRI_v8_global_t*>(_isolate->GetData(V8DataSlot)); static_cast<TRI_v8_global_t*>(_isolate->GetData(V8DataSlot));
_isolate->SetData(V8DataSlot, nullptr); _isolate->SetData(V8DataSlot, nullptr);
@ -246,8 +246,7 @@ V8ClientConnection* V8ShellFeature::setup(
v8connection = std::make_unique<V8ClientConnection>( v8connection = std::make_unique<V8ClientConnection>(
connection, client->databaseName(), client->username(), connection, client->databaseName(), client->username(),
client->password(), client->requestTimeout()); client->password(), client->requestTimeout());
} } else {
else {
client = nullptr; client = nullptr;
} }
} }
@ -285,8 +284,10 @@ int V8ShellFeature::runShell(std::vector<std::string> const& positionals) {
V8LineEditor v8LineEditor(_isolate, context, "." + _name + ".history"); V8LineEditor v8LineEditor(_isolate, context, "." + _name + ".history");
if (v8connection != nullptr) {
v8LineEditor.setSignalFunction( v8LineEditor.setSignalFunction(
[&v8connection]() { v8connection->setInterrupted(true); }); [&v8connection]() { v8connection->setInterrupted(true); });
}
v8LineEditor.open(_console->autoComplete()); v8LineEditor.open(_console->autoComplete());
@ -372,7 +373,9 @@ int V8ShellFeature::runShell(std::vector<std::string> const& positionals) {
promptError = true; promptError = true;
} }
if (v8connection != nullptr) {
v8connection->setInterrupted(false); v8connection->setInterrupted(false);
}
_console->stopPager(); _console->stopPager();
_console->printLine(""); _console->printLine("");
@ -855,8 +858,7 @@ void V8ShellFeature::initMode(ShellFeature::RunMode runMode,
TRI_AddGlobalVariableVocbase( TRI_AddGlobalVariableVocbase(
_isolate, context, TRI_V8_ASCII_STRING2(_isolate, "IS_UNIT_TESTS"), _isolate, context, TRI_V8_ASCII_STRING2(_isolate, "IS_UNIT_TESTS"),
v8::Boolean::New(_isolate, v8::Boolean::New(_isolate, runMode == ShellFeature::RunMode::UNIT_TESTS));
runMode == ShellFeature::RunMode::UNIT_TESTS));
TRI_AddGlobalVariableVocbase( TRI_AddGlobalVariableVocbase(
_isolate, context, TRI_V8_ASCII_STRING2(_isolate, "IS_JS_LINT"), _isolate, context, TRI_V8_ASCII_STRING2(_isolate, "IS_JS_LINT"),

View File

@ -375,19 +375,25 @@ Module._resolveDbModule = function (request) {
if (request.charAt(0) !== '/') { if (request.charAt(0) !== '/') {
request = '/' + request; request = '/' + request;
} }
var dbModule = Module._dbCache[request]; var dbModule = Module._dbCache[request];
if (!dbModule && internal.db._modules !== undefined) {
if (!dbModule && internal.db !== undefined && internal.db._modules !== undefined) {
dbModule = internal.db._modules.firstExample({path: request}); dbModule = internal.db._modules.firstExample({path: request});
if (!dbModule) { if (!dbModule) {
// try again, but prefix module with '/db' as some modules seem // try again, but prefix module with '/db' as some modules seem
// to have been saved with that prefix... // to have been saved with that prefix...
dbModule = internal.db._modules.firstExample({path: '/db:' + request}); dbModule = internal.db._modules.firstExample({path: '/db:' + request});
if (!dbModule) { if (!dbModule) {
return null; return null;
} }
} }
Module._dbCache[request] = dbModule; Module._dbCache[request] = dbModule;
} }
return dbModule; return dbModule;
}; };

View File

@ -25,6 +25,8 @@ if [ ! -z "$3" ] ; then
fi fi
fi fi
SECONDARIES="$4"
if [ -z "$XTERMOPTIONS" ] ; then if [ -z "$XTERMOPTIONS" ] ; then
XTERMOPTIONS="-fa Monospace-14 -bg white -fg black -geometry 80x43" XTERMOPTIONS="-fa Monospace-14 -bg white -fg black -geometry 80x43"
fi fi
@ -57,7 +59,6 @@ start() {
--log.requests-file cluster/$PORT.req \ --log.requests-file cluster/$PORT.req \
--server.disable-statistics true \ --server.disable-statistics true \
--server.foxx-queues false \ --server.foxx-queues false \
--server.foxx-queues false \
--javascript.startup-directory ./js \ --javascript.startup-directory ./js \
--server.disable-authentication true \ --server.disable-authentication true \
--javascript.app-path ./js/apps \ --javascript.app-path ./js/apps \
@ -163,6 +164,35 @@ for p in `seq 8530 $PORTTOPCO` ; do
testServer $p testServer $p
done done
if [ -n "$SECONDARIES" ]; then
let index=1
PORTTOPSE=`expr 8729 + $NRDBSERVERS - 1`
for PORT in `seq 8729 $PORTTOPSE` ; do
mkdir cluster/data$PORT
CLUSTER_ID="Secondary$index"
echo Registering secondary $CLUSTER_ID for "DBServer$index"
curl -f -X PUT --data "{\"primary\": \"DBServer$index\", \"oldSecondary\": \"none\", \"newSecondary\": \"$CLUSTER_ID\"}" -H "Content-Type: application/json" localhost:8530/_admin/cluster/replaceSecondary
echo Starting Secondary $CLUSTER_ID on port $PORT
build/bin/arangod --database.directory cluster/data$PORT \
--cluster.agency-endpoint tcp://127.0.0.1:4001 \
--cluster.my-address tcp://127.0.0.1:$PORT \
--server.endpoint tcp://127.0.0.1:$PORT \
--cluster.my-id $CLUSTER_ID \
--log.file cluster/$PORT.log \
--log.requests-file cluster/$PORT.req \
--server.disable-statistics true \
--server.foxx-queues false \
--javascript.startup-directory ./js \
--server.disable-authentication true \
--javascript.app-path ./js/apps \
> cluster/$PORT.stdout 2>&1 &
let index=$index+1
done
fi
echo Bootstrapping DBServers... echo Bootstrapping DBServers...
curl -s -X POST "http://127.0.0.1:8530/_admin/cluster/bootstrapDbServers" \ curl -s -X POST "http://127.0.0.1:8530/_admin/cluster/bootstrapDbServers" \
-d '{"isRelaunch":false}' >> cluster/DBServersUpgrade.log 2>&1 -d '{"isRelaunch":false}' >> cluster/DBServersUpgrade.log 2>&1

0
utils/generateErrorfile.py Executable file → Normal file
View File

View File

@ -1,60 +0,0 @@
#!/bin/bash
export PID=$$
if test -n "$ORIGINAL_PATH"; then
# running in cygwin...
PS='\'
export EXT=".exe"
else
export EXT=""
PS='/'
fi;
SCRIPT="utils${PS}generateExamples.js"
LOGFILE="out${PS}log-$PID"
DBDIR="out${PS}data-$PID"
mkdir -p ${DBDIR}
echo Database has its data in ${DBDIR}
echo Logfile is in ${LOGFILE}
if [ -z "${ARANGOD}" ]; then
if [ -x build/bin/arangod ]; then
ARANGOD=build/bin/arangod
elif [ -x bin/arangosh ]; then
ARANGOD=bin/arangod
else
echo "$0: cannot locate arangod"
fi
fi
${ARANGOD} \
--configuration none \
--cluster.agent-path bin${PS}etcd-arango${EXT} \
--cluster.arangod-path bin${PS}arangod \
--cluster.coordinator-config etc${PS}relative${PS}arangod-coordinator.conf \
--cluster.dbserver-config etc${PS}relative${PS}arangod-dbserver.conf \
--cluster.disable-dispatcher-frontend false \
--cluster.disable-dispatcher-kickstarter false \
--cluster.data-path cluster \
--cluster.log-path cluster \
--database.directory ${DBDIR} \
--log.file ${LOGFILE} \
--server.endpoint tcp://127.0.0.1:$PORT \
--javascript.startup-directory js \
--javascript.app-path js${PS}apps \
--javascript.script $SCRIPT \
--no-server \
--temp-path ${PS}var${PS}tmp \
"${ARGS[@]}" \
if test $? -eq 0; then
echo "removing ${LOGFILE} ${DBDIR}"
rm -rf ${LOGFILE} ${DBDIR}
else
echo "failed - don't remove ${LOGFILE} ${DBDIR} - here's the logfile:"
cat ${LOGFILE}
fi
echo Server has terminated.

View File

@ -1,58 +1,93 @@
/*jshint globalstrict:false, unused:false */ /*jshint globalstrict:false, unused:false */
/*global start_pretty_print */ /*global start_pretty_print */
'use strict';
var fs = require("fs"); const fs = require("fs");
var internal = require("internal"); const internal = require("internal");
var executeExternal = require("internal").executeExternal; const executeExternal = internal.executeExternal;
var executeExternalAndWait = internal.executeExternalAndWait; const executeExternalAndWait = internal.executeExternalAndWait;
var download = require("internal").download; const download = internal.download;
var print = internal.print; const print = internal.print;
var wait = require("internal").wait; const wait = internal.wait;
var killExternal = require("internal").killExternal; const killExternal = internal.killExternal;
var toArgv = require("internal").toArgv; const toArgv = internal.toArgv;
var statusExternal = require("internal").statusExternal; const statusExternal = internal.statusExternal;
const testPort = internal.testPort;
var yaml = require("js-yaml"); const yaml = require("js-yaml");
var endpointToURL = require("@arangodb/cluster/planner").endpointToURL;
var PortFinder = require("@arangodb/cluster").PortFinder;
var documentationSourceDirs = [ const documentationSourceDirs = [
fs.join(fs.makeAbsolute(''), "Documentation/Examples/setup-arangosh.js"), fs.join(fs.makeAbsolute(''), "Documentation/Examples/setup-arangosh.js"),
fs.join(fs.makeAbsolute(''), "Documentation/Books/Users"), fs.join(fs.makeAbsolute(''), "Documentation/DocuBlocks"),
fs.join(fs.makeAbsolute(''), "js/actions"), fs.join(fs.makeAbsolute(''), "Documentation/Books/Users")
fs.join(fs.makeAbsolute(''), "js/client"), ];
fs.join(fs.makeAbsolute(''), "js/common"),
fs.join(fs.makeAbsolute(''), "js/server"),
fs.join(fs.makeAbsolute(''), "js/apps/system/_api/gharial/APP")];
var theScript = 'Documentation/Scripts/generateExamples.py'; const theScript = 'utils/generateExamples.py';
var scriptArguments = { const scriptArguments = {
'outputDir': fs.join(fs.makeAbsolute(''), "Documentation/Examples"), 'outputDir': fs.join(fs.makeAbsolute(''), "Documentation/Examples"),
'outputFile': '/tmp/arangosh.examples.js' 'outputFile': fs.join(fs.makeAbsolute(''), "arangosh.examples.js")
}; };
let ARANGOD;
let ARANGOSH;
if (fs.exists("bin")) {
ARANGOD = fs.join(fs.join(fs.makeAbsolute('')), "bin/arangod");
ARANGOSH = fs.join(fs.join(fs.makeAbsolute('')), "bin/arangosh");
}
else {
ARANGOD = fs.join(fs.join(fs.makeAbsolute('')), "build/bin/arangod");
ARANGOSH = fs.join(fs.join(fs.makeAbsolute('')), "build/bin/arangosh");
}
function endpointToURL(endpoint) {
if (endpoint.substr(0, 6) === "ssl://") {
return "https://" + endpoint.substr(6);
}
const pos = endpoint.indexOf("://");
if (pos === -1) {
return "http://" + endpoint;
}
return "http" + endpoint.substr(pos);
}
function findFreePort() {
while (true) {
const port = Math.floor(Math.random() * (65536 - 1024)) + 1024;
const free = testPort("tcp://0.0.0.0:" + port);
if (free) {
return port;
}
}
return 8529;
}
function main(argv) { function main(argv) {
"use strict"; let thePython = 'python';
var thePython = 'python'; let options = {};
var test = argv[1]; let serverEndpoint = '';
var options = {}; let startServer = true;
var serverEndpoint = ''; let instanceInfo = {};
var startServer = true; let serverCrashed = false;
var instanceInfo = {}; let protocol = 'tcp';
var serverCrashed = false; let tmpDataDir = fs.getTempFile();
var protocol = 'tcp'; let count = 0;
var tmpDataDir = fs.getTempFile();
var count = 0;
try { try {
options = internal.parseArgv(argv, 1); options = internal.parseArgv(argv, 0);
} } catch (x) {
catch (x) {
print("failed to parse the options: " + x.message); print("failed to parse the options: " + x.message);
return -1; return -1;
} }
print(options);
if (options.hasOwnProperty('withPython')) { if (options.hasOwnProperty('withPython')) {
thePython = options.withPython; thePython = options.withPython;
} }
@ -65,13 +100,13 @@ function main (argv) {
startServer = false; startServer = false;
serverEndpoint = options['server.endpoint']; serverEndpoint = options['server.endpoint'];
} }
var args = [theScript].concat(internal.toArgv(scriptArguments));
let args = [theScript].concat(internal.toArgv(scriptArguments));
args = args.concat(['--arangoshSetup']); args = args.concat(['--arangoshSetup']);
args = args.concat(documentationSourceDirs); args = args.concat(documentationSourceDirs);
// internal.print(JSON.stringify(args)); let res = executeExternalAndWait(thePython, args);
var res = executeExternalAndWait(thePython, args);
if (res.exit !== 0) { if (res.exit !== 0) {
print("parsing the examples failed - aborting!"); print("parsing the examples failed - aborting!");
print(res); print(res);
@ -79,36 +114,46 @@ function main (argv) {
} }
if (startServer) { if (startServer) {
// We use the PortFinder to find a free port for our subinstance, let port = findFreePort();
// to this end, we have to fake a dummy dispatcher:
var dispatcher = {endpoint: "tcp://127.0.0.1:", avoidPorts: {}, id: "me"};
var pf = new PortFinder([8529],dispatcher);
var port = pf.next();
instanceInfo.port = port; instanceInfo.port = port;
serverEndpoint = protocol + "://127.0.0.1:" + port; serverEndpoint = protocol + "://127.0.0.1:" + port;
instanceInfo.url = endpointToURL(serverEndpoint); instanceInfo.url = endpointToURL(serverEndpoint);
var serverArgs = {};
serverArgs["server.endpoint"] = serverEndpoint;
serverArgs["database.directory"] = fs.join(tmpDataDir,"data");
fs.makeDirectoryRecursive(fs.join(tmpDataDir, "data")); fs.makeDirectoryRecursive(fs.join(tmpDataDir, "data"));
args["log.file"] = fs.join(tmpDataDir,"log");
instanceInfo.pid = executeExternal(fs.join("bin","arangod"), toArgv(serverArgs)); let serverArgs = {};
serverArgs["configuration"] = "none";
serverArgs["database.directory"] = fs.join(tmpDataDir, "data");
serverArgs["javascript.app-path"] = fs.join(tmpDataDir, "apps");
serverArgs["javascript.startup-directory"] = "js";
serverArgs["log.file"] = fs.join(tmpDataDir, "log");
serverArgs["server.disable-authentication"] = "true";
serverArgs["server.endpoint"] = serverEndpoint;
serverArgs["server.threads"] = "3";
print("================================================================================");
print(toArgv(serverArgs));
instanceInfo.pid = executeExternal(ARANGOD, toArgv(serverArgs));
// Wait until the server is up: // Wait until the server is up:
count = 0; count = 0;
instanceInfo.endpoint = serverEndpoint; instanceInfo.endpoint = serverEndpoint;
while (true) { while (true) {
wait(0.5, false); wait(0.5, false);
var r = download(instanceInfo.url + "/_api/version", ""); let r = download(instanceInfo.url + "/_api/version", "");
if (!r.error && r.code === 200) { if (!r.error && r.code === 200) {
break; break;
} }
count++; count++;
if (count % 60 === 0) { if (count % 60 === 0) {
res = statusExternal(instanceInfo.pid, false); res = statusExternal(instanceInfo.pid, false);
if (res.status !== "RUNNING") { if (res.status !== "RUNNING") {
print("start failed - process is gone: " + yaml.safeDump(res)); print("start failed - process is gone: " + yaml.safeDump(res));
return 1; return 1;
@ -116,14 +161,15 @@ function main (argv) {
} }
} }
} }
var arangoshArgs = {
let arangoshArgs = {
'configuration': fs.join(fs.makeAbsolute(''), 'etc', 'relative', 'arangosh.conf'), 'configuration': fs.join(fs.makeAbsolute(''), 'etc', 'relative', 'arangosh.conf'),
'server.password': "", 'server.password': "",
'server.endpoint': serverEndpoint, 'server.endpoint': serverEndpoint,
'javascript.execute': scriptArguments.outputFile 'javascript.execute': scriptArguments.outputFile
}; };
res = executeExternalAndWait('bin/arangosh', internal.toArgv(arangoshArgs)); res = executeExternalAndWait(ARANGOSH, internal.toArgv(arangoshArgs));
if (startServer) { if (startServer) {
if (typeof(instanceInfo.exitStatus) === 'undefined') { if (typeof(instanceInfo.exitStatus) === 'undefined') {
@ -131,9 +177,11 @@ function main (argv) {
print("Waiting for server shut down"); print("Waiting for server shut down");
count = 0; count = 0;
var bar = "["; let bar = "[";
while (1) { while (1) {
instanceInfo.exitStatus = statusExternal(instanceInfo.pid, false); instanceInfo.exitStatus = statusExternal(instanceInfo.pid, false);
if (instanceInfo.exitStatus.status === "RUNNING") { if (instanceInfo.exitStatus.status === "RUNNING") {
count++; count++;
if (typeof(options.valgrind) === 'string') { if (typeof(options.valgrind) === 'string') {
@ -149,12 +197,10 @@ function main (argv) {
serverCrashed = true; serverCrashed = true;
killExternal(instanceInfo.pid); killExternal(instanceInfo.pid);
break; break;
} } else {
else {
wait(1); wait(1);
} }
} } else if (instanceInfo.exitStatus.status !== "TERMINATED") {
else if (instanceInfo.exitStatus.status !== "TERMINATED") {
if (instanceInfo.exitStatus.hasOwnProperty('signal')) { if (instanceInfo.exitStatus.hasOwnProperty('signal')) {
print("Server shut down with : " + print("Server shut down with : " +
yaml.safeDump(instanceInfo.exitStatus) + yaml.safeDump(instanceInfo.exitStatus) +
@ -162,21 +208,24 @@ function main (argv) {
serverCrashed = true; serverCrashed = true;
break; break;
} }
if (require("internal").platform.substr(0,3) === 'win') { if (internal.platform.substr(0, 3) === 'win') {
// Windows: wait for procdump to do its job... // Windows: wait for procdump to do its job...
statusExternal(instanceInfo.monitor, true); statusExternal(instanceInfo.monitor, true);
} }
} } else {
else {
print("Server shutdown: Success."); print("Server shutdown: Success.");
break; // Success. break; // Success.
} }
} }
if (count > 10) { if (count > 10) {
print("long Server shutdown: " + bar + ']'); print("long Server shutdown: " + bar + ']');
} }
} }
} }
return 0; return 0;
} }
main(ARGUMENTS);

View File

@ -1,8 +1,4 @@
################################################################################ ################################################################################
### @brief creates examples from documentation files
###
### @file
###
### DISCLAIMER ### DISCLAIMER
### ###
### Copyright by triAGENS GmbH - All rights reserved. ### Copyright by triAGENS GmbH - All rights reserved.
@ -128,14 +124,13 @@ OPTION_OUTPUT_DIR = 2
OPTION_FILTER = 3 OPTION_FILTER = 3
OPTION_OUTPUT_FILE = 4 OPTION_OUTPUT_FILE = 4
fstate = OPTION_NORMAL
escapeBS = re.compile("\\\\") escapeBS = re.compile("\\\\")
doubleBS = "\\\\\\\\" doubleBS = "\\\\\\\\"
################################################################################ ################################################################################
### @brief generate arangosh example headers with functions etc. needed later ### @brief generate arangosh example headers with functions etc. needed later
################################################################################ ################################################################################
def generateArangoshHeader(): def generateArangoshHeader():
headerF = open("./Documentation/Scripts/exampleHeader.js", "r") headerF = open("./Documentation/Scripts/exampleHeader.js", "r")
print headerF.read() print headerF.read()
@ -144,6 +139,7 @@ def generateArangoshHeader():
################################################################################ ################################################################################
### @brief Try to match the start of a command section ### @brief Try to match the start of a command section
################################################################################ ################################################################################
regularStartLine = re.compile(r'^(/// )? *@EXAMPLE_ARANGOSH_OUTPUT{([^}]*)}') regularStartLine = re.compile(r'^(/// )? *@EXAMPLE_ARANGOSH_OUTPUT{([^}]*)}')
runLine = re.compile(r'^(/// )? *@EXAMPLE_ARANGOSH_RUN{([^}]*)}') runLine = re.compile(r'^(/// )? *@EXAMPLE_ARANGOSH_RUN{([^}]*)}')
@ -160,6 +156,7 @@ def matchStartLine(line, filename):
if name in ArangoshFiles: if name in ArangoshFiles:
print >> sys.stderr, "%s\nduplicate test name '%s' in file %s!\n%s\n" % ('#' * 80, name, filename, '#' * 80) print >> sys.stderr, "%s\nduplicate test name '%s' in file %s!\n%s\n" % ('#' * 80, name, filename, '#' * 80)
sys.exit(1) sys.exit(1)
# if we match for filters, only output these! # if we match for filters, only output these!
if ((FilterForTestcase != None) and not FilterForTestcase.match(name)): if ((FilterForTestcase != None) and not FilterForTestcase.match(name)):
filterTestList.append(name) filterTestList.append(name)
@ -184,6 +181,7 @@ def matchStartLine(line, filename):
ArangoshFiles[name] = True ArangoshFiles[name] = True
return (name, STATE_ARANGOSH_RUN) return (name, STATE_ARANGOSH_RUN)
# Not found, remain in STATE_BEGIN # Not found, remain in STATE_BEGIN
return ("", STATE_BEGIN) return ("", STATE_BEGIN)
@ -194,9 +192,11 @@ TESTLINES="testlines"
TYPE="type" TYPE="type"
LINE_NO="lineNo" LINE_NO="lineNo"
STRING="string" STRING="string"
################################################################################ ################################################################################
### @brief loop over the lines of one input file ### @brief loop over the lines of one input file
################################################################################ ################################################################################
def analyzeFile(f, filename): def analyzeFile(f, filename):
global RunTests, TESTLINES, TYPE, LINE_NO, STRING global RunTests, TESTLINES, TYPE, LINE_NO, STRING
strip = None strip = None
@ -294,7 +294,6 @@ def generateSetupFunction():
print "(function () {\n%s}());" % ArangoshSetup print "(function () {\n%s}());" % ArangoshSetup
print print
################################################################################ ################################################################################
### @brief generate arangosh example ### @brief generate arangosh example
################################################################################ ################################################################################
@ -302,6 +301,7 @@ def generateSetupFunction():
loopDetectRE = re.compile(r'^[ \n]*(while|if|var|throw|for) ') loopDetectRE = re.compile(r'^[ \n]*(while|if|var|throw|for) ')
expectErrorRE = re.compile(r'.*// *xpError\((.*)\).*') expectErrorRE = re.compile(r'.*// *xpError\((.*)\).*')
#expectErrorRE = re.compile(r'.*//\s*xpError\(([^)]*)\)/') #expectErrorRE = re.compile(r'.*//\s*xpError\(([^)]*)\)/')
def generateArangoshOutput(testName): def generateArangoshOutput(testName):
value = RunTests[testName] value = RunTests[testName]
#print value #print value
@ -370,7 +370,6 @@ def generateArangoshOutput(testName):
}()); }());
''' '''
################################################################################ ################################################################################
### @brief generate arangosh run ### @brief generate arangosh run
################################################################################ ################################################################################
@ -429,6 +428,7 @@ def generateArangoshRun(testName):
################################################################################ ################################################################################
### @brief generate arangosh run ### @brief generate arangosh run
################################################################################ ################################################################################
def generateArangoshShutdown(): def generateArangoshShutdown():
print ''' print '''
if (allErrors.length > 0) { if (allErrors.length > 0) {
@ -437,29 +437,35 @@ if (allErrors.length > 0) {
} }
''' '''
################################################################################ ################################################################################
### @brief get file names ### @brief get file names
################################################################################ ################################################################################
def loopDirectories(): def loopDirectories():
global ArangoshSetup, OutputDir, FilterForTestcase global ArangoshSetup, OutputDir, FilterForTestcase
argv = sys.argv argv = sys.argv
argv.pop(0) argv.pop(0)
filenames = [] filenames = []
fstate = OPTION_NORMAL
for filename in argv: for filename in argv:
if filename == "--arangoshSetup": if filename == "--arangoshSetup":
fstate = OPTION_ARANGOSH_SETUP fstate = OPTION_ARANGOSH_SETUP
continue continue
if filename == "--onlyThisOne": if filename == "--onlyThisOne":
fstate = OPTION_FILTER fstate = OPTION_FILTER
continue continue
if filename == "--outputDir": if filename == "--outputDir":
fstate = OPTION_OUTPUT_DIR fstate = OPTION_OUTPUT_DIR
continue continue
if filename == "--outputFile": if filename == "--outputFile":
fstate = OPTION_OUTPUT_FILE fstate = OPTION_OUTPUT_FILE
continue continue
if fstate == OPTION_NORMAL: if fstate == OPTION_NORMAL:
if os.path.isdir(filename): if os.path.isdir(filename):
for root, dirs, files in os.walk(filename): for root, dirs, files in os.walk(filename):
@ -468,6 +474,7 @@ def loopDirectories():
filenames.append(os.path.join(root, file)) filenames.append(os.path.join(root, file))
else: else:
filenames.append(filename) filenames.append(filename)
elif fstate == OPTION_FILTER: elif fstate == OPTION_FILTER:
fstate = OPTION_NORMAL fstate = OPTION_NORMAL
if (len(filename) > 0): if (len(filename) > 0):
@ -486,11 +493,11 @@ def loopDirectories():
elif fstate == OPTION_OUTPUT_DIR: elif fstate == OPTION_OUTPUT_DIR:
fstate = OPTION_NORMAL fstate = OPTION_NORMAL
OutputDir = filename OutputDir = filename
elif fstate == OPTION_OUTPUT_FILE: elif fstate == OPTION_OUTPUT_FILE:
fstate = OPTION_NORMAL fstate = OPTION_NORMAL
sys.stdout = open(filename, 'w') sys.stdout = open(filename, 'w')
print >> sys.stderr, repr(filenames)
for filename in filenames: for filename in filenames:
if (filename.find("#") < 0): if (filename.find("#") < 0):
f = open(filename, "r") f = open(filename, "r")
@ -512,10 +519,10 @@ def generateTestCases():
elif RunTests[thisTest][TYPE] == STATE_ARANGOSH_RUN: elif RunTests[thisTest][TYPE] == STATE_ARANGOSH_RUN:
generateArangoshRun(thisTest) generateArangoshRun(thisTest)
################################################################################ ################################################################################
### @brief main ### @brief main
################################################################################ ################################################################################
loopDirectories() loopDirectories()
print >> sys.stderr, "filtering test cases %s" %(filterTestList) print >> sys.stderr, "filtering test cases %s" %(filterTestList)

49
utils/generateExamples.sh Executable file
View File

@ -0,0 +1,49 @@
#!/bin/bash
export PID=$$
if test -n "$ORIGINAL_PATH"; then
# running in cygwin...
PS='\'
export EXT=".exe"
else
export EXT=""
PS='/'
fi;
SCRIPT="utils${PS}generateExamples.js"
LOGFILE="out${PS}log-$PID"
DBDIR="out${PS}data-$PID"
mkdir -p ${DBDIR}
echo Database has its data in ${DBDIR}
echo Logfile is in ${LOGFILE}
if [ -z "${ARANGOSH}" ]; then
if [ -x build/bin/arangosh ]; then
ARANGOSH=build/bin/arangosh
elif [ -x bin/arangosh ]; then
ARANGOSH=bin/arangosh
else
echo "$0: cannot locate arangosh"
fi
fi
${ARANGOSH} \
--configuration none \
--server.endpoint none \
--log.file ${LOGFILE} \
--javascript.startup-directory js \
--javascript.execute $SCRIPT \
--server.password "" \
"${ARGS[@]}"
if test $? -eq 0; then
echo "removing ${LOGFILE} ${DBDIR}"
rm -rf ${LOGFILE} ${DBDIR} arangosh.examples.js
else
echo "failed - don't remove ${LOGFILE} ${DBDIR} - here's the logfile:"
cat ${LOGFILE}
fi
echo Server has terminated.

0
utils/generateMimetypes.py Executable file → Normal file
View File

View File

@ -1010,7 +1010,7 @@ def example_arangosh_run(cargo, r=Regexen()):
exampleHeader = brTrim(operation['x-examples'][currentExample]).strip() exampleHeader = brTrim(operation['x-examples'][currentExample]).strip()
# new examples code TODO should include for each example own object in json file # new examples code TODO should include for each example own object in json file
examplefile = open(os.path.join(os.path.dirname(__file__), '../Examples/' + parameters(last) + '.generated')) examplefile = open(os.path.join(os.path.dirname(__file__), '../Documentation/Examples/' + parameters(last) + '.generated'))
operation['x-examples'][currentExample]= '<details><summary>Example: ' + exampleHeader.strip('\n ') + '</summary><br><br><pre><code class="json">' operation['x-examples'][currentExample]= '<details><summary>Example: ' + exampleHeader.strip('\n ') + '</summary><br><br><pre><code class="json">'
for line in examplefile.readlines(): for line in examplefile.readlines():

9
utils/generateSwagger.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
python \
`pwd`/utils/generateSwagger.py \
`pwd` \
`pwd`/js/apps/system/_admin/aardvark/APP/api-docs \
api-docs \
`pwd`/Documentation/DocuBlocks/Rest \
> `pwd`/js/apps/system/_admin/aardvark/APP/api-docs.json