ENH: allow copy if different from a file to a directory to work

This commit is contained in:
Bill Hoffman 2007-01-30 11:32:33 -05:00
parent 88f798d286
commit b32f3b4131
1 changed files with 24 additions and 2 deletions

View File

@ -1507,10 +1507,33 @@ kwsys_stl::string SystemTools::ConvertToWindowsOutputPath(const char* path)
bool SystemTools::CopyFileIfDifferent(const char* source, bool SystemTools::CopyFileIfDifferent(const char* source,
const char* destination) const char* destination)
{ {
// special check for a destination that is a directory
// FilesDiffer does not handle file to directory compare
if(SystemTools::FileIsDirectory(destination))
{
kwsys_stl::string new_destination = destination;
SystemTools::ConvertToUnixSlashes(new_destination);
new_destination += '/';
kwsys_stl::string source_name = source;
new_destination += SystemTools::GetFilenameName(source_name);
if(SystemTools::FilesDiffer(source, new_destination.c_str()))
{
return SystemTools::CopyFileAlways(source, destination);
}
else
{
// the files are the same so the copy is done return
// true
return true;
}
}
// source and destination are files so do a copy if they
// are different
if(SystemTools::FilesDiffer(source, destination)) if(SystemTools::FilesDiffer(source, destination))
{ {
return SystemTools::CopyFileAlways(source, destination); return SystemTools::CopyFileAlways(source, destination);
} }
// at this point the files must be the same so return true
return true; return true;
} }
@ -1599,7 +1622,6 @@ bool SystemTools::CopyFileAlways(const char* source, const char* destination)
{ {
return true; return true;
} }
mode_t perm = 0; mode_t perm = 0;
bool perms = SystemTools::GetPermissions(source, perm); bool perms = SystemTools::GetPermissions(source, perm);
@ -1694,7 +1716,7 @@ bool SystemTools::CopyFileAlways(const char* source, const char* destination)
} }
else if(statSource.st_size != statDestination.st_size) else if(statSource.st_size != statDestination.st_size)
{ {
return false; return false;
} }
if ( perms ) if ( perms )
{ {