KWSys: SystemTools: CopyFileIfDifferent: Fix endless recursion

Backport KWSys commit `ea77593a1` (SystemTools: CopyFileIfDifferent: Fix
endless recursion, 2020-02-13) for the CMake 3.17 branch.

Fixes: #20347
This commit is contained in:
Brad King
2020-02-18 11:41:36 -05:00
parent 155540d89e
commit ce59cabc70
2 changed files with 18 additions and 6 deletions

View File

@@ -2186,12 +2186,15 @@ bool SystemTools::CopyFileIfDifferent(const std::string& source,
// FilesDiffer does not handle file to directory compare
if (SystemTools::FileIsDirectory(destination)) {
const std::string new_destination = FileInDir(source, destination);
return SystemTools::CopyFileIfDifferent(source, new_destination);
}
// source and destination are files so do a copy if they
// are different
if (SystemTools::FilesDiffer(source, destination)) {
return SystemTools::CopyFileAlways(source, destination);
if (!SystemTools::ComparePath(new_destination, destination)) {
return SystemTools::CopyFileIfDifferent(source, new_destination);
}
} else {
// source and destination are files so do a copy if they
// are different
if (SystemTools::FilesDiffer(source, destination)) {
return SystemTools::CopyFileAlways(source, destination);
}
}
// at this point the files must be the same so return true
return true;

View File

@@ -1074,6 +1074,15 @@ static bool CheckCopyFileIfDifferent()
}
}
if (!kwsys::SystemTools::MakeDirectory("dir_a") ||
!kwsys::SystemTools::MakeDirectory("dir_b")) {
return false;
}
if (!kwsys::SystemTools::CopyFileIfDifferent("dir_a/", "dir_b")) {
ret = false;
}
return ret;
}