diff options
author | Brad King <brad.king@kitware.com> | 2009-04-15 13:58:13 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-04-15 13:58:13 (GMT) |
commit | 0d92350bb67de4632220e63d8f02c062596896d1 (patch) | |
tree | 131bd18d053f4c770a85dd417f9ecdec43a97f74 /Source/cmFileCommand.cxx | |
parent | d3363beb2f5b4bedee95aae6f6697f059ed3f48b (diff) | |
download | CMake-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.cxx | 43 |
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) { |