diff options
author | Brad King <brad.king@kitware.com> | 2023-11-08 18:57:09 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2023-11-09 14:11:55 (GMT) |
commit | 07edab8ef222e8cd8e8322e0fdfadc72ca6d1740 (patch) | |
tree | 60fef60e5802321769a1614f35c898363b57037c /Source/CTest | |
parent | d6b796854bcb0460b7d3a8eee3e79a9482b6fc62 (diff) | |
download | CMake-07edab8ef222e8cd8e8322e0fdfadc72ca6d1740.zip CMake-07edab8ef222e8cd8e8322e0fdfadc72ca6d1740.tar.gz CMake-07edab8ef222e8cd8e8322e0fdfadc72ca6d1740.tar.bz2 |
ctest_empty_binary_directory: Report more detail in failure message
Diffstat (limited to 'Source/CTest')
-rw-r--r-- | Source/CTest/cmCTestEmptyBinaryDirectoryCommand.cxx | 22 | ||||
-rw-r--r-- | Source/CTest/cmCTestScriptHandler.cxx | 32 | ||||
-rw-r--r-- | Source/CTest/cmCTestScriptHandler.h | 7 |
3 files changed, 37 insertions, 24 deletions
diff --git a/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.cxx b/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.cxx index af495bb..2c92d77 100644 --- a/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.cxx +++ b/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.cxx @@ -2,25 +2,27 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmCTestEmptyBinaryDirectoryCommand.h" -#include <sstream> - #include "cmCTestScriptHandler.h" - -class cmExecutionStatus; +#include "cmExecutionStatus.h" +#include "cmMakefile.h" +#include "cmMessageType.h" +#include "cmStringAlgorithms.h" bool cmCTestEmptyBinaryDirectoryCommand::InitialPass( - std::vector<std::string> const& args, cmExecutionStatus& /*unused*/) + std::vector<std::string> const& args, cmExecutionStatus& status) { if (args.size() != 1) { this->SetError("called with incorrect number of arguments"); return false; } - if (!cmCTestScriptHandler::EmptyBinaryDirectory(args[0])) { - std::ostringstream ostr; - ostr << "problem removing the binary directory: " << args[0]; - this->SetError(ostr.str()); - return false; + std::string err; + if (!cmCTestScriptHandler::EmptyBinaryDirectory(args[0], err)) { + status.GetMakefile().IssueMessage( + MessageType::FATAL_ERROR, + cmStrCat("Did not remove the binary directory:\n ", args[0], + "\nbecause:\n ", err)); + return true; } return true; diff --git a/Source/CTest/cmCTestScriptHandler.cxx b/Source/CTest/cmCTestScriptHandler.cxx index 48f8f6d..0beee67 100644 --- a/Source/CTest/cmCTestScriptHandler.cxx +++ b/Source/CTest/cmCTestScriptHandler.cxx @@ -672,9 +672,11 @@ int cmCTestScriptHandler::RunConfigurationDashboard() // clear the binary directory? if (this->EmptyBinDir) { - if (!cmCTestScriptHandler::EmptyBinaryDirectory(this->BinaryDir)) { + std::string err; + if (!cmCTestScriptHandler::EmptyBinaryDirectory(this->BinaryDir, err)) { cmCTestLog(this->CTest, ERROR_MESSAGE, - "Problem removing the binary directory" << std::endl); + "Problem removing the binary directory (" + << err << "): " << this->BinaryDir << std::endl); } } @@ -860,10 +862,12 @@ bool cmCTestScriptHandler::RunScript(cmCTest* ctest, cmMakefile* mf, return true; } -bool cmCTestScriptHandler::EmptyBinaryDirectory(const std::string& sname) +bool cmCTestScriptHandler::EmptyBinaryDirectory(const std::string& sname, + std::string& err) { // try to avoid deleting root if (sname.size() < 2) { + err = "path too short"; return false; } @@ -876,20 +880,24 @@ bool cmCTestScriptHandler::EmptyBinaryDirectory(const std::string& sname) std::string check = cmStrCat(sname, "/CMakeCache.txt"); if (!cmSystemTools::FileExists(check)) { + err = "path does not contain an existing CMakeCache.txt file"; return false; } + cmsys::Status status; for (int i = 0; i < 5; ++i) { - if (TryToRemoveBinaryDirectoryOnce(sname)) { + status = TryToRemoveBinaryDirectoryOnce(sname); + if (status) { return true; } cmSystemTools::Delay(100); } + err = status.GetString(); return false; } -bool cmCTestScriptHandler::TryToRemoveBinaryDirectoryOnce( +cmsys::Status cmCTestScriptHandler::TryToRemoveBinaryDirectoryOnce( const std::string& directoryPath) { cmsys::Directory directory; @@ -907,18 +915,18 @@ bool cmCTestScriptHandler::TryToRemoveBinaryDirectoryOnce( bool isDirectory = cmSystemTools::FileIsDirectory(fullPath) && !cmSystemTools::FileIsSymlink(fullPath); + cmsys::Status status; if (isDirectory) { - if (!cmSystemTools::RemoveADirectory(fullPath)) { - return false; - } + status = cmSystemTools::RemoveADirectory(fullPath); } else { - if (!cmSystemTools::RemoveFile(fullPath)) { - return false; - } + status = cmSystemTools::RemoveFile(fullPath); + } + if (!status) { + return status; } } - return static_cast<bool>(cmSystemTools::RemoveADirectory(directoryPath)); + return cmSystemTools::RemoveADirectory(directoryPath); } cmDuration cmCTestScriptHandler::GetRemainingTimeAllowed() diff --git a/Source/CTest/cmCTestScriptHandler.h b/Source/CTest/cmCTestScriptHandler.h index b7764b2..8aa07e7 100644 --- a/Source/CTest/cmCTestScriptHandler.h +++ b/Source/CTest/cmCTestScriptHandler.h @@ -9,6 +9,8 @@ #include <string> #include <vector> +#include "cmsys/Status.hxx" + #include "cmCTestGenericHandler.h" #include "cmDuration.h" @@ -80,7 +82,7 @@ public: /* * Empty Binary Directory */ - static bool EmptyBinaryDirectory(const std::string& dir); + static bool EmptyBinaryDirectory(const std::string& dir, std::string& err); /* * Write an initial CMakeCache.txt from the given contents. @@ -139,7 +141,8 @@ private: std::unique_ptr<cmCTestCommand> command); // Try to remove the binary directory once - static bool TryToRemoveBinaryDirectoryOnce(const std::string& directoryPath); + static cmsys::Status TryToRemoveBinaryDirectoryOnce( + const std::string& directoryPath); std::vector<std::string> ConfigurationScripts; std::vector<bool> ScriptProcessScope; |