From 788638bab869ddd94b9d1967aee9be9c04817ec5 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 13 Jun 2014 15:11:53 +0200 Subject: [PATCH] windeployqt: Remove deleted QML directories from Json output. Rewrite JsonOutput to use a QPair<> of strings and add function to remove all entries of a target directory. Task-number: QTBUG-39626 Change-Id: Ie4602deb45d60fdddab27f264ecf34b72f839254 Reviewed-by: Andrew Knight --- src/windeployqt/utils.h | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/windeployqt/utils.h b/src/windeployqt/utils.h index 8a520c7..f184b51 100644 --- a/src/windeployqt/utils.h +++ b/src/windeployqt/utils.h @@ -95,27 +95,43 @@ inline std::wostream &operator<<(std::wostream &str, const QString &s) // Container class for JSON output class JsonOutput { + typedef QPair SourceTargetMapping; + typedef QList SourceTargetMappings; + public: void addFile(const QString &source, const QString &target) { - QJsonObject object; - object.insert(QStringLiteral("source"), QDir::toNativeSeparators(source)); - object.insert(QStringLiteral("target"), QDir::toNativeSeparators(target)); - m_files.append(object); + m_files.append(SourceTargetMapping(source, target)); } + + void removeTargetDirectory(const QString &targetDirectory) + { + for (int i = m_files.size() - 1; i >= 0; --i) { + if (m_files.at(i).second == targetDirectory) + m_files.removeAt(i); + } + } + QByteArray toJson() const { QJsonObject document; - document.insert(QStringLiteral("files"), m_files); + QJsonArray files; + foreach (const SourceTargetMapping &mapping, m_files) { + QJsonObject object; + object.insert(QStringLiteral("source"), QDir::toNativeSeparators(mapping.first)); + object.insert(QStringLiteral("target"), QDir::toNativeSeparators(mapping.second)); + files.append(object); + } + document.insert(QStringLiteral("files"), files); return QJsonDocument(document).toJson(); } QByteArray toList(ListOption option, const QDir &base) const { QByteArray list; - foreach (const QJsonValue &file, m_files) { - const QString source = file.toObject().value(QStringLiteral("source")).toString(); - const QString fileName = QFileInfo(source).fileName(); - const QString target = file.toObject().value(QStringLiteral("target")).toString() + QDir::separator() + fileName; + foreach (const SourceTargetMapping &mapping, m_files) { + const QString source = QDir::toNativeSeparators(mapping.first); + const QString fileName = QFileInfo(mapping.first).fileName(); + const QString target = QDir::toNativeSeparators(mapping.second) + QDir::separator() + fileName; switch (option) { case ListNone: break; @@ -136,7 +152,7 @@ public: return list; } private: - QJsonArray m_files; + SourceTargetMappings m_files; }; #ifdef Q_OS_WIN @@ -295,6 +311,8 @@ bool updateFile(const QString &sourceFileName, .arg(QDir::toNativeSeparators(targetFileName)); return false; } + if (json) + json->removeTargetDirectory(targetFileName); } } return true; -- 2.7.4