Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion tools/projmgr/src/ProjMgrWorker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -572,14 +572,28 @@ bool ProjMgrWorker::LoadPacks(ContextItem& context) {
}
// Filter context specific packs
set<string> selectedPacks;
map<string, set<string>> selectedPackVersions;
const bool allOrLatest = (m_loadPacksPolicy == LoadPacksPolicy::ALL) || (m_loadPacksPolicy == LoadPacksPolicy::LATEST);
for (const auto& pack : m_loadedPacks) {
if (context.pdscFiles.find(pack->GetPackageFileName()) != context.pdscFiles.end()) {
selectedPacks.insert(pack->GetPackageID());
selectedPackVersions[pack->GetPackageID(false)].insert(pack->GetVersionString());
}
}
// check if multiple versions are selected
for (const auto& [pack, versions] : selectedPackVersions) {
if (versions.size() > 1) {
string msg = "selected multiple versions of pack '" + pack + "':";
for (const auto& version : versions) {
msg += " '" + version + "',";
}
msg.pop_back();
msg += "\nReview pack requirements";
ProjMgrLogger::Get().Warn(msg, context.name);
Comment thread
brondani marked this conversation as resolved.
}
Comment thread
brondani marked this conversation as resolved.
}
RtePackageFilter filter;
// use all packs is enabled by default, by default policy it should be disabled if selectedPacks is not empty
// use all packs is enabled by default, by default policy it should be disabled if selectedPacks is not empty
filter.SetUseAllPacks(allOrLatest || selectedPacks.empty());
filter.SetSelectedPackages(selectedPacks);
context.rteActiveTarget->SetPackageFilter(filter);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/main/tools/projmgr/schemas/csolution.schema.json

solution:
target-types:
- type: CM0
device: RteTest_ARMCM0

packs:
- pack: ARM::RteTest_DFP@0.1.1
- pack: ARM::RteTest_DFP
path: ../SolutionSpecificPack # 0.2.0

projects:
- project: pack_path.cproject.yml
15 changes: 15 additions & 0 deletions tools/projmgr/test/src/ProjMgrUnitTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3778,6 +3778,21 @@ TEST_F(ProjMgrUnitTests, RunProjMgrSolution_Local_Pack_File_Not_Found) {
EXPECT_TRUE(regex_search(errStr, regex(errExpected)));
}

TEST_F(ProjMgrUnitTests, MultiplePackVersions) {
char* argv[5];
StdStreamRedirect streamRedirect;
const string expected = "warning csolution: selected multiple versions of pack 'ARM::RteTest_DFP': '0.1.1+metadata', '0.2.0'\nReview pack requirements";
const string& csolution = testinput_folder + "/TestSolution/pack_multiple_versions.csolution.yml";
argv[1] = (char*)"convert";
argv[2] = (char*)csolution.c_str();
argv[3] = (char*)"-o";
argv[4] = (char*)testoutput_folder.c_str();
EXPECT_EQ(0, RunProjMgr(5, argv, 0));

auto errStr = streamRedirect.GetErrorString();
EXPECT_NE(string::npos, errStr.find(expected));
}

TEST_F(ProjMgrUnitTests, RunProjMgrSolution_List_Board_Pack) {
char* argv[7];
const string& csolution = testinput_folder + "/TestSolution/test_list_board_package.csolution.yml";
Expand Down
Loading