ENH: Create file(RENAME) command mode
This creates command "file(RENAME <oldname> <newname>)" to rename a file or directory within a single disk volume.
This commit is contained in:
parent
d3363beb2f
commit
0d92350bb6
@ -100,6 +100,10 @@ bool cmFileCommand
|
|||||||
{
|
{
|
||||||
return this->HandleMakeDirectoryCommand(args);
|
return this->HandleMakeDirectoryCommand(args);
|
||||||
}
|
}
|
||||||
|
else if ( subCommand == "RENAME" )
|
||||||
|
{
|
||||||
|
return this->HandleRename(args);
|
||||||
|
}
|
||||||
else if ( subCommand == "REMOVE" )
|
else if ( subCommand == "REMOVE" )
|
||||||
{
|
{
|
||||||
return this->HandleRemove(args, false);
|
return this->HandleRemove(args, false);
|
||||||
@ -2174,6 +2178,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 cmFileCommand::HandleRemove(std::vector<std::string> const& args,
|
||||||
bool recurse)
|
bool recurse)
|
||||||
|
@ -78,6 +78,7 @@ public:
|
|||||||
" file(GLOB variable [RELATIVE path] [globbing expressions]...)\n"
|
" file(GLOB variable [RELATIVE path] [globbing expressions]...)\n"
|
||||||
" file(GLOB_RECURSE variable [RELATIVE path] \n"
|
" file(GLOB_RECURSE variable [RELATIVE path] \n"
|
||||||
" [FOLLOW_SYMLINKS] [globbing expressions]...)\n"
|
" [FOLLOW_SYMLINKS] [globbing expressions]...)\n"
|
||||||
|
" file(RENAME <oldname> <newname>)\n"
|
||||||
" file(REMOVE [file1 ...])\n"
|
" file(REMOVE [file1 ...])\n"
|
||||||
" file(REMOVE_RECURSE [file1 ...])\n"
|
" file(REMOVE_RECURSE [file1 ...])\n"
|
||||||
" file(MAKE_DIRECTORY [directory1 directory2 ...])\n"
|
" file(MAKE_DIRECTORY [directory1 directory2 ...])\n"
|
||||||
@ -133,6 +134,9 @@ public:
|
|||||||
" /dir/*.py - match all python files in /dir and subdirectories\n"
|
" /dir/*.py - match all python files in /dir and subdirectories\n"
|
||||||
"MAKE_DIRECTORY will create the given directories, also if their parent "
|
"MAKE_DIRECTORY will create the given directories, also if their parent "
|
||||||
"directories don't exist yet\n"
|
"directories don't exist yet\n"
|
||||||
|
"RENAME moves a file or directory within a filesystem, "
|
||||||
|
"replacing the destination atomically."
|
||||||
|
"\n"
|
||||||
"REMOVE will remove the given files, also in subdirectories\n"
|
"REMOVE will remove the given files, also in subdirectories\n"
|
||||||
"REMOVE_RECURSE will remove the given files and directories, also "
|
"REMOVE_RECURSE will remove the given files and directories, also "
|
||||||
"non-empty directories\n"
|
"non-empty directories\n"
|
||||||
@ -159,6 +163,7 @@ public:
|
|||||||
cmTypeMacro(cmFileCommand, cmCommand);
|
cmTypeMacro(cmFileCommand, cmCommand);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool HandleRename(std::vector<std::string> const& args);
|
||||||
bool HandleRemove(std::vector<std::string> const& args, bool recurse);
|
bool HandleRemove(std::vector<std::string> const& args, bool recurse);
|
||||||
bool HandleWriteCommand(std::vector<std::string> const& args, bool append);
|
bool HandleWriteCommand(std::vector<std::string> const& args, bool append);
|
||||||
bool HandleReadCommand(std::vector<std::string> const& args);
|
bool HandleReadCommand(std::vector<std::string> const& args);
|
||||||
|
@ -184,7 +184,9 @@ SET(infile "${infile+-/out}")
|
|||||||
|
|
||||||
# Write include file to a file
|
# Write include file to a file
|
||||||
STRING(REGEX REPLACE "includefile" "${file}" outfile "${infile}")
|
STRING(REGEX REPLACE "includefile" "${file}" outfile "${infile}")
|
||||||
FILE(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OutputFile.h" "${outfile}")
|
FILE(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OutputFile.h-tmp" "${outfile}")
|
||||||
|
FILE(RENAME "${CMAKE_CURRENT_BINARY_DIR}/OutputFile.h-tmp"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/OutputFile.h")
|
||||||
|
|
||||||
# Test file glob
|
# Test file glob
|
||||||
FILE(GLOB_RECURSE src_files "${CMAKE_CURRENT_SOURCE_DIR}/*")
|
FILE(GLOB_RECURSE src_files "${CMAKE_CURRENT_SOURCE_DIR}/*")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user