forked from qt-creator/qt-creator
Utils: Let copyRecursively create target folder
Previously FileUtils::copyRecursively did create the target folder,
FilePath::copyRecursively now does the same.
If either src or target are .qrc paths, select the fallback copy
routine, as tar cannot read or write to a .qrc folder
see: 7cb74e325f for report about
failing test in testProject_multipleBuildConfigs
Change-Id: I52bb9ad8f018f359f598e5bc8b18ab31c901496f
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -183,22 +183,31 @@ expected_str<void> copyRecursively_fallback(const FilePath &src, const FilePath
|
||||
expected_str<void> DeviceFileAccess::copyRecursively(const FilePath &src,
|
||||
const FilePath &target) const
|
||||
{
|
||||
#ifdef UTILS_STATIC_LIBRARY
|
||||
return copyRecursively_fallback(src, target);
|
||||
#else
|
||||
if (!target.isWritableDir()) {
|
||||
if (!src.isDir()) {
|
||||
return make_unexpected(Tr::tr("Cannot copy from %1, it is not a directory.")
|
||||
.arg(src.toUserOutput())
|
||||
.arg(target.toUserOutput()));
|
||||
}
|
||||
|
||||
if (!target.ensureWritableDir()) {
|
||||
return make_unexpected(Tr::tr("Cannot copy %1 to %2, it is not a writable directory.")
|
||||
.arg(src.toUserOutput())
|
||||
.arg(target.toUserOutput()));
|
||||
}
|
||||
|
||||
#ifdef UTILS_STATIC_LIBRARY
|
||||
return copyRecursively_fallback(src, target);
|
||||
#else
|
||||
const FilePath tar = FilePath::fromString("tar").onDevice(target);
|
||||
const FilePath targetTar = tar.searchInPath();
|
||||
|
||||
const FilePath sTar = FilePath::fromString("tar").onDevice(src);
|
||||
const FilePath sourceTar = sTar.searchInPath();
|
||||
|
||||
if (!targetTar.isExecutableFile() || !sourceTar.isExecutableFile())
|
||||
const bool isSrcOrTargetQrc = src.toFSPathString().startsWith(":/")
|
||||
|| target.toFSPathString().startsWith(":/");
|
||||
|
||||
if (isSrcOrTargetQrc || !targetTar.isExecutableFile() || !sourceTar.isExecutableFile())
|
||||
return copyRecursively_fallback(src, target);
|
||||
|
||||
QtcProcess srcProcess;
|
||||
|
||||
Reference in New Issue
Block a user