windeployqt: Clear read-only attribute when copying files.
authorFriedemann Kleint <Friedemann.Kleint@digia.com>
Thu, 10 Jul 2014 08:55:15 +0000 (10:55 +0200)
committerFriedemann Kleint <Friedemann.Kleint@digia.com>
Thu, 10 Jul 2014 09:11:28 +0000 (11:11 +0200)
The deletion of the empty QML directories fails when not doing so.

Task-number: QTBUG-40152
Change-Id: I0ff78440646239897b4867c3b3cfe1af8b2769f9
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
src/windeployqt/utils.h

index f184b51..9665bea 100644 (file)
@@ -337,13 +337,23 @@ bool updateFile(const QString &sourceFileName,
     QFile file(sourceFileName);
     if (optVerboseLevel)
         std::wcout << "Updating " << sourceFileInfo.fileName() << ".\n";
-    if (!(flags & SkipUpdateFile) && !file.copy(targetFileName)) {
-        *errorMessage = QString::fromLatin1("Cannot copy %1 to %2: %3")
+    if (!(flags & SkipUpdateFile)) {
+        if (!file.copy(targetFileName)) {
+            *errorMessage = QString::fromLatin1("Cannot copy %1 to %2: %3")
                 .arg(QDir::toNativeSeparators(sourceFileName),
                      QDir::toNativeSeparators(targetFileName),
                      file.errorString());
-        return false;
-    }
+            return false;
+        }
+        if (!(file.permissions() & QFile::WriteUser)) { // QTBUG-40152, clear inherited read-only attribute
+            QFile targetFile(targetFileName);
+            if (!targetFile.setPermissions(targetFile.permissions() | QFile::WriteUser)) {
+                *errorMessage = QString::fromLatin1("Cannot set write permission on %1: %2")
+                    .arg(QDir::toNativeSeparators(targetFileName), file.errorString());
+                return false;
+            }
+        } // Check permissions
+    } // !SkipUpdateFile
     if (json)
         json->addFile(sourceFileName, targetDirectory);
     return true;