diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-01-03 13:40:37 +0200 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-01-17 17:12:16 +0000 |
commit | df604d105d2cdf28bc9fbd2aa63ed5cef9aaeca2 (patch) | |
tree | 49059fe613d4ea8548645540ba2d05071d4dfad8 | |
parent | de7faccc1d674822958ee1fe5e60eb20a117d96d (diff) |
CLI: Add <TreeName> value to 'list' and 'search' command outputs
Print both 'TreeName' element and 'moveChildren' attribute value with
detailed verbosity mode.
Also use QXmlStreamWriter to write the output documents with
deterministic attribute order, QDomElement stores the attributes
internally in a QMultiHash map, which is randomized.
Task-number: QTIFW-2452
Change-Id: I8eec64d39394f4092f8505ec99869165c82d11da
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
-rw-r--r-- | src/libs/installer/loggingutils.cpp | 137 | ||||
-rw-r--r-- | tests/auto/installer/cliinterface/tst_cliinterface.cpp | 32 |
2 files changed, 100 insertions, 69 deletions
diff --git a/src/libs/installer/loggingutils.cpp b/src/libs/installer/loggingutils.cpp index a2b561c53..e0bff7b2b 100644 --- a/src/libs/installer/loggingutils.cpp +++ b/src/libs/installer/loggingutils.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2021 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -35,7 +35,7 @@ #include "remoteclient.h" #include "remotefileengine.h" -#include <QDomDocument> +#include <QXmlStreamWriter> #include <QElapsedTimer> #include <iostream> @@ -252,19 +252,24 @@ bool LoggingHandler::outputRedirected() const */ void LoggingHandler::printUpdateInformation(const QList<Component *> components) const { - QDomDocument doc; - QDomElement root = doc.createElement(QLatin1String("updates")); - doc.appendChild(root); + QString output; + QXmlStreamWriter stream(&output); + stream.setAutoFormatting(true); + stream.writeStartDocument(); + stream.writeStartElement(QLatin1String("updates")); foreach (const Component *component, components) { - QDomElement update = doc.createElement(QLatin1String("update")); - update.setAttribute(QLatin1String("name"), component->value(scDisplayName)); - update.setAttribute(QLatin1String("version"), component->value(scVersion)); - update.setAttribute(QLatin1String("size"), component->value(scUncompressedSize)); - update.setAttribute(QLatin1String("id"), component->value(scName)); - root.appendChild(update); + stream.writeStartElement(QLatin1String("update")); + stream.writeAttribute(QLatin1String("name"), component->value(scDisplayName)); + stream.writeAttribute(QLatin1String("version"), component->value(scVersion)); + stream.writeAttribute(QLatin1String("size"), component->value(scUncompressedSize)); + stream.writeAttribute(QLatin1String("id"), component->value(scName)); + stream.writeEndElement(); } - std::cout << qPrintable(doc.toString(4)); + stream.writeEndElement(); + + stream.writeEndDocument(); + std::cout << qPrintable(output); } /*! @@ -273,28 +278,36 @@ void LoggingHandler::printUpdateInformation(const QList<Component *> components) */ void LoggingHandler::printLocalPackageInformation(const QList<KDUpdater::LocalPackage> &packages) const { - QDomDocument doc; - QDomElement root = doc.createElement(QLatin1String("localpackages")); - doc.appendChild(root); + QString output; + QXmlStreamWriter stream(&output); + stream.setAutoFormatting(true); + stream.writeStartDocument(); + + stream.writeStartElement(QLatin1String("localpackages")); foreach (KDUpdater::LocalPackage package, packages) { - QDomElement update = doc.createElement(QLatin1String("package")); - update.setAttribute(QLatin1String("name"), package.name); - update.setAttribute(QLatin1String("displayname"), package.title); - update.setAttribute(QLatin1String("version"), package.version); + stream.writeStartElement(QLatin1String("package")); + stream.writeAttribute(QLatin1String("name"), package.name); + stream.writeAttribute(QLatin1String("displayname"), package.title); + stream.writeAttribute(QLatin1String("version"), package.version); if (verboseLevel() == VerbosityLevel::Detailed) { - update.setAttribute(QLatin1String("description"), package.description); - update.setAttribute(QLatin1String("dependencies"), package.dependencies.join(QLatin1Char(','))); - update.setAttribute(QLatin1String("autoDependencies"), package.autoDependencies.join(QLatin1Char(','))); - update.setAttribute(QLatin1String("virtual"), package.virtualComp); - update.setAttribute(QLatin1String("forcedInstallation"), package.forcedInstallation); - update.setAttribute(QLatin1String("checkable"), package.checkable); - update.setAttribute(QLatin1String("uncompressedSize"), package.uncompressedSize); - update.setAttribute(QLatin1String("installDate"), package.installDate.toString()); - update.setAttribute(QLatin1String("lastUpdateDate"), package.lastUpdateDate.toString()); + stream.writeAttribute(QLatin1String("description"), package.description); + stream.writeAttribute(QLatin1String("treeName"), package.treeName.first); + stream.writeAttribute(QLatin1String("moveChildren"), QVariant(package.treeName.second).toString()); + stream.writeAttribute(QLatin1String("dependencies"), package.dependencies.join(QLatin1Char(','))); + stream.writeAttribute(QLatin1String("autoDependencies"), package.autoDependencies.join(QLatin1Char(','))); + stream.writeAttribute(QLatin1String("virtual"), QVariant(package.virtualComp).toString()); + stream.writeAttribute(QLatin1String("forcedInstallation"), QVariant(package.forcedInstallation).toString()); + stream.writeAttribute(QLatin1String("checkable"), QVariant(package.checkable).toString()); + stream.writeAttribute(QLatin1String("uncompressedSize"), QVariant(package.uncompressedSize).toString()); + stream.writeAttribute(QLatin1String("installDate"), package.installDate.toString()); + stream.writeAttribute(QLatin1String("lastUpdateDate"), package.lastUpdateDate.toString()); } - root.appendChild(update); + stream.writeEndElement(); } - std::cout << qPrintable(doc.toString(4)); + stream.writeEndElement(); + + stream.writeEndDocument(); + std::cout << qPrintable(output); } /*! @@ -304,41 +317,49 @@ void LoggingHandler::printLocalPackageInformation(const QList<KDUpdater::LocalPa */ void LoggingHandler::printPackageInformation(const PackagesList &matchedPackages, const LocalPackagesHash &installedPackages) const { - QDomDocument doc; - QDomElement root = doc.createElement(QLatin1String("availablepackages")); - doc.appendChild(root); + QString output; + QXmlStreamWriter stream(&output); + stream.setAutoFormatting(true); + stream.writeStartDocument(); + + stream.writeStartElement(QLatin1String("availablepackages")); foreach (Package *package, matchedPackages) { const QString name = package->data(scName).toString(); - QDomElement update = doc.createElement(QLatin1String("package")); - update.setAttribute(QLatin1String("name"), name); - update.setAttribute(QLatin1String("displayname"), package->data(scDisplayName).toString()); - update.setAttribute(QLatin1String("version"), package->data(scVersion).toString()); + stream.writeStartElement(QLatin1String("package")); + stream.writeAttribute(QLatin1String("name"), name); + stream.writeAttribute(QLatin1String("displayname"), package->data(scDisplayName).toString()); + stream.writeAttribute(QLatin1String("version"), package->data(scVersion).toString()); //Check if package already installed if (installedPackages.contains(name)) - update.setAttribute(QLatin1String("installedVersion"), installedPackages.value(name).version); + stream.writeAttribute(QLatin1String("installedVersion"), installedPackages.value(name).version); if (verboseLevel() == VerbosityLevel::Detailed) { - update.setAttribute(QLatin1String("description"), package->data(scDescription).toString()); - update.setAttribute(QLatin1String("dependencies"), package->data(scDependencies).toString()); - update.setAttribute(QLatin1String("autoDependencies"), package->data(scAutoDependOn).toString()); - update.setAttribute(QLatin1String("virtual"), package->data(scVirtual).toString()); - update.setAttribute(QLatin1String("forcedInstallation"), package->data(QLatin1String("ForcedInstallation")).toString()); - update.setAttribute(QLatin1String("checkable"), package->data(scCheckable).toString()); - update.setAttribute(QLatin1String("default"), package->data(scDefault).toString()); - update.setAttribute(QLatin1String("essential"), package->data(scEssential).toString()); - update.setAttribute(QLatin1String("forcedUpdate"), package->data(scForcedUpdate).toString()); - update.setAttribute(QLatin1String("compressedsize"), package->data(QLatin1String("CompressedSize")).toString()); - update.setAttribute(QLatin1String("uncompressedsize"), package->data(QLatin1String("UncompressedSize")).toString()); - update.setAttribute(QLatin1String("releaseDate"), package->data(scReleaseDate).toString()); - update.setAttribute(QLatin1String("downloadableArchives"), package->data(scDownloadableArchives).toString()); - update.setAttribute(QLatin1String("licenses"), package->data(QLatin1String("Licenses")).toString()); - update.setAttribute(QLatin1String("script"), package->data(scScript).toString()); - update.setAttribute(QLatin1String("sortingPriority"), package->data(scSortingPriority).toString()); - update.setAttribute(QLatin1String("replaces"), package->data(scReplaces).toString()); - update.setAttribute(QLatin1String("requiresAdminRights"), package->data(scRequiresAdminRights).toString()); + stream.writeAttribute(QLatin1String("description"), package->data(scDescription).toString()); + stream.writeAttribute(QLatin1String("treeName"), package->data(scTreeName).value<QPair<QString, bool>>().first); + stream.writeAttribute(QLatin1String("moveChildren"), QVariant(package->data(scTreeName).value<QPair<QString, bool>>().second).toString()); + stream.writeAttribute(QLatin1String("dependencies"), package->data(scDependencies).toString()); + stream.writeAttribute(QLatin1String("autoDependencies"), package->data(scAutoDependOn).toString()); + stream.writeAttribute(QLatin1String("virtual"), package->data(scVirtual).toString()); + stream.writeAttribute(QLatin1String("forcedInstallation"), package->data(QLatin1String("ForcedInstallation")).toString()); + stream.writeAttribute(QLatin1String("checkable"), package->data(scCheckable).toString()); + stream.writeAttribute(QLatin1String("default"), package->data(scDefault).toString()); + stream.writeAttribute(QLatin1String("essential"), package->data(scEssential).toString()); + stream.writeAttribute(QLatin1String("forcedUpdate"), package->data(scForcedUpdate).toString()); + stream.writeAttribute(QLatin1String("compressedsize"), package->data(QLatin1String("CompressedSize")).toString()); + stream.writeAttribute(QLatin1String("uncompressedsize"), package->data(QLatin1String("UncompressedSize")).toString()); + stream.writeAttribute(QLatin1String("releaseDate"), package->data(scReleaseDate).toString()); + stream.writeAttribute(QLatin1String("downloadableArchives"), package->data(scDownloadableArchives).toString()); + stream.writeAttribute(QLatin1String("licenses"), package->data(QLatin1String("Licenses")).toString()); + stream.writeAttribute(QLatin1String("script"), package->data(scScript).toString()); + stream.writeAttribute(QLatin1String("sortingPriority"), package->data(scSortingPriority).toString()); + stream.writeAttribute(QLatin1String("replaces"), package->data(scReplaces).toString()); + stream.writeAttribute(QLatin1String("requiresAdminRights"), package->data(scRequiresAdminRights).toString()); } - root.appendChild(update); + stream.writeEndElement(); } - std::cout << qPrintable(doc.toString(4)); + stream.writeEndElement(); + + stream.writeEndDocument(); + std::cout << qPrintable(output); } /*! diff --git a/tests/auto/installer/cliinterface/tst_cliinterface.cpp b/tests/auto/installer/cliinterface/tst_cliinterface.cpp index e5a819aec..c87e0acc6 100644 --- a/tests/auto/installer/cliinterface/tst_cliinterface.cpp +++ b/tests/auto/installer/cliinterface/tst_cliinterface.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2021 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -56,32 +56,38 @@ private slots: QLoggingCategory::setFilterRules(loggingRules); auto func = &PackageManagerCore::listAvailablePackages; - verifyListPackagesMessage(core.get(), QLatin1String("<availablepackages>\n" + verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n" + "<availablepackages>\n" " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n" " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n" " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n" " <package name=\"C\" displayname=\"C\" version=\"1.0.0-1\"/>\n" "</availablepackages>\n"), func, QLatin1String("."), QHash<QString, QString>()); - verifyListPackagesMessage(core.get(), QLatin1String("<availablepackages>\n" + verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n" + "<availablepackages>\n" " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n" " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n" "</availablepackages>\n"), func, QLatin1String("A"), QHash<QString, QString>()); - verifyListPackagesMessage(core.get(), QLatin1String("<availablepackages>\n" + verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n" + "<availablepackages>\n" " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n" " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n" "</availablepackages>\n"), func, QLatin1String("A.*"), QHash<QString, QString>()); - verifyListPackagesMessage(core.get(), QLatin1String("<availablepackages>\n" + verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n" + "<availablepackages>\n" " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n" "</availablepackages>\n"), func, QLatin1String("^B"), QHash<QString, QString>()); - verifyListPackagesMessage(core.get(), QLatin1String("<availablepackages>\n" + verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n" + "<availablepackages>\n" " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n" "</availablepackages>\n"), func, QLatin1String("^B.*"), QHash<QString, QString>()); - verifyListPackagesMessage(core.get(), QLatin1String("<availablepackages>\n" + verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n" + "<availablepackages>\n" " <package name=\"C\" displayname=\"C\" version=\"1.0.0-1\"/>\n" "</availablepackages>\n"), func, QLatin1String("^C"), QHash<QString, QString>()); @@ -90,14 +96,16 @@ private slots: { "Version", "1.0.2" }, { "DisplayName", "A" } }; - verifyListPackagesMessage(core.get(), QLatin1String("<availablepackages>\n" + verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n" + "<availablepackages>\n" " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n" " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n" "</availablepackages>\n"), func, QString(), searchHash); searchHash.clear(); searchHash.insert("Default", "false"); - verifyListPackagesMessage(core.get(), QLatin1String("<availablepackages>\n" + verifyListPackagesMessage(core.get(), QLatin1String("<?xml version=\"1.0\"?>\n" + "<availablepackages>\n" " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n" "</availablepackages>\n"), func, QString(), searchHash); @@ -195,12 +203,14 @@ private slots: core.setValue(scTargetDir, testDirectory); - verifyListPackagesMessage(&core, QLatin1String("<localpackages>\n" + verifyListPackagesMessage(&core, QLatin1String("<?xml version=\"1.0\"?>\n" + "<localpackages>\n" " <package name=\"A\" displayname=\"A Title\" version=\"1.0.2-1\"/>\n" " <package name=\"B\" displayname=\"B Title\" version=\"1.0.0-1\"/>\n" "</localpackages>\n"), func, QString()); - verifyListPackagesMessage(&core, QLatin1String("<localpackages>\n" + verifyListPackagesMessage(&core, QLatin1String("<?xml version=\"1.0\"?>\n" + "<localpackages>\n" " <package name=\"A\" displayname=\"A Title\" version=\"1.0.2-1\"/>\n" "</localpackages>\n"), func, QLatin1String("A")); |