浏览代码

list(REMOVE_ITEM): Make removal of an empty item a no-op.

Fixes: #21663
Asit Dhal 4 年之前
父节点
当前提交
38e2299fc8

+ 4 - 3
Source/cmListCommand.cxx

@@ -422,9 +422,10 @@ bool HandleJoinCommand(std::vector<std::string> const& args,
 bool HandleRemoveItemCommand(std::vector<std::string> const& args,
                              cmExecutionStatus& status)
 {
-  if (args.size() < 3) {
-    status.SetError("sub-command REMOVE_ITEM requires two or more arguments.");
-    return false;
+  assert(args.size() >= 2);
+
+  if (args.size() == 2) {
+    return true;
   }
 
   const std::string& listName = args[1];

+ 1 - 2
Tests/CMakeTests/ListTest.cmake.in

@@ -142,9 +142,8 @@ set(Find-List-Only-STDERR "three")
 set(Insert-List-Only-STDERR "at least three")
 set(Length-List-Only-STDERR "two")
 set(Remove_At-List-Only-STDERR "at least two")
-set(Remove_Item-List-Only-STDERR "two or more")
 
-foreach(cmd IN ITEMS Find Get Insert Length Remove_At Remove_Item)
+foreach(cmd IN ITEMS Find Get Insert Length Remove_At)
   string(TOUPPER ${cmd} cmd_upper)
   set(${cmd}-List-Only-RESULT 1)
   set(${cmd}-List-Only-STDERR ".*CMake Error at List-${cmd}-List-Only.cmake:1 \\(list\\):.*list sub-command ${cmd_upper} requires ${${cmd}-List-Only-STDERR} arguments.*")

+ 5 - 0
Tests/RunCMake/list/REMOVE_ITEM-NoItemArg.cmake

@@ -0,0 +1,5 @@
+set(ls "a" "b" "c")
+list(REMOVE_ITEM ls alpha)
+if (NOT ls STREQUAL "a;b;c")
+  message(FATAL_ERROR "list(REMOVE_ITEM) modified for empty item")
+endif ()

+ 1 - 0
Tests/RunCMake/list/RunCMakeTest.cmake

@@ -30,6 +30,7 @@ run_cmake(FILTER-NotList)
 run_cmake(REMOVE_AT-NotList)
 run_cmake(REMOVE_DUPLICATES-NotList)
 run_cmake(REMOVE_ITEM-NotList)
+run_cmake(REMOVE_ITEM-NoItemArg)
 run_cmake(REVERSE-NotList)
 run_cmake(SORT-NotList)