diff --git a/tools/projmgr/include/ProjMgr.h b/tools/projmgr/include/ProjMgr.h index 8a5bb537d..013878ad7 100644 --- a/tools/projmgr/include/ProjMgr.h +++ b/tools/projmgr/include/ProjMgr.h @@ -125,6 +125,7 @@ class ProjMgr { bool RunListToolchains(void); bool RunListEnvironment(void); bool PopulateContexts(void); + bool SetLoadPacksPolicy(void); }; #endif // PROJMGR_H diff --git a/tools/projmgr/src/ProjMgr.cpp b/tools/projmgr/src/ProjMgr.cpp index f19544077..9ca5ae6fc 100644 --- a/tools/projmgr/src/ProjMgr.cpp +++ b/tools/projmgr/src/ProjMgr.cpp @@ -238,6 +238,11 @@ int ProjMgr::RunProjMgr(int argc, char **argv, char** envp) { return manager.PrintUsage(optionsDict, manager.m_command, manager.m_args) ? 0 : 1; } + // Set load packs policy + if (!manager.SetLoadPacksPolicy()) { + return 1; + } + // Environment variables vector envVars; if (envp) { @@ -319,6 +324,23 @@ int ProjMgr::RunProjMgr(int argc, char **argv, char** envp) { return 0; } +// Set load packs policy +bool ProjMgr::SetLoadPacksPolicy(void) { + if (m_loadPacksPolicy.empty()) { + m_worker.SetLoadPacksPolicy(LoadPacksPolicy::DEFAULT); + } else if (m_loadPacksPolicy == "latest") { + m_worker.SetLoadPacksPolicy(LoadPacksPolicy::LATEST); + } else if (m_loadPacksPolicy == "all") { + m_worker.SetLoadPacksPolicy(LoadPacksPolicy::ALL); + } else if (m_loadPacksPolicy == "required") { + m_worker.SetLoadPacksPolicy(LoadPacksPolicy::REQUIRED); + } else { + ProjMgrLogger::Error("unknown load option: '" + m_loadPacksPolicy + "', it must be 'latest', 'all' or 'required'"); + return false; + } + return true; +} + bool ProjMgr::PopulateContexts(void) { if (!m_csolutionFile.empty()) { // Parse csolution @@ -360,26 +382,12 @@ bool ProjMgr::PopulateContexts(void) { return false; } - // Set output directory + // Set toolchain m_worker.SetSelectedToolchain(m_selectedToolchain); // Set output directory m_worker.SetOutputDir(m_outputDir); - // Set load packs policy - if (m_loadPacksPolicy.empty()) { - m_worker.SetLoadPacksPolicy(LoadPacksPolicy::DEFAULT); - } else if (m_loadPacksPolicy == "latest") { - m_worker.SetLoadPacksPolicy(LoadPacksPolicy::LATEST); - } else if (m_loadPacksPolicy == "all") { - m_worker.SetLoadPacksPolicy(LoadPacksPolicy::ALL); - } else if (m_loadPacksPolicy == "required") { - m_worker.SetLoadPacksPolicy(LoadPacksPolicy::REQUIRED); - } else { - ProjMgrLogger::Error("unknown load option: '" + m_loadPacksPolicy + "', it must be 'latest', 'all' or 'required'"); - return false; - } - // Add contexts for (auto& descriptor : m_parser.GetCsolution().contexts) { error_code ec; diff --git a/tools/projmgr/test/data/TestSolution/test.csolution_filtered_pack_selection.yml b/tools/projmgr/test/data/TestSolution/test.csolution_filtered_pack_selection.yml index 2f642f1ad..f7db82163 100644 --- a/tools/projmgr/test/data/TestSolution/test.csolution_filtered_pack_selection.yml +++ b/tools/projmgr/test/data/TestSolution/test.csolution_filtered_pack_selection.yml @@ -73,6 +73,9 @@ solution: packs: - pack: ARM + for-context: .Debug + - pack: ARM::*DFP + for-context: .Release projects: - project: ./TestProject1/test1.cproject.yml diff --git a/tools/projmgr/test/src/ProjMgrUnitTests.cpp b/tools/projmgr/test/src/ProjMgrUnitTests.cpp index 47c71a49c..2902d0e33 100644 --- a/tools/projmgr/test/src/ProjMgrUnitTests.cpp +++ b/tools/projmgr/test/src/ProjMgrUnitTests.cpp @@ -83,10 +83,16 @@ TEST_F(ProjMgrUnitTests, RunProjMgr_ListPacks) { map, string> testInputs = { {{"TestSolution/test.csolution.yml", "test1.Debug+CM0"}, "ARM::RteTest_DFP@0.2.0 \\(.*\\)\n" }, + // packs are specified only with vendor {{"TestSolution/test.csolution_filtered_pack_selection.yml", "test1.Debug+CM0"}, "ARM::RteTest@0.1.0 \\(.*\\)\nARM::RteTestBoard@0.1.0 \\(.*\\)\nARM::RteTestGenerator@0.1.0 \\(.*\\)\nARM::RteTest_DFP@0.2.0 \\(.*\\)\n"}, + // packs are specified with wildcards + {{"TestSolution/test.csolution_filtered_pack_selection.yml", "test1.Release+CM0"}, + "ARM::RteTest_DFP@0.2.0 \\(.*\\)\n"}, + // packs are not specified {{"TestSolution/test.csolution_no_packs.yml", "test1.Debug+CM0"}, "ARM::RteTest@0.1.0 \\(.*\\)\nARM::RteTestBoard@0.1.0 \\(.*\\)\nARM::RteTestGenerator@0.1.0 \\(.*\\)\nARM::RteTest_DFP@0.2.0 \\(.*\\)\n"}, + // packs are fully specified {{"TestSolution/test.csolution_pack_selection.yml", "test2.Debug+CM0"}, "ARM::RteTest_DFP@0.2.0 \\(.*\\)\n"} }; @@ -213,6 +219,27 @@ ARM::RteTest_DFP@0.2.0 \\(.*\\)\n\ EXPECT_TRUE(regex_match(outStr, regex(expectedAll))); } +TEST_F(ProjMgrUnitTests, RunProjMgr_ListPacksAll) { + char* argv[5]; + StdStreamRedirect streamRedirect; + argv[1] = (char*)"list"; + argv[2] = (char*)"packs"; + argv[3] = (char*)"-l"; + argv[4] = (char*)"all"; + EXPECT_EQ(0, RunProjMgr(5, argv, 0)); + + const string& expectedAll = "\ +ARM::RteTest@0.1.0 \\(.*\\)\n\ +ARM::RteTestBoard@0.1.0 \\(.*\\)\n\ +ARM::RteTestGenerator@0.1.0 \\(.*\\)\n\ +ARM::RteTest_DFP@0.1.1 \\(.*\\)\n\ +ARM::RteTest_DFP@0.2.0 \\(.*\\)\n\ +"; + + auto outStr = streamRedirect.GetOutString(); + EXPECT_TRUE(regex_match(outStr, regex(expectedAll))); +} + TEST_F(ProjMgrUnitTests, RunProjMgr_ListPacksMissing) { char* argv[8]; StdStreamRedirect streamRedirect;