From 084bc3dc439c65e3686f0844cfd872be74d6e17a Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Tue, 13 Aug 2019 17:22:09 +0200 Subject: [PATCH] logic: Save maven effective-pom output to file instead of using console output to avoid issues with color codes (issue #705) --- .gitignore | 2 + src/lib_java/project/SourceGroupJavaMaven.cpp | 8 +++- src/lib_java/utility/utilityMaven.cpp | 48 +++++-------------- src/lib_java/utility/utilityMaven.h | 2 +- src/test/UtilityMavenTestSuite.h | 8 ++-- 5 files changed, 25 insertions(+), 43 deletions(-) diff --git a/.gitignore b/.gitignore index 590690fe..050e95f3 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,8 @@ /bin/test/data/TestSettings.xml /bin/test/data/CommandlineTestSuite/settings.xml /bin/test/data/ConfigManagerTestSuite/temp.xml +/bin/test/data/UtilityMavenTestSuite/effective-pom.xml +/bin/test/data/SourceGroupTestSuite/java_maven/input/sourcetrail_dependencies /java_indexer/target/ diff --git a/src/lib_java/project/SourceGroupJavaMaven.cpp b/src/lib_java/project/SourceGroupJavaMaven.cpp index c3c871ea..891b93b7 100644 --- a/src/lib_java/project/SourceGroupJavaMaven.cpp +++ b/src/lib_java/project/SourceGroupJavaMaven.cpp @@ -42,7 +42,13 @@ std::vector SourceGroupJavaMaven::getAllSourcePaths() const const FilePath mavenPath(ApplicationSettings::getInstance()->getMavenPath()); const FilePath projectRootPath = m_settings->getMavenProjectFilePathExpandedAndAbsolute().getParentDirectory(); - sourcePaths = utility::mavenGetAllDirectoriesFromEffectivePom(mavenPath, projectRootPath, m_settings->getShouldIndexMavenTests()); + + sourcePaths = utility::mavenGetAllDirectoriesFromEffectivePom( + mavenPath, + projectRootPath, + m_settings->getMavenDependenciesDirectoryPath(), + m_settings->getShouldIndexMavenTests() + ); dialogView->hideUnknownProgressDialog(); } diff --git a/src/lib_java/utility/utilityMaven.cpp b/src/lib_java/utility/utilityMaven.cpp index aab51a89..c7ab3d94 100644 --- a/src/lib_java/utility/utilityMaven.cpp +++ b/src/lib_java/utility/utilityMaven.cpp @@ -124,12 +124,14 @@ namespace utility } std::vector mavenGetAllDirectoriesFromEffectivePom( - const FilePath& mavenPath, const FilePath& projectDirectoryPath, bool addTestDirectories) + const FilePath& mavenPath, const FilePath& projectDirectoryPath, const FilePath& outputDirectoryPath, bool addTestDirectories) { utility::setJavaHomeVariableIfNotExists(); + FilePath outputPath = outputDirectoryPath.getConcatenated(FilePath("/effective-pom.xml")); + std::shared_ptr outputAccess = TextAccess::createFromString(utility::executeProcessUntilNoOutput( - "\"" + mavenPath.str() + "\" help:effective-pom -B", + "\"" + mavenPath.str() + "\" help:effective-pom -Doutput=\"" + outputPath.str(), projectDirectoryPath, 60000 )); @@ -139,43 +141,15 @@ namespace utility { MessageStatus(errorMessage, true, false).dispatch(); Application::getInstance()->handleDialog(errorMessage); - return std::vector(); + return {}; + } + else if (!outputPath.exists()) + { + LOG_ERROR("Maven effective-pom didn't generate an output file: " + outputPath.str()); + return {}; } - size_t startLine = 0; - for (size_t i = 1; i <= outputAccess->getLineCount(); i++) - { - if (utility::isPrefix("<", utility::trim(outputAccess->getLine(i)))) - { - startLine = i; - break; - } - } - - size_t endLine = outputAccess->getLineCount(); - for (size_t i = outputAccess->getLineCount(); i > 0 ; i--) - { - if (utility::isPrefix("<", utility::trim(outputAccess->getLine(i)))) - { - endLine = i; - break; - } - } - for (size_t i = endLine + 1; i <= outputAccess->getLineCount(); i++) - { - if (utility::isPrefix("[", utility::trim(outputAccess->getLine(i)))) - { - break; - } - endLine = i; - } - - std::string xmlContent = ""; - for (const std::string& line: outputAccess->getLines(startLine, endLine)) - { - xmlContent.append(line); - } - std::shared_ptr xmlAccess = TextAccess::createFromString(xmlContent); + std::shared_ptr xmlAccess = TextAccess::createFromFile(outputPath); std::vector uncheckedDirectories; fetchDirectories(uncheckedDirectories, xmlAccess, diff --git a/src/lib_java/utility/utilityMaven.h b/src/lib_java/utility/utilityMaven.h index 1c7bf499..bc1a4241 100644 --- a/src/lib_java/utility/utilityMaven.h +++ b/src/lib_java/utility/utilityMaven.h @@ -12,7 +12,7 @@ namespace utility bool mavenCopyDependencies( const FilePath& mavenPath, const FilePath& projectDirectoryPath, const FilePath& outputDirectoryPath); std::vector mavenGetAllDirectoriesFromEffectivePom( - const FilePath& mavenPath, const FilePath& projectDirectoryPath, bool addTestDirectories); + const FilePath& mavenPath, const FilePath& projectDirectoryPath, const FilePath& outputDirectoryPath, bool addTestDirectories); } #endif // UTILITY_MAVEN_H diff --git a/src/test/UtilityMavenTestSuite.h b/src/test/UtilityMavenTestSuite.h index 1e8a14b5..8b3557de 100644 --- a/src/test/UtilityMavenTestSuite.h +++ b/src/test/UtilityMavenTestSuite.h @@ -21,7 +21,7 @@ public: if (!mavenPathDetector->getPaths().empty()) { std::vector result = utility::mavenGetAllDirectoriesFromEffectivePom( - mavenPathDetector->getPaths().front(), FilePath(L"data/UtilityMavenTestSuite/simple_maven_project"), false + mavenPathDetector->getPaths().front(), FilePath(L"data/UtilityMavenTestSuite/simple_maven_project"), FilePath(L"data/UtilityMavenTestSuite").makeAbsolute(), false ); TS_ASSERT(utility::containsElement( @@ -42,7 +42,7 @@ public: if (!mavenPathDetector->getPaths().empty()) { std::vector result = utility::mavenGetAllDirectoriesFromEffectivePom( - mavenPathDetector->getPaths().front(), FilePath(L"data/UtilityMavenTestSuite/simple_maven_project"), true + mavenPathDetector->getPaths().front(), FilePath(L"data/UtilityMavenTestSuite/simple_maven_project"), FilePath(L"data/UtilityMavenTestSuite").makeAbsolute(), true ); TS_ASSERT(utility::containsElement( @@ -63,7 +63,7 @@ public: if (!mavenPathDetector->getPaths().empty()) { std::vector result = utility::mavenGetAllDirectoriesFromEffectivePom( - mavenPathDetector->getPaths().front(), FilePath(L"data/UtilityMavenTestSuite/nested_maven_project"), false + mavenPathDetector->getPaths().front(), FilePath(L"data/UtilityMavenTestSuite/nested_maven_project"), FilePath(L"data/UtilityMavenTestSuite").makeAbsolute(), false ); TS_ASSERT(utility::containsElement( @@ -92,7 +92,7 @@ public: if (!mavenPathDetector->getPaths().empty()) { std::vector result = utility::mavenGetAllDirectoriesFromEffectivePom( - mavenPathDetector->getPaths().front(), FilePath(L"data/UtilityMavenTestSuite/nested_maven_project"), true + mavenPathDetector->getPaths().front(), FilePath(L"data/UtilityMavenTestSuite/nested_maven_project"), FilePath(L"data/UtilityMavenTestSuite").makeAbsolute(), true ); TS_ASSERT(utility::containsElement(