Wrap all use of std::filesystem in ifdefs to fix legacy build for <macOS 10.15
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 26 Mar 2024 16:58:22 +0000 (00:58 +0800)
committerClaudio Cambra <developer@claudiocambra.com>
Thu, 28 Mar 2024 11:11:57 +0000 (19:11 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/libsync/filesystem.cpp
src/libsync/filesystem.h
src/libsync/owncloudpropagator.cpp
src/libsync/propagatedownload.cpp
src/libsync/propagatedownload.h
src/libsync/propagatorjobs.cpp

index 2d5f27f76547a871ea001d083055353ffab1dc55..942b635ffeaec6a433ae890f00d5a405cbc24a69 100644 (file)
@@ -194,6 +194,7 @@ bool FileSystem::getInode(const QString &filename, quint64 *inode)
     return false;
 }
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
 bool FileSystem::setFolderPermissions(const QString &path,
                                       FileSystem::FolderPermissions permissions) noexcept
 {
@@ -330,6 +331,7 @@ bool FileSystem::setFolderPermissions(const QString &path,
     }
 #endif
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
     try {
         switch (permissions) {
         case OCC::FileSystem::FolderPermissions::ReadOnly:
@@ -344,6 +346,7 @@ bool FileSystem::setFolderPermissions(const QString &path,
         qCWarning(lcFileSystem()) << "exception when modifying folder permissions" << e.what() << e.path1().c_str() << e.path2().c_str();
         return false;
     }
+#endif
 
     return true;
 }
@@ -361,6 +364,6 @@ bool FileSystem::isFolderReadOnly(const std::filesystem::path &path) noexcept
         return false;
     }
 }
-
+#endif
 
 } // namespace OCC
index 102a79f5563cea18ee728278319f78807c7754fb..0a1b68a29a58f7276e6bed2159abcf11ff08e1f8 100644 (file)
@@ -23,7 +23,9 @@
 
 #include <ctime>
 #include <functional>
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
 #include <filesystem>
+#endif
 
 class QFile;
 
@@ -101,7 +103,9 @@ namespace FileSystem {
     bool OWNCLOUDSYNC_EXPORT setFolderPermissions(const QString &path,
                                                   FileSystem::FolderPermissions permissions) noexcept;
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
     bool OWNCLOUDSYNC_EXPORT isFolderReadOnly(const std::filesystem::path &path) noexcept;
+#endif
 }
 
 /** @} */
index 28c0c18c3e769119371852e9a1a5aac238f82b66..a4d21a2e3b85c646722fa686af76e431438e6d48 100644 (file)
@@ -1443,6 +1443,7 @@ void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status)
             || _item->_instruction == CSYNC_INSTRUCTION_NEW
             || _item->_instruction == CSYNC_INSTRUCTION_UPDATE_METADATA) {
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
             if (!_item->_remotePerm.isNull() &&
                 !_item->_remotePerm.hasPermission(RemotePermissions::CanAddFile) &&
                 !_item->_remotePerm.hasPermission(RemotePermissions::CanRename) &&
@@ -1494,6 +1495,7 @@ void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status)
                     _item->_errorString = tr("The folder %1 cannot be made read-only: %2").arg(e.path1().c_str(), e.what());
                 }
             }
+#endif
 
             const auto result = propagator()->updateMetadata(*_item);
             if (!result) {
index a690650fe523b0510f4926140a2e26390f103ced..1faf04410a2d7a3e54a13b77f4eef2fd51ce0936 100644 (file)
@@ -673,6 +673,7 @@ void PropagateDownloadFile::startDownload()
         FileSystem::setFileReadOnly(_tmpFile.fileName(), false);
     }
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
     try {
         const auto newDirPath = std::filesystem::path{_tmpFile.fileName().toStdWString()};
         Q_ASSERT(newDirPath.has_parent_path());
@@ -688,6 +689,7 @@ void PropagateDownloadFile::startDownload()
         emit propagator()->touchedFile(QString::fromStdWString(_parentPath.wstring()));
         _needParentFolderRestorePermissions = true;
     }
+#endif
 
     if (!_tmpFile.open(QIODevice::Append | QIODevice::Unbuffered)) {
         qCWarning(lcPropagateDownload) << "could not open temporary file" << _tmpFile.fileName();
@@ -1287,11 +1289,13 @@ void PropagateDownloadFile::downloadFinished()
         return;
     }
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
     if (_needParentFolderRestorePermissions) {
         FileSystem::setFolderPermissions(QString::fromStdWString(_parentPath.wstring()), FileSystem::FolderPermissions::ReadWrite);
         emit propagator()->touchedFile(QString::fromStdWString(_parentPath.wstring()));
         _needParentFolderRestorePermissions = false;
     }
+#endif
 
     FileSystem::setFileHidden(filename, false);
 
index 23c72f0aebaea39f44dfc3b18e17fddf0d42405d..87aec08dca0a836cc445b1bd6fd0e3a112345b59 100644 (file)
@@ -23,7 +23,9 @@
 #include <QBuffer>
 #include <QFile>
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
 #include <filesystem>
+#endif
 
 namespace OCC {
 class PropagateDownloadEncrypted;
@@ -263,7 +265,9 @@ private:
 
     PropagateDownloadEncrypted *_downloadEncryptedHelper = nullptr;
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
     std::filesystem::path _parentPath;
+#endif
     bool _needParentFolderRestorePermissions = false;
 };
 }
index 41b253bb0987444f7ddc1b2d3473abed1b77539b..21390cb08461e5da12b078413fdbf727fdc1c8c2 100644 (file)
@@ -32,7 +32,9 @@
 #include <qstack.h>
 #include <QCoreApplication>
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
 #include <filesystem>
+#endif
 #include <ctime>
 
 
@@ -60,7 +62,9 @@ bool PropagateLocalRemove::removeRecursively(const QString &path)
     QString absolute = propagator()->fullLocalPath(_item->_file + path);
     QStringList errors;
     QList<QPair<QString, bool>> deleted;
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
     FileSystem::setFolderPermissions(absolute, FileSystem::FolderPermissions::ReadWrite);
+#endif
     bool success = FileSystem::removeRecursively(
         absolute,
         [&deleted](const QString &path, bool isDir) {
@@ -184,6 +188,7 @@ void PropagateLocalMkdir::startLocalMkdir()
         return;
     }
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
     auto parentFolderPath = std::filesystem::path{};
     auto parentNeedRollbackPermissions = false;
     try {
@@ -200,6 +205,7 @@ void PropagateLocalMkdir::startLocalMkdir()
     {
         qCWarning(lcPropagateLocalMkdir) << "exception when checking parent folder access rights" << e.what() << e.path1().c_str() << e.path2().c_str();
     }
+#endif
 
     emit propagator()->touchedFile(newDirStr);
     QDir localDir(propagator()->localPath());
@@ -208,6 +214,7 @@ void PropagateLocalMkdir::startLocalMkdir()
         return;
     }
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
     if (!_item->_remotePerm.isNull() &&
         !_item->_remotePerm.hasPermission(RemotePermissions::CanAddFile) &&
         !_item->_remotePerm.hasPermission(RemotePermissions::CanRename) &&
@@ -234,6 +241,7 @@ void PropagateLocalMkdir::startLocalMkdir()
     {
         qCWarning(lcPropagateLocalMkdir) << "exception when checking parent folder access rights" << e.what() << e.path1().c_str() << e.path2().c_str();
     }
+#endif
 
     // Insert the directory into the database. The correct etag will be set later,
     // once all contents have been propagated, because should_update_metadata is true.
@@ -304,6 +312,7 @@ void PropagateLocalRename::start()
             return;
         }
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
         auto targetParentFolderPath = std::filesystem::path{};
         auto targetParentFolderWasReadOnly = false;
         try {
@@ -348,27 +357,31 @@ void PropagateLocalRename::start()
                 qCWarning(lcPropagateLocalRename) << "exception when checking parent folder access rights" << e.what() << e.path1().c_str() << e.path2().c_str();
             }
         };
+#endif
 
         emit propagator()->touchedFile(existingFile);
         emit propagator()->touchedFile(targetFile);
         if (QString renameError; !FileSystem::rename(existingFile, targetFile, &renameError)) {
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
             if (targetParentFolderWasReadOnly) {
                 restoreTargetPermissions(targetParentFolderPath);
             }
             if (originParentFolderWasReadOnly) {
                 restoreTargetPermissions(originParentFolderPath);
             }
-
+#endif
             done(SyncFileItem::NormalError, renameError, ErrorCategory::GenericError);
             return;
         }
 
+#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
         if (targetParentFolderWasReadOnly) {
             restoreTargetPermissions(targetParentFolderPath);
         }
         if (originParentFolderWasReadOnly) {
             restoreTargetPermissions(originParentFolderPath);
         }
+#endif
     }
 
     SyncJournalFileRecord oldRecord;