1
0
Fork 0

fix path to node_modules after copying files (#7086)

This commit is contained in:
Jan 2018-10-30 13:50:50 +01:00 committed by GitHub
parent 937a7eee5f
commit 011d264e98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 7 deletions

View File

@ -115,7 +115,6 @@ V8DealerFeature::V8DealerFeature(
}
void V8DealerFeature::collectOptions(std::shared_ptr<ProgramOptions> options) {
options->addSection("javascript", "Configure the Javascript engine");
options->addHiddenOption(
@ -260,10 +259,28 @@ void V8DealerFeature::prepare() {
void V8DealerFeature::start() {
if (_copyInstallation) {
copyInstallationFiles(); // will exit process if it fails
} else {
// don't copy JS files on startup
// now check if we have a js directory inside the database directory, and if it looks good
auto dbPathFeature = application_features::ApplicationServer::getFeature<DatabasePathFeature>(DatabasePathFeature::name());
const std::string dbJSPath = FileUtils::buildFilename(dbPathFeature->directory(), "js");
const std::string checksumFile = FileUtils::buildFilename(dbJSPath, StaticStrings::checksumFileJs);
const std::string serverPath = FileUtils::buildFilename(dbJSPath, "server");
const std::string commonPath = FileUtils::buildFilename(dbJSPath, "common");
if (FileUtils::isDirectory(dbJSPath) &&
FileUtils::exists(checksumFile) &&
FileUtils::isDirectory(serverPath) &&
FileUtils::isDirectory(commonPath)) {
// only load node modules from original startup path
_nodeModulesDirectory = _startupDirectory;
// js directory inside database directory looks good. now use it!
_startupDirectory = dbJSPath;
}
}
LOG_TOPIC(DEBUG, Logger::V8) << "effective startup-directory is '" << _startupDirectory <<
"', effective module-directories are " << _moduleDirectories;
LOG_TOPIC(DEBUG, Logger::V8) << "effective startup-directory: " << _startupDirectory <<
", effective module-directories: " << _moduleDirectories <<
", node-modules-directory: " << _nodeModulesDirectory;
_startupLoader.setDirectory(_startupDirectory);
ServerState::instance()->setJavaScriptPath(_startupDirectory);
@ -282,7 +299,6 @@ void V8DealerFeature::start() {
if (!_appPath.empty()) {
paths.push_back(std::string("application '" + _appPath + "'"));
// create app directory if it does not exist
if (!basics::FileUtils::isDirectory(_appPath)) {
std::string systemErrorStr;
@ -383,6 +399,7 @@ void V8DealerFeature::copyInstallationFiles() {
// these do not need JavaScript support
return;
}
// get base path from DatabasePathFeature
auto dbPathFeature = application_features::ApplicationServer::getFeature<DatabasePathFeature>();
const std::string copyJSPath = FileUtils::buildFilename(dbPathFeature->directory(), "js");
@ -393,6 +410,8 @@ void V8DealerFeature::copyInstallationFiles() {
}
TRI_ASSERT(!copyJSPath.empty());
_nodeModulesDirectory = _startupDirectory;
const std::string checksumFile = FileUtils::buildFilename(_startupDirectory, StaticStrings::checksumFileJs);
const std::string copyChecksumFile = FileUtils::buildFilename(copyJSPath, StaticStrings::checksumFileJs);
@ -450,7 +469,6 @@ void V8DealerFeature::copyInstallationFiles() {
if (normalized.substr(normalized.size() - nodeModulesPath.size(), nodeModulesPath.size()) == nodeModulesPath ||
normalized.substr(normalized.size() - nodeModulesPathVersioned.size(), nodeModulesPathVersioned.size()) == nodeModulesPathVersioned) {
// filter it out!
_nodeModulesDirectory = _startupDirectory;
return true;
}
}
@ -1398,7 +1416,7 @@ V8Context* V8DealerFeature::buildContext(size_t id) {
directories.insert(directories.end(), _moduleDirectories.begin(),
_moduleDirectories.end());
directories.emplace_back(_startupDirectory);
if (!_nodeModulesDirectory.empty()) {
if (!_nodeModulesDirectory.empty() && _nodeModulesDirectory != _startupDirectory) {
directories.emplace_back(_nodeModulesDirectory);
}

View File

@ -241,6 +241,8 @@ void V8ShellFeature::copyInstallationFiles() {
LOG_TOPIC(DEBUG, Logger::V8) << "Copying JS installation files from '" << _startupDirectory << "' to '" << _copyDirectory << "'";
int res = TRI_ERROR_NO_ERROR;
_nodeModulesDirectory = _startupDirectory;
if (FileUtils::exists(_copyDirectory)) {
res = TRI_RemoveDirectory(_copyDirectory.c_str());
@ -270,7 +272,6 @@ void V8ShellFeature::copyInstallationFiles() {
if (normalized.substr(normalized.size() - nodeModulesPath.size(), nodeModulesPath.size()) == nodeModulesPath ||
normalized.substr(normalized.size() - nodeModulesPathVersioned.size(), nodeModulesPathVersioned.size()) == nodeModulesPathVersioned) {
// filter it out!
_nodeModulesDirectory = _startupDirectory;
return true;
}
}