KWSys 2015-12-03 (6bfc1aef)
Extract upstream KWSys using the following shell commands. $ git archive --prefix=upstream-kwsys/ 6bfc1aef | tar x $ git shortlog --no-merges --abbrev=8 --format='%h %s' 9596e98d..6bfc1aef Rolf Eike Beer (6): 9e9c8ae3 SystemTools: extend test coverage of SystemTools::MakeDirectory() 3f3d9eb5 SystemTools: add basic tests for SystemTools::FindFile() 9ca5f108 SystemTools: entirely remove the extension code on non-Windows platforms 29f82f78 SystemTools: avoid needless copy of std::string ac667cdc SystemTools: remove 2 more explicit calls to FileIsDirectory() 6bfc1aef SystemTools: do not call FileExists() before calling FileIsDirectory()
This commit is contained in:
parent
e25f294a0e
commit
d5d90f5ec8
|
@ -2402,8 +2402,7 @@ bool SystemTools::CopyFileAlways(const std::string& source, const std::string& d
|
|||
// name as the source in that directory.
|
||||
|
||||
std::string destination_dir;
|
||||
if(SystemTools::FileExists(destination) &&
|
||||
SystemTools::FileIsDirectory(destination))
|
||||
if(SystemTools::FileIsDirectory(destination))
|
||||
{
|
||||
destination_dir = real_destination;
|
||||
SystemTools::ConvertToUnixSlashes(real_destination);
|
||||
|
@ -2969,19 +2968,14 @@ std::string SystemTools::FindProgram(
|
|||
const std::vector<std::string>& userPaths,
|
||||
bool no_system_path)
|
||||
{
|
||||
std::vector<std::string> extensions;
|
||||
std::string tryPath;
|
||||
|
||||
#if defined (_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
|
||||
bool hasExtension = false;
|
||||
std::vector<std::string> extensions;
|
||||
// check to see if the name already has a .xxx at
|
||||
// the end of it
|
||||
if(name.size() > 3 && name[name.size()-4] == '.')
|
||||
{
|
||||
hasExtension = true;
|
||||
}
|
||||
// on windows try .com then .exe
|
||||
if(!hasExtension)
|
||||
if(name.size() <= 3 || name[name.size()-4] != '.')
|
||||
{
|
||||
extensions.push_back(".com");
|
||||
extensions.push_back(".exe");
|
||||
|
@ -2992,8 +2986,7 @@ std::string SystemTools::FindProgram(
|
|||
{
|
||||
tryPath = name;
|
||||
tryPath += *i;
|
||||
if(SystemTools::FileExists(tryPath) &&
|
||||
!SystemTools::FileIsDirectory(tryPath))
|
||||
if(SystemTools::FileExists(tryPath, true))
|
||||
{
|
||||
return SystemTools::CollapseFullPath(tryPath);
|
||||
}
|
||||
|
@ -3002,11 +2995,9 @@ std::string SystemTools::FindProgram(
|
|||
#endif
|
||||
|
||||
// now try just the name
|
||||
tryPath = name;
|
||||
if(SystemTools::FileExists(tryPath) &&
|
||||
!SystemTools::FileIsDirectory(tryPath))
|
||||
if(SystemTools::FileExists(name, true))
|
||||
{
|
||||
return SystemTools::CollapseFullPath(tryPath);
|
||||
return SystemTools::CollapseFullPath(name);
|
||||
}
|
||||
// now construct the path
|
||||
std::vector<std::string> path;
|
||||
|
@ -3043,6 +3034,7 @@ std::string SystemTools::FindProgram(
|
|||
// Remove double quotes from the path on windows
|
||||
SystemTools::ReplaceString(*p, "\"", "");
|
||||
#endif
|
||||
#if defined (_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
|
||||
// first try with extensions
|
||||
for(std::vector<std::string>::iterator ext
|
||||
= extensions.begin(); ext != extensions.end(); ++ext)
|
||||
|
@ -3055,6 +3047,7 @@ std::string SystemTools::FindProgram(
|
|||
return SystemTools::CollapseFullPath(tryPath);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// now try it without them
|
||||
tryPath = *p;
|
||||
tryPath += name;
|
||||
|
@ -3133,8 +3126,7 @@ std::string SystemTools
|
|||
tryPath = *p;
|
||||
tryPath += name;
|
||||
tryPath += ".framework";
|
||||
if(SystemTools::FileExists(tryPath)
|
||||
&& SystemTools::FileIsDirectory(tryPath))
|
||||
if(SystemTools::FileIsDirectory(tryPath))
|
||||
{
|
||||
return SystemTools::CollapseFullPath(tryPath);
|
||||
}
|
||||
|
|
|
@ -172,6 +172,63 @@ static bool CheckFileOperations()
|
|||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
// calling it again should just return true
|
||||
if (!kwsys::SystemTools::MakeDirectory(testNewDir))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with second call to MakeDirectory for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
// calling with 0 pointer should return false
|
||||
if (kwsys::SystemTools::MakeDirectory(0))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with MakeDirectory(0)"
|
||||
<< std::endl;
|
||||
res = false;
|
||||
}
|
||||
// calling with an empty string should return false
|
||||
if (kwsys::SystemTools::MakeDirectory(std::string()))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with MakeDirectory(std::string())"
|
||||
<< std::endl;
|
||||
res = false;
|
||||
}
|
||||
// check existence
|
||||
if (!kwsys::SystemTools::FileExists(testNewDir.c_str(), false))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists as C string and not file for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
// remove it
|
||||
if (!kwsys::SystemTools::RemoveADirectory(testNewDir))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with RemoveADirectory for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
// check existence
|
||||
if (kwsys::SystemTools::FileExists(testNewDir.c_str(), false))
|
||||
{
|
||||
std::cerr
|
||||
<< "After RemoveADirectory: "
|
||||
<< "Problem with FileExists as C string and not file for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
// create it using the char* version
|
||||
if (!kwsys::SystemTools::MakeDirectory(testNewDir.c_str()))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with second call to MakeDirectory as C string for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
|
||||
if (!kwsys::SystemTools::Touch(testNewFile.c_str(), true))
|
||||
{
|
||||
|
@ -180,6 +237,97 @@ static bool CheckFileOperations()
|
|||
<< testNewFile << std::endl;
|
||||
res = false;
|
||||
}
|
||||
// calling MakeDirectory with something that is no file should fail
|
||||
if (kwsys::SystemTools::MakeDirectory(testNewFile))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with to MakeDirectory for: "
|
||||
<< testNewFile << std::endl;
|
||||
res = false;
|
||||
}
|
||||
|
||||
// calling with 0 pointer should return false
|
||||
if (kwsys::SystemTools::FileExists(0))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists(0)"
|
||||
<< std::endl;
|
||||
res = false;
|
||||
}
|
||||
if (kwsys::SystemTools::FileExists(0, true))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists(0) as file"
|
||||
<< std::endl;
|
||||
res = false;
|
||||
}
|
||||
// calling with an empty string should return false
|
||||
if (kwsys::SystemTools::FileExists(std::string()))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists(std::string())"
|
||||
<< std::endl;
|
||||
res = false;
|
||||
}
|
||||
// FileExists(x, true) should return false on a directory
|
||||
if (kwsys::SystemTools::FileExists(testNewDir, true))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists as file for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
if (kwsys::SystemTools::FileExists(testNewDir.c_str(), true))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists as C string and file for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
// FileExists(x, false) should return true even on a directory
|
||||
if (!kwsys::SystemTools::FileExists(testNewDir, false))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists as not file for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
if (!kwsys::SystemTools::FileExists(testNewDir.c_str(), false))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists as C string and not file for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
// should work, was created as new file before
|
||||
if (!kwsys::SystemTools::FileExists(testNewFile))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
if (!kwsys::SystemTools::FileExists(testNewFile.c_str()))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists as C string for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
if (!kwsys::SystemTools::FileExists(testNewFile, true))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists as file for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
if (!kwsys::SystemTools::FileExists(testNewFile.c_str(), true))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FileExists as C string and file for: "
|
||||
<< testNewDir << std::endl;
|
||||
res = false;
|
||||
}
|
||||
|
||||
// Reset umask
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
|
@ -851,6 +999,44 @@ static bool CheckGetPath()
|
|||
return res;
|
||||
}
|
||||
|
||||
static bool CheckFind()
|
||||
{
|
||||
bool res = true;
|
||||
const std::string testFindFileName("testFindFile.txt");
|
||||
const std::string testFindFile(TEST_SYSTEMTOOLS_BINARY_DIR "/"
|
||||
+ testFindFileName);
|
||||
|
||||
if (!kwsys::SystemTools::Touch(testFindFile.c_str(), true))
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with Touch for: "
|
||||
<< testFindFile << std::endl;
|
||||
// abort here as the existence of the file only makes the test meaningful
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<std::string> searchPaths;
|
||||
searchPaths.push_back(TEST_SYSTEMTOOLS_BINARY_DIR);
|
||||
if (kwsys::SystemTools::FindFile(testFindFileName,
|
||||
searchPaths, true).empty())
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FindFile without system paths for: "
|
||||
<< testFindFileName << std::endl;
|
||||
res = false;
|
||||
}
|
||||
if (kwsys::SystemTools::FindFile(testFindFileName,
|
||||
searchPaths, false).empty())
|
||||
{
|
||||
std::cerr
|
||||
<< "Problem with FindFile with system paths for: "
|
||||
<< testFindFileName << std::endl;
|
||||
res = false;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int testSystemTools(int, char*[])
|
||||
{
|
||||
|
@ -888,5 +1074,7 @@ int testSystemTools(int, char*[])
|
|||
|
||||
res &= CheckGetPath();
|
||||
|
||||
res &= CheckFind();
|
||||
|
||||
return res ? 0 : 1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue