summaryrefslogtreecommitdiffstats
path: root/Source/cmFileCommand.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-04-15 13:58:13 (GMT)
committerBrad King <brad.king@kitware.com>2009-04-15 13:58:13 (GMT)
commit0d92350bb67de4632220e63d8f02c062596896d1 (patch)
tree131bd18d053f4c770a85dd417f9ecdec43a97f74 /Source/cmFileCommand.cxx
parentd3363beb2f5b4bedee95aae6f6697f059ed3f48b (diff)
downloadCMake-0d92350bb67de4632220e63d8f02c062596896d1.zip
CMake-0d92350bb67de4632220e63d8f02c062596896d1.tar.gz
CMake-0d92350bb67de4632220e63d8f02c062596896d1.tar.bz2
ENH: Create file(RENAME) command mode
This creates command "file(RENAME <oldname> <newname>)" to rename a file or directory within a single disk volume.
Diffstat (limited to 'Source/cmFileCommand.cxx')
-rw-r--r--Source/cmFileCommand.cxx43
1 files changed, 43 insertions, 0 deletions
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index ab8edda..1808027 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -100,6 +100,10 @@ bool cmFileCommand
{
return this->HandleMakeDirectoryCommand(args);
}
+ else if ( subCommand == "RENAME" )
+ {
+ return this->HandleRename(args);
+ }
else if ( subCommand == "REMOVE" )
{
return this->HandleRemove(args, false);
@@ -2175,6 +2179,45 @@ bool cmFileCommand::HandleRelativePathCommand(
//----------------------------------------------------------------------------
+bool cmFileCommand::HandleRename(std::vector<std::string> const& args)
+{
+ if(args.size() != 3)
+ {
+ this->SetError("given incorrect number of arguments.");
+ return false;
+ }
+
+ // Compute full path for old and new names.
+ std::string oldname = args[1];
+ if(!cmsys::SystemTools::FileIsFullPath(oldname.c_str()))
+ {
+ oldname = this->Makefile->GetCurrentDirectory();
+ oldname += "/" + args[1];
+ }
+ std::string newname = args[2];
+ if(!cmsys::SystemTools::FileIsFullPath(newname.c_str()))
+ {
+ newname = this->Makefile->GetCurrentDirectory();
+ newname += "/" + args[2];
+ }
+
+ if(!cmSystemTools::RenameFile(oldname.c_str(), newname.c_str()))
+ {
+ std::string err = cmSystemTools::GetLastSystemError();
+ cmOStringStream e;
+ e << "RENAME failed to rename\n"
+ << " " << oldname << "\n"
+ << "to\n"
+ << " " << newname << "\n"
+ << "because: " << err << "\n";
+ this->SetError(e.str().c_str());
+ return false;
+ }
+ return true;
+}
+
+
+//----------------------------------------------------------------------------
bool cmFileCommand::HandleRemove(std::vector<std::string> const& args,
bool recurse)
{