logic: implemented handling of non-ASCII characters in Gradle and Maven project paths
* also: fixed loading sqlite database from path with non-ascii characters
This commit is contained in:
@@ -199,7 +199,7 @@ void TaskBuildIndex::runIndexerProcess(int processId, const std::string& logFile
|
||||
int result = 1;
|
||||
while (result != 0 && !m_interrupted)
|
||||
{
|
||||
result = utility::executeProcessAndGetExitCode(command.c_str(), "", -1);
|
||||
result = utility::executeProcessAndGetExitCode(command.c_str(), FilePath(), -1);
|
||||
|
||||
LOG_INFO_STREAM(<< "Indexer process " << processId << " returned with " + std::to_string(result));
|
||||
}
|
||||
|
||||
@@ -2,11 +2,12 @@
|
||||
|
||||
#include "utility/logging/logging.h"
|
||||
#include "utility/TimeStamp.h"
|
||||
#include "utility/utilityString.h"
|
||||
|
||||
SqliteStorage::SqliteStorage(const FilePath& dbFilePath)
|
||||
: m_dbFilePath(dbFilePath.getCanonical())
|
||||
{
|
||||
m_database.open(m_dbFilePath.str().c_str());
|
||||
m_database.open(utility::encodeToUtf8(m_dbFilePath.wstr()).c_str());
|
||||
|
||||
executeStatement("PRAGMA foreign_keys=ON;");
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ std::vector<FilePath> CxxVs15HeaderPathDetector::getPaths() const
|
||||
{
|
||||
const std::string command = "\"" + expandedPaths[0].str() + "\" -latest -property installationPath";
|
||||
const std::string command2 = "\"C:/Program Files (x86)/Microsoft Visual Studio/Installer/vswhere.exe\"";
|
||||
const std::string output = utility::executeProcess(command, "", 10000);
|
||||
const std::string output = utility::executeProcess(command, FilePath(), 10000);
|
||||
|
||||
const FilePath vsInstallPath(output);
|
||||
if (vsInstallPath.exists())
|
||||
|
||||
@@ -18,14 +18,14 @@ namespace utility
|
||||
std::set<QProcess*> s_runningProcesses;
|
||||
}
|
||||
|
||||
std::string utility::executeProcess(const std::string& command, const std::string& workingDirectory, const int timeout)
|
||||
std::string utility::executeProcess(const std::string& command, const FilePath& workingDirectory, const int timeout)
|
||||
{
|
||||
QProcess process;
|
||||
process.setProcessChannelMode(QProcess::MergedChannels);
|
||||
|
||||
if (!workingDirectory.empty())
|
||||
{
|
||||
process.setWorkingDirectory(workingDirectory.c_str());
|
||||
process.setWorkingDirectory(QString::fromStdWString(workingDirectory.wstr()));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -49,14 +49,14 @@ std::string utility::executeProcess(const std::string& command, const std::strin
|
||||
return processoutput;
|
||||
}
|
||||
|
||||
std::string utility::executeProcessUntilNoOutput(const std::string& command, const std::string& workingDirectory, const int waitTime)
|
||||
std::string utility::executeProcessUntilNoOutput(const std::string& command, const FilePath& workingDirectory, const int waitTime)
|
||||
{
|
||||
QProcess process;
|
||||
process.setProcessChannelMode(QProcess::MergedChannels);
|
||||
|
||||
if (!workingDirectory.empty())
|
||||
{
|
||||
process.setWorkingDirectory(workingDirectory.c_str());
|
||||
process.setWorkingDirectory(QString::fromStdWString(workingDirectory.wstr()));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -92,13 +92,13 @@ std::string utility::executeProcessUntilNoOutput(const std::string& command, con
|
||||
return processoutput;
|
||||
}
|
||||
|
||||
int utility::executeProcessAndGetExitCode(const std::string& command, const std::string& workingDirectory, const int timeout)
|
||||
int utility::executeProcessAndGetExitCode(const std::string& command, const FilePath& workingDirectory, const int timeout)
|
||||
{
|
||||
QProcess process;
|
||||
|
||||
if (!workingDirectory.empty())
|
||||
{
|
||||
process.setWorkingDirectory(workingDirectory.c_str());
|
||||
process.setWorkingDirectory(QString::fromStdWString(workingDirectory.wstr()));
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -6,14 +6,15 @@
|
||||
#include <string>
|
||||
|
||||
#include "utility/OsType.h"
|
||||
#include "utility/file/FilePath.h"
|
||||
|
||||
class License;
|
||||
|
||||
namespace utility
|
||||
{
|
||||
std::string executeProcess(const std::string& command, const std::string& workingDirectory = "", const int timeout = 30000);
|
||||
std::string executeProcessUntilNoOutput(const std::string& command, const std::string& workingDirectory, int waitTime = 10000);
|
||||
int executeProcessAndGetExitCode(const std::string& command, const std::string& workingDirectory = "", const int timeout = 30000);
|
||||
std::string executeProcess(const std::string& command, const FilePath& workingDirectory = FilePath(), const int timeout = 30000);
|
||||
std::string executeProcessUntilNoOutput(const std::string& command, const FilePath& workingDirectory, int waitTime = 10000);
|
||||
int executeProcessAndGetExitCode(const std::string& command, const FilePath& workingDirectory = FilePath(), const int timeout = 30000);
|
||||
|
||||
void killRunningProcesses();
|
||||
|
||||
|
||||
@@ -32,17 +32,29 @@ namespace utility
|
||||
{
|
||||
bool gradleCopyDependencies(const FilePath& projectDirectoryPath, const FilePath& outputDirectoryPath, bool addTestDependencies)
|
||||
{
|
||||
const std::string gradleInitScriptPath = ResourcePaths::getJavaPath().str() + "gradle/init.gradle";
|
||||
const FilePath gradleInitScriptPath = ResourcePaths::getJavaPath().concatenate(L"gradle/init.gradle");
|
||||
|
||||
setJavaHomeVariableIfNotExists();
|
||||
utility::prepareJavaEnvironment();
|
||||
|
||||
std::shared_ptr<JavaEnvironment> javaEnvironment = JavaEnvironmentFactory::getInstance()->createEnvironment();
|
||||
bool success = javaEnvironment->callStaticVoidMethod("com/sourcetrail/gradle/InfoRetriever", "copyCompileLibs", projectDirectoryPath.str(), gradleInitScriptPath, outputDirectoryPath.str());
|
||||
bool success = javaEnvironment->callStaticVoidMethod(
|
||||
"com/sourcetrail/gradle/InfoRetriever",
|
||||
"copyCompileLibs",
|
||||
utility::encodeToUtf8(projectDirectoryPath.wstr()),
|
||||
utility::encodeToUtf8(gradleInitScriptPath.wstr()),
|
||||
utility::encodeToUtf8(outputDirectoryPath.wstr())
|
||||
);
|
||||
|
||||
if (success && addTestDependencies)
|
||||
{
|
||||
success = javaEnvironment->callStaticVoidMethod("com/sourcetrail/gradle/InfoRetriever", "copyTestCompileLibs", projectDirectoryPath.str(), gradleInitScriptPath, outputDirectoryPath.str());
|
||||
success = javaEnvironment->callStaticVoidMethod(
|
||||
"com/sourcetrail/gradle/InfoRetriever",
|
||||
"copyTestCompileLibs",
|
||||
utility::encodeToUtf8(projectDirectoryPath.wstr()),
|
||||
utility::encodeToUtf8(gradleInitScriptPath.wstr()),
|
||||
utility::encodeToUtf8(outputDirectoryPath.wstr())
|
||||
);
|
||||
}
|
||||
|
||||
return success;
|
||||
@@ -50,17 +62,23 @@ namespace utility
|
||||
|
||||
std::vector<FilePath> gradleGetAllSourceDirectories(const FilePath& projectDirectoryPath, bool addTestDirectories)
|
||||
{
|
||||
const std::string gradleInitScriptPath = ResourcePaths::getJavaPath().str() + "gradle/init.gradle";
|
||||
const FilePath gradleInitScriptPath = ResourcePaths::getJavaPath().concatenate(L"gradle/init.gradle");
|
||||
|
||||
setJavaHomeVariableIfNotExists();
|
||||
utility::prepareJavaEnvironment();
|
||||
|
||||
std::set<std::string> uncheckedDirectories;
|
||||
std::set<std::wstring> uncheckedDirectories;
|
||||
{
|
||||
std::shared_ptr<JavaEnvironment> javaEnvironment = JavaEnvironmentFactory::getInstance()->createEnvironment();
|
||||
{
|
||||
std::string output = "";
|
||||
javaEnvironment->callStaticStringMethod("com/sourcetrail/gradle/InfoRetriever", "getMainSrcDirs", output, projectDirectoryPath.str(), gradleInitScriptPath);
|
||||
javaEnvironment->callStaticStringMethod(
|
||||
"com/sourcetrail/gradle/InfoRetriever",
|
||||
"getMainSrcDirs",
|
||||
output,
|
||||
utility::encodeToUtf8(projectDirectoryPath.wstr()),
|
||||
utility::encodeToUtf8(gradleInitScriptPath.wstr())
|
||||
);
|
||||
|
||||
if (utility::isPrefix("[ERROR]", utility::trim(output)))
|
||||
{
|
||||
@@ -75,14 +93,20 @@ namespace utility
|
||||
|
||||
for (const std::string mainSrcDir : utility::splitToVector(output, ";"))
|
||||
{
|
||||
uncheckedDirectories.insert(mainSrcDir);
|
||||
uncheckedDirectories.insert(utility::decodeFromUtf8(mainSrcDir));
|
||||
}
|
||||
}
|
||||
|
||||
if (addTestDirectories)
|
||||
{
|
||||
std::string output = "";
|
||||
javaEnvironment->callStaticStringMethod("com/sourcetrail/gradle/InfoRetriever", "getTestSrcDirs", output, projectDirectoryPath.str(), gradleInitScriptPath);
|
||||
javaEnvironment->callStaticStringMethod(
|
||||
"com/sourcetrail/gradle/InfoRetriever",
|
||||
"getTestSrcDirs",
|
||||
output,
|
||||
utility::encodeToUtf8(projectDirectoryPath.wstr()),
|
||||
utility::encodeToUtf8(gradleInitScriptPath.wstr())
|
||||
);
|
||||
|
||||
if (utility::isPrefix("[ERROR]", utility::trim(output)))
|
||||
{
|
||||
@@ -97,13 +121,13 @@ namespace utility
|
||||
|
||||
for (const std::string testSrcDir : utility::splitToVector(output, ";"))
|
||||
{
|
||||
uncheckedDirectories.insert(testSrcDir);
|
||||
uncheckedDirectories.insert(utility::decodeFromUtf8(testSrcDir));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<FilePath> directories;
|
||||
for (const std::string& uncheckedDirectory: uncheckedDirectories)
|
||||
for (const std::wstring& uncheckedDirectory: uncheckedDirectories)
|
||||
{
|
||||
FilePath uncheckedDirectoryPath(uncheckedDirectory);
|
||||
if (uncheckedDirectoryPath.exists())
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace utility
|
||||
|
||||
const std::string output = utility::executeProcessUntilNoOutput(
|
||||
"\"" + mavenPath.str() + "\" generate-sources",
|
||||
projectDirectoryPath.str(),
|
||||
projectDirectoryPath,
|
||||
60000
|
||||
);
|
||||
return !output.empty();
|
||||
@@ -80,7 +80,7 @@ namespace utility
|
||||
|
||||
const std::string output = utility::executeProcessUntilNoOutput(
|
||||
"\"" + mavenPath.str() + "\" dependency:copy-dependencies -DoutputDirectory=" + outputDirectoryPath.str(),
|
||||
projectDirectoryPath.str(),
|
||||
projectDirectoryPath,
|
||||
60000
|
||||
);
|
||||
|
||||
@@ -107,7 +107,7 @@ namespace utility
|
||||
|
||||
std::shared_ptr<TextAccess> outputAccess = TextAccess::createFromString(utility::executeProcessUntilNoOutput(
|
||||
"\"" + mavenPath.str() + "\" help:effective-pom",
|
||||
projectDirectoryPath.str(),
|
||||
projectDirectoryPath,
|
||||
60000
|
||||
));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user