From 045a3a4e50ff6b3d0d60b5a08c89e32193d6657b Mon Sep 17 00:00:00 2001 From: mlangkabel Date: Tue, 2 Apr 2019 15:54:17 +0200 Subject: [PATCH] logic: Added "Empty Python" Sourcegroup to project setup The respective release of the SourcetrailPythonIndexer project is automatically downloaded from GitHub when the setup script is executed. --- .gitignore | 3 +- CMakeLists.txt | 48 ++++++++++++- .../dockerfiles/linux/centos6_32/Dockerfile | 2 +- .../linux/centos6_64_base/Dockerfile | 2 +- deployment/windows/wixSetup/build.sh | 9 +-- deployment/windows/wixSetup/sourcetrail.wxs | 2 +- script/clean.sh | 3 +- script/download_python_indexer.sh | 70 +++++++++++++++++++ script/setup.sh | 13 ++-- setup/MacOSX/bundle_install.sh.in | 1 + src/app/main.cpp | 5 +- src/lib/CMakeLists.txt | 2 + src/lib/data/indexer/IndexerCommandType.cpp | 3 + src/lib/data/indexer/IndexerCommandType.h | 1 + src/lib/project/Project.cpp | 3 +- src/lib/settings/LanguageType.cpp | 16 +++-- src/lib/settings/LanguageType.h | 1 + src/lib/settings/ProjectSettings.cpp | 4 ++ .../SourceGroupSettingsPythonEmpty.cpp | 54 ++++++++++++++ .../settings/SourceGroupSettingsPythonEmpty.h | 30 ++++++++ src/lib/settings/SourceGroupType.cpp | 8 +++ src/lib/settings/SourceGroupType.h | 1 + src/lib/utility/ResourcePaths.cpp | 5 ++ src/lib/utility/ResourcePaths.h | 1 + src/lib_cxx/project/SourceGroupCxxEmpty.cpp | 6 +- .../project_wizzard/QtProjectWizzard.cpp | 29 +++++++- .../QtProjectWizzardContentPaths.cpp | 6 ++ .../QtProjectWizzardContentSelect.cpp | 4 ++ src/lib_java/data/indexer/IndexerJava.cpp | 6 +- src/lib_python/CMakeLists.txt | 9 +++ .../SourceGroupFactoryModulePython.cpp | 26 +++++++ .../project/SourceGroupFactoryModulePython.h | 13 ++++ .../project/SourceGroupPythonEmpty.cpp | 66 +++++++++++++++++ .../project/SourceGroupPythonEmpty.h | 27 +++++++ 34 files changed, 450 insertions(+), 29 deletions(-) create mode 100755 script/download_python_indexer.sh create mode 100644 src/lib/settings/SourceGroupSettingsPythonEmpty.cpp create mode 100644 src/lib/settings/SourceGroupSettingsPythonEmpty.h create mode 100644 src/lib_python/CMakeLists.txt create mode 100644 src/lib_python/project/SourceGroupFactoryModulePython.cpp create mode 100644 src/lib_python/project/SourceGroupFactoryModulePython.h create mode 100644 src/lib_python/project/SourceGroupPythonEmpty.cpp create mode 100644 src/lib_python/project/SourceGroupPythonEmpty.h diff --git a/.gitignore b/.gitignore index efef3fa3..3de6104d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,9 @@ /distr/ /deps/ -/bin/app/data/projects/ignored/ /bin/app/data/java/lib/ +/bin/app/data/projects/ignored/ +/bin/app/data/python/ /bin/app/user/log/ /bin/app/user/ApplicationSettings.xml /bin/app/user/window_settings.ini diff --git a/CMakeLists.txt b/CMakeLists.txt index f2863384..6c9c066a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,7 @@ set(LIB_UTILITY_PROJECT_NAME "${PROJECT_NAME}_lib_utility") set(LIB_GUI_PROJECT_NAME "${PROJECT_NAME}_lib_gui") set(LIB_CXX_PROJECT_NAME "${PROJECT_NAME}_lib_cxx") set(LIB_JAVA_PROJECT_NAME "${PROJECT_NAME}_lib_java") +set(LIB_PYTHON_PROJECT_NAME "${PROJECT_NAME}_lib_python") set(LIB_PROJECT_NAME "${PROJECT_NAME}_lib") set(LICENSE_GENERATOR_PROJECT_NAME "${PROJECT_NAME}_license_generator") set(TEST_PROJECT_NAME "${PROJECT_NAME}_test") @@ -241,6 +242,7 @@ add_subdirectory(src/lib) add_subdirectory(src/lib_cxx) add_subdirectory(src/lib_gui) add_subdirectory(src/lib_java) +add_subdirectory(src/lib_python) add_subdirectory(src/lib_license) add_subdirectory(src/lib_utility) add_subdirectory(src/license_generator) @@ -406,6 +408,30 @@ add_custom_command( ) +# Lib Python --------------------------------------------------------------------- + +add_library(${LIB_PYTHON_PROJECT_NAME} ${LIB_PYTHON_FILES}) + +create_source_groups(${LIB_PYTHON_FILES}) + +set_property( + TARGET ${LIB_PYTHON_PROJECT_NAME} + PROPERTY INCLUDE_DIRECTORIES + "${LIB_PYTHON_INCLUDE_PATHS}" + "${LIB_UTILITY_INCLUDE_PATHS}" + "${LIB_INCLUDE_PATHS}" +# "${LIB_GUI_INCLUDE_PATHS}" +) + +#target_include_directories(${LIB_PYTHON_PROJECT_NAME} SYSTEM +# PUBLIC ${Boost_INCLUDE_DIRS} +#) + +#link_directories(${Boost_LIBRARY_DIRS}) + +target_link_libraries(${LIB_PYTHON_PROJECT_NAME} ${LIB_UTILITY_PROJECT_NAME} ${LIB_PROJECT_NAME}) + + # Lib Gui ---------------------------------------------------------------------- # Find includes in corresponding build directories @@ -449,6 +475,7 @@ set_property( "${LIB_INCLUDE_PATHS}" "${LIB_CXX_INCLUDE_PATHS}" "${LIB_JAVA_INCLUDE_PATHS}" + "${LIB_PYTHON_INCLUDE_PATHS}" # required for QtProjectWizzardContentPathsSource::getFilePaths() "${LIB_LICENSE_INCLUDE_PATHS}" "${CMAKE_BINARY_DIR}/src/lib_gui" "${CMAKE_BINARY_DIR}/src/lib_license" @@ -510,7 +537,14 @@ endif () create_source_groups(${INDEXER_FILES}) -target_link_libraries(${APP_INDEXER_NAME} ${LIB_GUI_PROJECT_NAME} ${LIB_CXX_PROJECT_NAME} ${LIB_JAVA_PROJECT_NAME} ${LIB_PROJECT_NAME}) +target_link_libraries( + ${APP_INDEXER_NAME} + ${LIB_PROJECT_NAME} + ${LIB_GUI_PROJECT_NAME} + ${LIB_CXX_PROJECT_NAME} + ${LIB_JAVA_PROJECT_NAME} + ${LIB_PYTHON_PROJECT_NAME} +) if (APPLE) find_library(CORE_FOUNDATION CoreFoundation) @@ -527,6 +561,7 @@ set_property( "${LIB_LICENSE_INCLUDE_PATHS}" "${LIB_CXX_INCLUDE_PATHS}" "${LIB_JAVA_INCLUDE_PATHS}" + "${LIB_PYTHON_INCLUDE_PATHS}" "${CMAKE_BINARY_DIR}/src/lib_gui" "${CMAKE_BINARY_DIR}/src/lib_license" ) @@ -571,7 +606,15 @@ endif () create_source_groups(${APP_FILES}) -target_link_libraries(${APP_PROJECT_NAME} ${LIB_GUI_PROJECT_NAME} ${LIB_CXX_PROJECT_NAME} ${LIB_JAVA_PROJECT_NAME} ${LIB_PROJECT_NAME} ${LIB_LICENSE_PROJECT_NAME}) +target_link_libraries( + ${APP_PROJECT_NAME} + ${LIB_PROJECT_NAME} + ${LIB_GUI_PROJECT_NAME} + ${LIB_LICENSE_PROJECT_NAME} + ${LIB_CXX_PROJECT_NAME} + ${LIB_JAVA_PROJECT_NAME} + ${LIB_PYTHON_PROJECT_NAME} +) set_property( TARGET ${APP_PROJECT_NAME} @@ -583,6 +626,7 @@ set_property( "${LIB_LICENSE_INCLUDE_PATHS}" "${LIB_CXX_INCLUDE_PATHS}" "${LIB_JAVA_INCLUDE_PATHS}" + "${LIB_PYTHON_INCLUDE_PATHS}" "${CMAKE_BINARY_DIR}/src/lib_gui" "${CMAKE_BINARY_DIR}/src/lib_license" ) diff --git a/deployment/dockerfiles/linux/centos6_32/Dockerfile b/deployment/dockerfiles/linux/centos6_32/Dockerfile index 77c05e9d..4d86f1f6 100755 --- a/deployment/dockerfiles/linux/centos6_32/Dockerfile +++ b/deployment/dockerfiles/linux/centos6_32/Dockerfile @@ -23,7 +23,7 @@ yum -y install devtoolset-4-gcc devtoolset-4-gcc-c++ devtoolset-4-binutils \ gperftools gperf libicu-devel boost-devel \ libxslt-devel docbook-style-xsl.noarch python27 \ xz mesa-libEGL-devel mesa-libGL-devel glib-devel \ - java-1.8.0-openjdk-devel ccache re2c ImageMagick vim lftp && \ + java-1.8.0-openjdk-devel ccache re2c ImageMagick vim lftp unzip && \ yum clean all # CMake and Maven diff --git a/deployment/dockerfiles/linux/centos6_64_base/Dockerfile b/deployment/dockerfiles/linux/centos6_64_base/Dockerfile index c3452a6c..c6e55671 100755 --- a/deployment/dockerfiles/linux/centos6_64_base/Dockerfile +++ b/deployment/dockerfiles/linux/centos6_64_base/Dockerfile @@ -15,7 +15,7 @@ yum -y install wget devtoolset-4-gcc devtoolset-4-gcc-c++ devtoolset-4-binutils gperftools.x86_64 gperf.x86_64 libicu-devel.x86_64 boost-devel.x86_64 \ libxslt-devel.x86_64 python27.x86_64 \ xz mesa-libEGL-devel mesa-libGL-devel glib-devel git19 \ - java-1.8.0-openjdk-devel re2c ccache ImageMagick vim lftp && \ + java-1.8.0-openjdk-devel re2c ccache ImageMagick vim lftp unzip && \ yum clean all # CMake diff --git a/deployment/windows/wixSetup/build.sh b/deployment/windows/wixSetup/build.sh index 30773c7f..9eb9dee3 100644 --- a/deployment/windows/wixSetup/build.sh +++ b/deployment/windows/wixSetup/build.sh @@ -54,23 +54,22 @@ DATA_COLOR_SCHEMES_DIR=$ROOT_DIR/bin/app/data/color_schemes DATA_CXX_DIR=$ROOT_DIR/bin/app/data/cxx DATA_FALLBACK_DIR=$ROOT_DIR/bin/app/data/fallback DATA_FONTS_DIR=$ROOT_DIR/bin/app/data/fonts - DATA_GUI_DIR=$ROOT_DIR/bin/app/data/gui DATA_JAVA_DIR=$ROOT_DIR/bin/app/data/java +DATA_PYTHON_DIR=$ROOT_DIR/bin/app/data/python DATA_SYNTAX_HIGHLIGHTING_RULES_DIR=$ROOT_DIR/bin/app/data/syntax_highlighting_rules + heat.exe dir $DATA_COLOR_SCHEMES_DIR -cg DataColorSchemesComponentGroup -var var.DataColorSchemesSourceDir -out build/dataColorSchemes.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt heat.exe dir $DATA_CXX_DIR -cg DataCxxComponentGroup -var var.DataCxxSourceDir -out build/dataCxx.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt heat.exe dir $DATA_FALLBACK_DIR -cg DataFallbackComponentGroup -var var.DataFallbackSourceDir -out build/dataFallback.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt heat.exe dir $DATA_FONTS_DIR -cg DataFontsComponentGroup -var var.DataFontsSourceDir -out build/dataFonts.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt - - heat.exe dir $DATA_GUI_DIR -cg DataGuiComponentGroup -var var.DataGuiSourceDir -out build/dataGui.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt heat.exe dir $DATA_JAVA_DIR -cg DataJavaComponentGroup -var var.DataJavaSourceDir -out build/dataJava.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt +heat.exe dir $DATA_PYTHON_DIR -cg DataPythonComponentGroup -var var.DataPythonSourceDir -out build/dataPython.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt heat.exe dir $DATA_SYNTAX_HIGHLIGHTING_RULES_DIR -cg DataSyntaxHighlightingRulesComponentGroup -var var.DataSyntaxHighlightingRulesSourceDir -out build/dataSyntaxHighlightingRules.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt - candle.exe -dProductVersion="$VERSION_STRING" -dProductGuid="$PRODUCT_GUID" -dWin64="$WIN_64" -arch $X_ARCH -out build/ \ -dSampleJavaparserSourceDir="$SAMPLE_JAVAPARSER_DIR" build/sampleJavaparser.wxs \ -dSampleTictactoeSourceDir="$SAMPLE_TICTACTOE_DIR" build/sampleTictactoe.wxs \ @@ -81,6 +80,7 @@ candle.exe -dProductVersion="$VERSION_STRING" -dProductGuid="$PRODUCT_GUID" -dWi -dDataFontsSourceDir="$DATA_FONTS_DIR" build/dataFonts.wxs \ -dDataGuiSourceDir="$DATA_GUI_DIR" build/dataGui.wxs \ -dDataJavaSourceDir="$DATA_JAVA_DIR" build/dataJava.wxs \ + -dDataPythonSourceDir="$DATA_PYTHON_DIR" build/dataPython.wxs \ -dDataSyntaxHighlightingRulesSourceDir="$DATA_SYNTAX_HIGHLIGHTING_RULES_DIR" build/dataSyntaxHighlightingRules.wxs \ sourcetrail.wxs customActions.wxs dialogShortcuts.wxs installDir.wxs appDataDir.wxs \ > build/compileLog.txt @@ -96,6 +96,7 @@ light.exe -ext WixUIExtension \ build/dataFonts.wixobj \ build/dataGui.wixobj \ build/dataJava.wixobj \ + build/dataPython.wixobj \ build/dataSyntaxHighlightingRules.wixobj \ build/sourcetrail.wixobj build/customActions.wixobj build/dialogShortcuts.wixobj build/installDir.wixobj build/appDataDir.wixobj -out build/sourcetrail.msi \ > build/linkLog.txt diff --git a/deployment/windows/wixSetup/sourcetrail.wxs b/deployment/windows/wixSetup/sourcetrail.wxs index 0fba8caf..975052cf 100644 --- a/deployment/windows/wixSetup/sourcetrail.wxs +++ b/deployment/windows/wixSetup/sourcetrail.wxs @@ -254,9 +254,9 @@ - + diff --git a/script/clean.sh b/script/clean.sh index 0178737e..e7c66fa6 100755 --- a/script/clean.sh +++ b/script/clean.sh @@ -24,7 +24,7 @@ fi ROOT_DIR=$ROOT_DIR/.. -# Enter masterproject directory +# Enter sourcetrail root directory cd $ROOT_DIR/ if [ $PLATFORM == "Windows" ]; then @@ -41,6 +41,7 @@ if [ $PLATFORM == "Windows" ]; then fi # Remove folders and contents +rm -rf bin/app/data/python rm -rf java_indexer/bin rm -rf build diff --git a/script/download_python_indexer.sh b/script/download_python_indexer.sh new file mode 100755 index 00000000..1e25330e --- /dev/null +++ b/script/download_python_indexer.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +SOURCETRAIL_PYTHON_INDEXER_VERSION="v0_db23_p2" + +# Determine current platform +PLATFORM='unknown' +if [ "$(uname)" == "Darwin" ]; then + PLATFORM='osx' +elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then + PLATFORM='linux' +elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then + PLATFORM='windows' +fi + +PACKAGE_NAME="SourcetrailPythonIndexer_${SOURCETRAIL_PYTHON_INDEXER_VERSION}-${PLATFORM}" +PACKAGE_FILE_NAME="${PACKAGE_NAME}.zip" +PACKAGE_URL="https://github.com/CoatiSoftware/SourcetrailPythonIndexer/releases/download/${SOURCETRAIL_PYTHON_INDEXER_VERSION}/${PACKAGE_FILE_NAME}" +TEMP_PATH="build/temp" +TARGET_PATH="bin/app/data/python" + + +ABORT="\033[31mAbort:\033[00m" +SUCCESS="\033[32mSuccess:\033[00m" +INFO="\033[33mInfo:\033[00m" + +if [ $PLATFORM == "windows" ]; then + ORIGINAL_PATH_TO_SCRIPT="${0}" + CLEANED_PATH_TO_SCRIPT="${ORIGINAL_PATH_TO_SCRIPT//\\//}" + ROOT_DIR=`dirname "$CLEANED_PATH_TO_SCRIPT"` +else + ROOT_DIR="$( cd "$( dirname "$0" )" && pwd )" +fi + +ROOT_DIR=$ROOT_DIR/.. + +# Enter main directory +cd $ROOT_DIR/ + +mkdir -p $TEMP_PATH + +echo -e $INFO "starting to download $PACKAGE_FILE_NAME" + +if [ $PLATFORM == "linux" ]; then + wget -O $TEMP_PATH/$PACKAGE_FILE_NAME $PACKAGE_URL +elif [ $PLATFORM == "osx" ]; then + wget -O $TEMP_PATH/$PACKAGE_FILE_NAME $PACKAGE_URL +elif [ $PLATFORM == "windows" ]; then + certutil.exe -urlcache -split -f $PACKAGE_URL $TEMP_PATH/$PACKAGE_FILE_NAME +fi + +echo -e $INFO "finished downloading $PACKAGE_FILE_NAME" + + +if [ $PLATFORM == "linux" ]; then + unzip -d $TEMP_PATH $TEMP_PATH/$PACKAGE_FILE_NAME +elif [ $PLATFORM == "osx" ]; then + unzip -d $TEMP_PATH $TEMP_PATH/$PACKAGE_FILE_NAME +elif [ $PLATFORM == "windows" ]; then + winrar x $TEMP_PATH/$PACKAGE_FILE_NAME $TEMP_PATH +fi + + +echo -e $INFO "clearing $TARGET_PATH" +rm -rf $TARGET_PATH +mkdir -p $TARGET_PATH +cp -r $TEMP_PATH/$PACKAGE_NAME/* $TARGET_PATH + + +echo -e $INFO "clearing temporary data at $TEMP_PATH" +rm -rf $TEMP_PATH diff --git a/script/setup.sh b/script/setup.sh index 9a4881c0..da70c429 100755 --- a/script/setup.sh +++ b/script/setup.sh @@ -34,10 +34,9 @@ echo -e $INFO "install git settings" git config commit.template setup/git/git_commit_template.txt git config color.ui true -if [ -d ".git/hooks" ] -then -cp setup/git/git_pre_commit_hook.sh .git/hooks/pre-commit -cp setup/git/git_pre_push_hook.sh .git/hooks/pre-push +if [ -d ".git/hooks" ]; then + cp setup/git/git_pre_commit_hook.sh .git/hooks/pre-commit + cp setup/git/git_pre_push_hook.sh .git/hooks/pre-push fi # Create Debug and Release folders @@ -102,6 +101,12 @@ else mkdir -p build/Release/test fi +if [ $PLATFORM == "Windows" ]; then + sh script/download_python_indexer.sh +else + MY_PATH=`dirname "$0"` + $MY_PATH/download_python_indexer.sh +fi if [ $PLATFORM == "Windows" ]; then echo -e $INFO "creating program icon" diff --git a/setup/MacOSX/bundle_install.sh.in b/setup/MacOSX/bundle_install.sh.in index 9e9ed598..d0793290 100755 --- a/setup/MacOSX/bundle_install.sh.in +++ b/setup/MacOSX/bundle_install.sh.in @@ -75,6 +75,7 @@ cp -R ../../../bin/app/data/syntax_highlighting_rules $RES_DIR/data/syntax_highl cp -R ../../../bin/app/data/fonts $RES_DIR/data/fonts cp -R ../../../bin/app/data/gui $RES_DIR/data/gui cp -R ../../../bin/app/data/java $RES_DIR/data/java +cp -R ../../../bin/app/data/python $RES_DIR/data/python cp -R ../../../bin/app/data/fallback $RES_DIR/data/fallback cp -R ../../../bin/app/user/projects $RES_DIR/data/fallback/projects diff --git a/src/app/main.cpp b/src/app/main.cpp index e91be77f..a10201b8 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -9,6 +9,7 @@ #include "SourceGroupFactory.h" #include "SourceGroupFactoryModuleCxx.h" #include "SourceGroupFactoryModuleJava.h" +#include "SourceGroupFactoryModulePython.h" #include "SourceGroupFactoryModuleCustom.h" #include "QtNetworkFactory.h" #include "QtApplication.h" @@ -46,7 +47,6 @@ void setupLogging() LogManager* logManager = LogManager::getInstance().get(); std::shared_ptr consoleLogger = std::make_shared(); - // consoleLogger->setLogLevel(Logger::LOG_WARNINGS | Logger::LOG_ERRORS); consoleLogger->setLogLevel(Logger::LOG_ALL); logManager->addLogger(consoleLogger); @@ -186,10 +186,11 @@ void addLanguagePackages() { SourceGroupFactory::getInstance()->addModule(std::make_shared()); SourceGroupFactory::getInstance()->addModule(std::make_shared()); + SourceGroupFactory::getInstance()->addModule(std::make_shared()); SourceGroupFactory::getInstance()->addModule(std::make_shared()); - LanguagePackageManager::getInstance()->addPackage(std::make_shared()); LanguagePackageManager::getInstance()->addPackage(std::make_shared()); + LanguagePackageManager::getInstance()->addPackage(std::make_shared()); } QCoreApplication* createApplication(int &argc, char *argv[], bool noGUI = false) diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 0f9a7fe6..e91597b4 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -360,6 +360,8 @@ add_files( settings/SourceGroupSettingsJavaMaven.h settings/SourceGroupSettingsJavaSonargraph.cpp settings/SourceGroupSettingsJavaSonargraph.h + settings/SourceGroupSettingsPythonEmpty.cpp + settings/SourceGroupSettingsPythonEmpty.h settings/SourceGroupSettingsWithClasspath.cpp settings/SourceGroupSettingsWithClasspath.h settings/SourceGroupSettingsWithCppStandard.cpp diff --git a/src/lib/data/indexer/IndexerCommandType.cpp b/src/lib/data/indexer/IndexerCommandType.cpp index 0e48310e..dfe774f8 100644 --- a/src/lib/data/indexer/IndexerCommandType.cpp +++ b/src/lib/data/indexer/IndexerCommandType.cpp @@ -8,6 +8,8 @@ std::string indexerCommandTypeToString(IndexerCommandType type) return "indexer_command_cxx"; case INDEXER_COMMAND_JAVA: return "indexer_command_java"; + case INDEXER_COMMAND_PYTHON: + return "indexer_command_python"; case INDEXER_COMMAND_CUSTOM: return "indexer_command_custom"; default: @@ -20,6 +22,7 @@ IndexerCommandType stringToIndexerCommandType(const std::string& s) { if (s == indexerCommandTypeToString(INDEXER_COMMAND_CXX)) return INDEXER_COMMAND_CXX; if (s == indexerCommandTypeToString(INDEXER_COMMAND_JAVA)) return INDEXER_COMMAND_JAVA; + if (s == indexerCommandTypeToString(INDEXER_COMMAND_PYTHON)) return INDEXER_COMMAND_PYTHON; if (s == indexerCommandTypeToString(INDEXER_COMMAND_CUSTOM)) return INDEXER_COMMAND_CUSTOM; return INDEXER_COMMAND_UNKNOWN; } diff --git a/src/lib/data/indexer/IndexerCommandType.h b/src/lib/data/indexer/IndexerCommandType.h index 4541bd20..24f425cd 100644 --- a/src/lib/data/indexer/IndexerCommandType.h +++ b/src/lib/data/indexer/IndexerCommandType.h @@ -8,6 +8,7 @@ enum IndexerCommandType INDEXER_COMMAND_UNKNOWN, INDEXER_COMMAND_CXX, INDEXER_COMMAND_JAVA, + INDEXER_COMMAND_PYTHON, INDEXER_COMMAND_CUSTOM }; diff --git a/src/lib/project/Project.cpp b/src/lib/project/Project.cpp index d3654be5..dec299ce 100644 --- a/src/lib/project/Project.cpp +++ b/src/lib/project/Project.cpp @@ -499,7 +499,8 @@ void Project::buildIndex(RefreshInfo info, std::shared_ptr dialogVie { if (sourceGroup->getStatus() == SOURCE_GROUP_STATUS_ENABLED) { - if (sourceGroup->getType() == SOURCE_GROUP_CUSTOM_COMMAND) + if (sourceGroup->getType() == SOURCE_GROUP_CUSTOM_COMMAND || + sourceGroup->getType() == SOURCE_GROUP_PYTHON_EMPTY) { customIndexerCommandProvider->addProvider(sourceGroup->getIndexerCommandProvider(info.filesToIndex)); } diff --git a/src/lib/settings/LanguageType.cpp b/src/lib/settings/LanguageType.cpp index 97209d0c..059a089f 100644 --- a/src/lib/settings/LanguageType.cpp +++ b/src/lib/settings/LanguageType.cpp @@ -10,6 +10,8 @@ std::string languageTypeToString(LanguageType t) return "C++"; case LANGUAGE_JAVA: return "Java"; + case LANGUAGE_PYTHON: + return "Python"; case LANGUAGE_CUSTOM: return "Custom"; case LANGUAGE_UNKNOWN: @@ -20,19 +22,23 @@ std::string languageTypeToString(LanguageType t) LanguageType stringToLanguageType(std::string s) { - if (s == "C") + if (s == languageTypeToString(LANGUAGE_C)) { return LANGUAGE_C; } - else if (s == "C++") + else if (s == languageTypeToString(LANGUAGE_CPP)) { return LANGUAGE_CPP; } - else if (s == "Java") + else if (s == languageTypeToString(LANGUAGE_JAVA)) { return LANGUAGE_JAVA; } - else if (s == "Custom") + else if (s == languageTypeToString(LANGUAGE_PYTHON)) + { + return LANGUAGE_PYTHON; + } + else if (s == languageTypeToString(LANGUAGE_CUSTOM)) { return LANGUAGE_CUSTOM; } @@ -63,6 +69,8 @@ LanguageType getLanguageTypeForSourceGroupType(SourceGroupType t) return LANGUAGE_JAVA; case SOURCE_GROUP_JAVA_SONARGRAPH: return LANGUAGE_JAVA; + case SOURCE_GROUP_PYTHON_EMPTY: + return LANGUAGE_PYTHON; case SOURCE_GROUP_CUSTOM_COMMAND: return LANGUAGE_CUSTOM; default: diff --git a/src/lib/settings/LanguageType.h b/src/lib/settings/LanguageType.h index 543114cc..2fb5844f 100644 --- a/src/lib/settings/LanguageType.h +++ b/src/lib/settings/LanguageType.h @@ -10,6 +10,7 @@ enum LanguageType LANGUAGE_CPP, LANGUAGE_C, LANGUAGE_JAVA, + LANGUAGE_PYTHON, LANGUAGE_CUSTOM, LANGUAGE_UNKNOWN }; diff --git a/src/lib/settings/ProjectSettings.cpp b/src/lib/settings/ProjectSettings.cpp index b86c8ff1..7c1f3ad0 100644 --- a/src/lib/settings/ProjectSettings.cpp +++ b/src/lib/settings/ProjectSettings.cpp @@ -13,6 +13,7 @@ #include "SourceGroupSettingsJavaMaven.h" #include "SourceGroupSettingsJavaGradle.h" #include "SourceGroupSettingsJavaSonargraph.h" +#include "SourceGroupSettingsPythonEmpty.h" #include "logging.h" #include "utilityString.h" #include "utilityUuid.h" @@ -196,6 +197,9 @@ std::vector> ProjectSettings::getAllSourceG case SOURCE_GROUP_JAVA_SONARGRAPH: settings = std::make_shared(id, this); break; + case SOURCE_GROUP_PYTHON_EMPTY: + settings = std::make_shared(id, this); + break; case SOURCE_GROUP_CUSTOM_COMMAND: settings = std::make_shared(id, this); break; diff --git a/src/lib/settings/SourceGroupSettingsPythonEmpty.cpp b/src/lib/settings/SourceGroupSettingsPythonEmpty.cpp new file mode 100644 index 00000000..0e1aa776 --- /dev/null +++ b/src/lib/settings/SourceGroupSettingsPythonEmpty.cpp @@ -0,0 +1,54 @@ +#include "SourceGroupSettingsPythonEmpty.h" +#include "FilePath.h" + +SourceGroupSettingsPythonEmpty::SourceGroupSettingsPythonEmpty(const std::string& id, const ProjectSettings* projectSettings) + : SourceGroupSettings(id, SOURCE_GROUP_PYTHON_EMPTY, projectSettings) +{ +} + +std::shared_ptr SourceGroupSettingsPythonEmpty::createCopy() const +{ + return std::make_shared(*this); +} + +void SourceGroupSettingsPythonEmpty::load(std::shared_ptr config) +{ + SourceGroupSettings::load(config); + + const std::string key = s_keyPrefix + getId(); + + SourceGroupSettingsWithExcludeFilters::load(config, key); + SourceGroupSettingsWithSourcePaths::load(config, key); + SourceGroupSettingsWithSourceExtensions::load(config, key); +} + +void SourceGroupSettingsPythonEmpty::save(std::shared_ptr config) +{ + SourceGroupSettings::save(config); + + const std::string key = s_keyPrefix + getId(); + + SourceGroupSettingsWithExcludeFilters::save(config, key); + SourceGroupSettingsWithSourcePaths::save(config, key); + SourceGroupSettingsWithSourceExtensions::save(config, key); +} + +bool SourceGroupSettingsPythonEmpty::equals(std::shared_ptr other) const +{ + std::shared_ptr otherJava = std::dynamic_pointer_cast(other); + + return ( + otherJava && + SourceGroupSettings::equals(other) && + SourceGroupSettingsWithExcludeFilters::equals(otherJava) && + SourceGroupSettingsWithSourcePaths::equals(otherJava) && + SourceGroupSettingsWithSourceExtensions::equals(otherJava) + ); +} + +std::vector SourceGroupSettingsPythonEmpty::getDefaultSourceExtensions() const +{ + return { + L".py" + }; +} diff --git a/src/lib/settings/SourceGroupSettingsPythonEmpty.h b/src/lib/settings/SourceGroupSettingsPythonEmpty.h new file mode 100644 index 00000000..4bab6886 --- /dev/null +++ b/src/lib/settings/SourceGroupSettingsPythonEmpty.h @@ -0,0 +1,30 @@ +#ifndef SOURCE_GROUP_SETTINGS_PYTHON_EMPTY_H +#define SOURCE_GROUP_SETTINGS_PYTHON_EMPTY_H + +#include "SourceGroupSettings.h" +#include "SourceGroupSettingsWithExcludeFilters.h" +#include "SourceGroupSettingsWithSourceExtensions.h" +#include "SourceGroupSettingsWithSourcePaths.h" + +class SourceGroupSettingsPythonEmpty + : public SourceGroupSettings + , public SourceGroupSettingsWithExcludeFilters + , public SourceGroupSettingsWithSourceExtensions + , public SourceGroupSettingsWithSourcePaths +{ +public: + SourceGroupSettingsPythonEmpty(const std::string& id, const ProjectSettings* projectSettings); + + std::shared_ptr createCopy() const override; + + void load(std::shared_ptr config) override; + void save(std::shared_ptr config) override; + + bool equals(std::shared_ptr other) const override; + +private: + std::vector getDefaultSourceExtensions() const override; + +}; + +#endif // SOURCE_GROUP_SETTINGS_PYTHON_EMPTY_H diff --git a/src/lib/settings/SourceGroupType.cpp b/src/lib/settings/SourceGroupType.cpp index 00273ed5..68c716b6 100644 --- a/src/lib/settings/SourceGroupType.cpp +++ b/src/lib/settings/SourceGroupType.cpp @@ -24,6 +24,8 @@ std::string sourceGroupTypeToString(SourceGroupType v) return "Java Source Group from Gradle"; case SOURCE_GROUP_JAVA_SONARGRAPH: return "Java from Sonargraph"; + case SOURCE_GROUP_PYTHON_EMPTY: + return "Python Source Group"; case SOURCE_GROUP_CUSTOM_COMMAND: return "Custom Command Source Group"; case SOURCE_GROUP_UNKNOWN: @@ -56,6 +58,8 @@ std::string sourceGroupTypeToProjectSetupString(SourceGroupType v) return "Java Source Group from Gradle"; case SOURCE_GROUP_JAVA_SONARGRAPH: return "Java from Sonargraph"; + case SOURCE_GROUP_PYTHON_EMPTY: + return "Empty Python Source Group"; case SOURCE_GROUP_CUSTOM_COMMAND: return "Custom Command Source Group"; case SOURCE_GROUP_UNKNOWN: @@ -106,6 +110,10 @@ SourceGroupType stringToSourceGroupType(const std::string& v) { return SOURCE_GROUP_JAVA_SONARGRAPH; } + else if (v == sourceGroupTypeToString(SOURCE_GROUP_PYTHON_EMPTY)) + { + return SOURCE_GROUP_PYTHON_EMPTY; + } else if (v == sourceGroupTypeToString(SOURCE_GROUP_CUSTOM_COMMAND)) { return SOURCE_GROUP_CUSTOM_COMMAND; diff --git a/src/lib/settings/SourceGroupType.h b/src/lib/settings/SourceGroupType.h index 0a77a9f3..e48b7e55 100644 --- a/src/lib/settings/SourceGroupType.h +++ b/src/lib/settings/SourceGroupType.h @@ -15,6 +15,7 @@ enum SourceGroupType SOURCE_GROUP_JAVA_MAVEN, SOURCE_GROUP_JAVA_GRADLE, SOURCE_GROUP_JAVA_SONARGRAPH, + SOURCE_GROUP_PYTHON_EMPTY, SOURCE_GROUP_CUSTOM_COMMAND, SOURCE_GROUP_UNKNOWN }; diff --git a/src/lib/utility/ResourcePaths.cpp b/src/lib/utility/ResourcePaths.cpp index b61c4438..e7a3aef1 100644 --- a/src/lib/utility/ResourcePaths.cpp +++ b/src/lib/utility/ResourcePaths.cpp @@ -32,6 +32,11 @@ FilePath ResourcePaths::getJavaPath() return AppPath::getAppPath().concatenate(L"data/java/"); } +FilePath ResourcePaths::getPythonPath() +{ + return AppPath::getAppPath().concatenate(L"data/python/"); +} + FilePath ResourcePaths::getCxxCompilerHeaderPath() { return AppPath::getAppPath().concatenate(L"data/cxx/include/").getCanonical(); diff --git a/src/lib/utility/ResourcePaths.h b/src/lib/utility/ResourcePaths.h index 438aff2d..a8cc1093 100644 --- a/src/lib/utility/ResourcePaths.h +++ b/src/lib/utility/ResourcePaths.h @@ -14,6 +14,7 @@ public: static FilePath getFontsPath(); static FilePath getGuiPath(); static FilePath getJavaPath(); + static FilePath getPythonPath(); static FilePath getCxxCompilerHeaderPath(); }; diff --git a/src/lib_cxx/project/SourceGroupCxxEmpty.cpp b/src/lib_cxx/project/SourceGroupCxxEmpty.cpp index 18e91099..cd9dd422 100644 --- a/src/lib_cxx/project/SourceGroupCxxEmpty.cpp +++ b/src/lib_cxx/project/SourceGroupCxxEmpty.cpp @@ -1,13 +1,13 @@ #include "SourceGroupCxxEmpty.h" -#include "CxxIndexerCommandProvider.h" -#include "IndexerCommandCxx.h" #include "ApplicationSettings.h" +#include "CxxIndexerCommandProvider.h" +#include "FileManager.h" +#include "IndexerCommandCxx.h" #include "SourceGroupSettingsCEmpty.h" #include "SourceGroupSettingsCppEmpty.h" #include "SourceGroupSettingsWithCppStandard.h" #include "SourceGroupSettingsWithCStandard.h" -#include "FileManager.h" #include "utility.h" SourceGroupCxxEmpty::SourceGroupCxxEmpty(std::shared_ptr settings) diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp index 26f59b24..178ac2a3 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp @@ -35,6 +35,7 @@ #include "SourceGroupSettingsJavaGradle.h" #include "SourceGroupSettingsJavaMaven.h" #include "SourceGroupSettingsJavaSonargraph.h" +#include "SourceGroupSettingsPythonEmpty.h" #include "MessageLoadProject.h" #include "MessageStatus.h" #include "ResourcePaths.h" @@ -404,6 +405,22 @@ namespace return pages; } + + template<> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("Indexed Paths", 750, 600); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + + return pages; + } + template<> std::vector> getSourceGroupWizzardPages() { @@ -656,7 +673,7 @@ void QtProjectWizzard::executeSourceGroupSetup(std::shared_ptr set settings, std::bind(&QtProjectWizzard::cancelSourceGroup, this), std::bind(&QtProjectWizzard::createSourceGroup, this, std::placeholders::_1) - ); + ); for (const QtSourceGroupWizzardPage& page : getSourceGroupWizzardPages()) { @@ -842,6 +859,10 @@ void QtProjectWizzard::selectedSourceGroupChanged(int index) { fillSummary(summary, settings, this); } + else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) + { + fillSummary(summary, settings, this); + } else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) { fillSummary(summary, settings, this); @@ -1100,6 +1121,12 @@ void QtProjectWizzard::selectedProjectType(SourceGroupType sourceGroupType) executeSourceGroupSetup(settings); } break; + case SOURCE_GROUP_PYTHON_EMPTY: + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + executeSourceGroupSetup(settings); + } + break; case SOURCE_GROUP_CUSTOM_COMMAND: { std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp index 8bf53bf9..00d54051 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp @@ -14,6 +14,7 @@ #include "SourceGroupCustomCommand.h" #include "SourceGroupCxxEmpty.h" #include "SourceGroupJavaEmpty.h" +#include "SourceGroupPythonEmpty.h" #include "ApplicationSettings.h" #include "ResourcePaths.h" #include "SourceGroupSettingsCustomCommand.h" @@ -22,6 +23,7 @@ #include "SourceGroupSettingsCxxCodeblocks.h" #include "SourceGroupSettingsCxxSonargraph.h" #include "SourceGroupSettingsJavaEmpty.h" +#include "SourceGroupSettingsPythonEmpty.h" #include "SourceGroupSettingsWithClasspath.h" #include "SourceGroupSettingsWithIndexedHeaderPaths.h" #include "SourceGroupSettingsWithExcludeFilters.h" @@ -261,6 +263,10 @@ std::vector QtProjectWizzardContentPathsSource::getFilePaths() const { allSourceFilePaths = SourceGroupJavaEmpty(settings).getAllSourceFilePaths(); } + else if (std::shared_ptr settings = std::dynamic_pointer_cast(m_settings)) + { + allSourceFilePaths = SourceGroupPythonEmpty(settings).getAllSourceFilePaths(); + } else if (std::shared_ptr settings = std::dynamic_pointer_cast(m_settings)) { allSourceFilePaths = SourceGroupCustomCommand(settings).getAllSourceFilePaths(); diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp index 251dd526..f6cb0f34 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp @@ -47,6 +47,7 @@ void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row) sourceGroupInfos[LANGUAGE_JAVA].push_back(SourceGroupInfo(SOURCE_GROUP_JAVA_GRADLE)); sourceGroupInfos[LANGUAGE_JAVA].push_back(SourceGroupInfo(SOURCE_GROUP_JAVA_SONARGRAPH)); sourceGroupInfos[LANGUAGE_JAVA].push_back(SourceGroupInfo(SOURCE_GROUP_JAVA_EMPTY)); + sourceGroupInfos[LANGUAGE_PYTHON].push_back(SourceGroupInfo(SOURCE_GROUP_PYTHON_EMPTY)); sourceGroupInfos[LANGUAGE_CUSTOM].push_back(SourceGroupInfo(SOURCE_GROUP_CUSTOM_COMMAND)); // define which icons should be used for which kind of source group @@ -60,6 +61,7 @@ void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row) m_sourceGroupTypeIconName[SOURCE_GROUP_JAVA_MAVEN] = L"mvn_icon"; m_sourceGroupTypeIconName[SOURCE_GROUP_JAVA_GRADLE] = L"gradle_icon"; m_sourceGroupTypeIconName[SOURCE_GROUP_JAVA_SONARGRAPH] = L"sonargraph_icon"; + m_sourceGroupTypeIconName[SOURCE_GROUP_PYTHON_EMPTY] = L"empty_icon"; m_sourceGroupTypeIconName[SOURCE_GROUP_CUSTOM_COMMAND] = L"empty_icon"; // define descriptions for each kind of Source Group @@ -85,6 +87,8 @@ void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row) m_sourceGroupTypeDescriptions[SOURCE_GROUP_JAVA_GRADLE] = "Create a new Source Group from an existing Gradle project."; m_sourceGroupTypeDescriptions[SOURCE_GROUP_JAVA_SONARGRAPH] = "Create a new Source Group from an existing Sonargraph project file."; + m_sourceGroupTypeDescriptions[SOURCE_GROUP_PYTHON_EMPTY] = "Create a new Sourcetrail Source Group by defining which Python files will be indexed. Note " + "that this Source Group type uses the SourcetrailPythonIndexer in the background."; m_sourceGroupTypeDescriptions[SOURCE_GROUP_CUSTOM_COMMAND] = "Create a new Source Group executing a custom command on each source file. " "This Source Group type can be used on SourcetrailDB binaries that add " "custom language support to Sourcetrail.

Current Database Version: " + std::to_string(SqliteIndexStorage::getStorageVersion()); diff --git a/src/lib_java/data/indexer/IndexerJava.cpp b/src/lib_java/data/indexer/IndexerJava.cpp index c552df9c..5acf66f8 100644 --- a/src/lib_java/data/indexer/IndexerJava.cpp +++ b/src/lib_java/data/indexer/IndexerJava.cpp @@ -8,9 +8,9 @@ IndexerJava::~IndexerJava() } void IndexerJava::doIndex( - std::shared_ptr indexerCommand, - std::shared_ptr parserClient, - std::shared_ptr m_indexerStateInfo + std::shared_ptr indexerCommand, + std::shared_ptr parserClient, + std::shared_ptr m_indexerStateInfo ){ JavaParser(parserClient, m_indexerStateInfo).buildIndex(indexerCommand); } diff --git a/src/lib_python/CMakeLists.txt b/src/lib_python/CMakeLists.txt new file mode 100644 index 00000000..407d60d6 --- /dev/null +++ b/src/lib_python/CMakeLists.txt @@ -0,0 +1,9 @@ + +add_files( + LIB_PYTHON + + project/SourceGroupFactoryModulePython.h + project/SourceGroupFactoryModulePython.cpp + project/SourceGroupPythonEmpty.h + project/SourceGroupPythonEmpty.cpp +) diff --git a/src/lib_python/project/SourceGroupFactoryModulePython.cpp b/src/lib_python/project/SourceGroupFactoryModulePython.cpp new file mode 100644 index 00000000..b9bc39f5 --- /dev/null +++ b/src/lib_python/project/SourceGroupFactoryModulePython.cpp @@ -0,0 +1,26 @@ +#include "SourceGroupFactoryModulePython.h" + +#include "SourceGroupPythonEmpty.h" +#include "SourceGroupSettingsPythonEmpty.h" + +bool SourceGroupFactoryModulePython::supports(SourceGroupType type) const +{ + switch (type) + { + case SOURCE_GROUP_PYTHON_EMPTY: + return true; + default: + break; + } + return false; +} + +std::shared_ptr SourceGroupFactoryModulePython::createSourceGroup(std::shared_ptr settings) const +{ + std::shared_ptr sourceGroup; + if (std::shared_ptr pythonSettings = std::dynamic_pointer_cast(settings)) + { + sourceGroup = std::shared_ptr(new SourceGroupPythonEmpty(pythonSettings)); + } + return sourceGroup; +} diff --git a/src/lib_python/project/SourceGroupFactoryModulePython.h b/src/lib_python/project/SourceGroupFactoryModulePython.h new file mode 100644 index 00000000..aba0fd6a --- /dev/null +++ b/src/lib_python/project/SourceGroupFactoryModulePython.h @@ -0,0 +1,13 @@ +#ifndef SOURCE_GROUP_FACTORY_MODULE_PYTHON_H +#define SOURCE_GROUP_FACTORY_MODULE_PYTHON_H + +#include "SourceGroupFactoryModule.h" + +class SourceGroupFactoryModulePython: public SourceGroupFactoryModule +{ +public: + bool supports(SourceGroupType type) const override; + std::shared_ptr createSourceGroup(std::shared_ptr settings) const override; +}; + +#endif // SOURCE_GROUP_FACTORY_MODULE_PYTHON_H diff --git a/src/lib_python/project/SourceGroupPythonEmpty.cpp b/src/lib_python/project/SourceGroupPythonEmpty.cpp new file mode 100644 index 00000000..7c1474d0 --- /dev/null +++ b/src/lib_python/project/SourceGroupPythonEmpty.cpp @@ -0,0 +1,66 @@ +#include "SourceGroupPythonEmpty.h" + +#include "FileManager.h" +#include "IndexerCommandCustom.h" +#include "ProjectSettings.h" +#include "ResourcePaths.h" +#include "SourceGroupSettingsPythonEmpty.h" +#include "SqliteIndexStorage.h" +#include "utility.h" + +SourceGroupPythonEmpty::SourceGroupPythonEmpty(std::shared_ptr settings) + : m_settings(settings) +{ +} + +std::set SourceGroupPythonEmpty::filterToContainedFilePaths(const std::set& filePaths) const +{ + return SourceGroup::filterToContainedFilePaths( + filePaths, + std::set(), + utility::toSet(m_settings->getSourcePathsExpandedAndAbsolute()), + m_settings->getExcludeFiltersExpandedAndAbsolute() + ); +} + +std::set SourceGroupPythonEmpty::getAllSourceFilePaths() const +{ + FileManager fileManager; + fileManager.update( + m_settings->getSourcePathsExpandedAndAbsolute(), + m_settings->getExcludeFiltersExpandedAndAbsolute(), + m_settings->getSourceExtensions() + ); + return fileManager.getAllSourceFilePaths(); +} + +std::vector> SourceGroupPythonEmpty::getIndexerCommands(const std::set& filesToIndex) const +{ + std::vector> indexerCommands; + for (const FilePath& sourceFilePath : getAllSourceFilePaths()) + { + if (filesToIndex.find(sourceFilePath) != filesToIndex.end()) + { + indexerCommands.push_back(std::make_shared( + L"\"" + ResourcePaths::getPythonPath().wstr() + L"SourcetrailPythonIndexer\" --source-file-path=%{SOURCE_FILE_PATH} --database-file-path=%{DATABASE_FILE_PATH}", + m_settings->getProjectSettings()->getProjectFilePath(), + m_settings->getProjectSettings()->getTempDBFilePath(), + std::to_wstring(SqliteIndexStorage::getStorageVersion()), + sourceFilePath, + true + )); + } + } + + return indexerCommands; +} + +std::shared_ptr SourceGroupPythonEmpty::getSourceGroupSettings() +{ + return m_settings; +} + +std::shared_ptr SourceGroupPythonEmpty::getSourceGroupSettings() const +{ + return m_settings; +} diff --git a/src/lib_python/project/SourceGroupPythonEmpty.h b/src/lib_python/project/SourceGroupPythonEmpty.h new file mode 100644 index 00000000..2bbc0024 --- /dev/null +++ b/src/lib_python/project/SourceGroupPythonEmpty.h @@ -0,0 +1,27 @@ +#ifndef SOURCE_GROUP_PYTHON_EMPTY_H +#define SOURCE_GROUP_PYTHON_EMPTY_H + +#include +#include + +#include "SourceGroup.h" + +class SourceGroupSettingsPythonEmpty; + +class SourceGroupPythonEmpty: public SourceGroup +{ +public: + SourceGroupPythonEmpty(std::shared_ptr settings); + + std::set filterToContainedFilePaths(const std::set& filePaths) const override; + std::set getAllSourceFilePaths() const override; + std::vector> getIndexerCommands(const std::set& filesToIndex) const override; + +private: + std::shared_ptr getSourceGroupSettings() override; + std::shared_ptr getSourceGroupSettings() const override; + + std::shared_ptr m_settings; +}; + +#endif // SOURCE_GROUP_PYTHON_EMPTY_H