diff options
author | Kyle Edwards <kyle.edwards@kitware.com> | 2020-04-16 15:35:45 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2020-04-16 15:35:55 (GMT) |
commit | 5f20e854122e19ed867ea3edf32d41cf6e8f3be0 (patch) | |
tree | 119cbfbbdcba694dd57c556b1d628fbdb73b8f89 /Source/cmcmd.cxx | |
parent | 7e8df1bb24dcde30d1baafb23f6ab26352e67763 (diff) | |
parent | a625f30785130586a7d2a59c13a7526eab8b3086 (diff) | |
download | CMake-5f20e854122e19ed867ea3edf32d41cf6e8f3be0.zip CMake-5f20e854122e19ed867ea3edf32d41cf6e8f3be0.tar.gz CMake-5f20e854122e19ed867ea3edf32d41cf6e8f3be0.tar.bz2 |
Merge topic 'cat_cmd_20557'
a625f30785 cmake -E: add cat command.
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4600
Diffstat (limited to 'Source/cmcmd.cxx')
-rw-r--r-- | Source/cmcmd.cxx | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx index 49d04a6..67a5d92 100644 --- a/Source/cmcmd.cxx +++ b/Source/cmcmd.cxx @@ -90,6 +90,7 @@ void CMakeCommandUsage(const char* program) << "Available commands: \n" << " capabilities - Report capabilities built into cmake " "in JSON format\n" + << " cat <files>... - concat the files and print them to the standard output\n" << " chdir dir cmd [args...] - run command in a given directory\n" << " compare_files [--ignore-eol] file1 file2\n" << " - check if file1 is same as file2\n" @@ -180,6 +181,13 @@ static bool cmTarFilesFrom(std::string const& file, return true; } +static void cmCatFile(const std::string& fileToAppend) +{ + cmsys::ifstream source(fileToAppend.c_str(), + (std::ios::binary | std::ios::in)); + std::cout << source.rdbuf(); +} + static bool cmRemoveDirectory(const std::string& dir, bool recursive = true) { if (cmSystemTools::FileIsSymlink(dir)) { @@ -927,6 +935,33 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string> const& args) return HashSumFile(args, cmCryptoHash::AlgoSHA512); } + // Command to concat files into one + if (args[1] == "cat" && args.size() >= 3) { + int return_value = 0; + for (auto const& arg : cmMakeRange(args).advance(2)) { + if (cmHasLiteralPrefix(arg, "-")) { + if (arg != "--") { + cmSystemTools::Error(arg + ": option not handled"); + return_value = 1; + } + } else if (!cmSystemTools::TestFileAccess(arg, + cmsys::TEST_FILE_READ) && + cmSystemTools::TestFileAccess(arg, cmsys::TEST_FILE_OK)) { + cmSystemTools::Error(arg + ": permission denied (ignoring)"); + return_value = 1; + } else if (cmSystemTools::FileIsDirectory(arg)) { + cmSystemTools::Error(arg + ": is a directory (ignoring)"); + return_value = 1; + } else if (!cmSystemTools::FileExists(arg)) { + cmSystemTools::Error(arg + ": no such file or directory (ignoring)"); + return_value = 1; + } else { + cmCatFile(arg); + } + } + return return_value; + } + // Command to change directory and run a program. if (args[1] == "chdir" && args.size() >= 4) { std::string const& directory = args[2]; |