mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-24 07:08:38 -05:00
file(): TOUCH, TOUCH_NOCREATE and MAKE_DIRECTORY accept empty lists
Projects may be generating a list of files or directories to pass as arguments to file(TOUCH), file(TOUCH_NOCREATE), or file(MAKE_DIRECTORY). Those lists might end up being empty, so rather than requiring at least one item, allow an empty list. Fixes: #24897
This commit is contained in:
@@ -73,6 +73,11 @@ namespace {
|
||||
bool HandleWriteImpl(std::vector<std::string> const& args, bool append,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
if (args.size() < 2) {
|
||||
status.SetError(cmStrCat(
|
||||
args[0], " must be called with at least one additional argument."));
|
||||
return false;
|
||||
}
|
||||
auto i = args.begin();
|
||||
|
||||
i++; // Get rid of subcommand
|
||||
@@ -658,8 +663,11 @@ bool HandleStringsCommand(std::vector<std::string> const& args,
|
||||
bool HandleGlobImpl(std::vector<std::string> const& args, bool recurse,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
// File commands has at least one argument
|
||||
assert(args.size() > 1);
|
||||
if (args.size() < 2) {
|
||||
status.SetError(cmStrCat(
|
||||
args[0], " must be called with at least one additional argument."));
|
||||
return false;
|
||||
}
|
||||
|
||||
auto i = args.begin();
|
||||
|
||||
@@ -869,8 +877,8 @@ bool HandleGlobRecurseCommand(std::vector<std::string> const& args,
|
||||
bool HandleMakeDirectoryCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
// File command has at least one argument
|
||||
assert(args.size() > 1);
|
||||
// Projects might pass a dynamically generated list of directories, and it
|
||||
// could be an empty list. We should not assume there is at least one.
|
||||
|
||||
std::string expr;
|
||||
for (std::string const& arg :
|
||||
@@ -903,8 +911,8 @@ bool HandleMakeDirectoryCommand(std::vector<std::string> const& args,
|
||||
bool HandleTouchImpl(std::vector<std::string> const& args, bool create,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
// File command has at least one argument
|
||||
assert(args.size() > 1);
|
||||
// Projects might pass a dynamically generated list of files, and it
|
||||
// could be an empty list. We should not assume there is at least one.
|
||||
|
||||
for (std::string const& arg :
|
||||
cmMakeRange(args).advance(1)) // Get rid of subcommand
|
||||
@@ -3918,8 +3926,9 @@ bool HandleChmodRecurseCommand(std::vector<std::string> const& args,
|
||||
bool cmFileCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
if (args.size() < 2) {
|
||||
status.SetError("must be called with at least two arguments.");
|
||||
if (args.empty()) {
|
||||
status.SetError(
|
||||
"given no arguments, but it requires at least a sub-command.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user