diff options
Diffstat (limited to 'src/libs/installer/loggingutils.cpp')
-rw-r--r-- | src/libs/installer/loggingutils.cpp | 199 |
1 files changed, 130 insertions, 69 deletions
diff --git a/src/libs/installer/loggingutils.cpp b/src/libs/installer/loggingutils.cpp index 0ebba10db..9a36720dd 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. @@ -29,13 +29,14 @@ #include "loggingutils.h" #include "component.h" -#include "localpackagehub.h" +#include "componentalias.h" #include "globals.h" #include "fileutils.h" +#include "packagemanagercore.h" #include "remoteclient.h" #include "remotefileengine.h" -#include <QDomDocument> +#include <QXmlStreamWriter> #include <QElapsedTimer> #include <iostream> @@ -111,6 +112,7 @@ public: */ LoggingHandler::LoggingHandler() : m_verbLevel(VerbosityLevel::Silent) + , m_outputRedirected(false) { #if defined(Q_OS_UNIX) m_outputRedirected = !isatty(fileno(stdout)); @@ -133,6 +135,8 @@ LoggingHandler::~LoggingHandler() */ void LoggingHandler::messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { + QMutexLocker _(&m_mutex); + // suppress warning from QPA minimal plugin if (msg.contains(QLatin1String("This plugin does not support propagateSizeHints"))) return; @@ -145,10 +149,7 @@ void LoggingHandler::messageHandler(QtMsgType type, const QMessageLogContext &co static Uptime uptime; - QString ba; - if (context.category != lcPackageInfo().categoryName()) { - ba = QLatin1Char('[') + QString::number(uptime.elapsed()) + QStringLiteral("] "); - } + QString ba = QLatin1Char('[') + QString::number(uptime.elapsed()) + QStringLiteral("] "); ba += trimAndPrepend(type, msg); if (type != QtDebugMsg && context.file) { @@ -251,23 +252,28 @@ bool LoggingHandler::outputRedirected() const } /*! - Prints basic information about \a components. + Prints update information from \a components. */ -void LoggingHandler::printComponentInfo(const QList<Component *> components) const +void LoggingHandler::printUpdateInformation(const QList<Component *> &components) const { - QDomDocument doc; - QDomElement root = doc.createElement(QLatin1String("updates")); - doc.appendChild(root); - - foreach (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); + QString output; + QXmlStreamWriter stream(&output); + stream.setAutoFormatting(true); + stream.writeStartDocument(); + + stream.writeStartElement(QLatin1String("updates")); + foreach (const Component *component, components) { + 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(); } - qCDebug(lcPackageInfo) << qPrintable(doc.toString(4)); + stream.writeEndElement(); + + stream.writeEndDocument(); + std::cout << qPrintable(output); } /*! @@ -276,28 +282,37 @@ void LoggingHandler::printComponentInfo(const QList<Component *> components) con */ 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("sortingPriority"), QVariant(package.sortingPriority).toString()); + 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(); } - qCDebug(lcPackageInfo) << qPrintable(doc.toString(4)); + stream.writeEndElement(); + + stream.writeEndDocument(); + std::cout << qPrintable(output); } /*! @@ -305,43 +320,89 @@ void LoggingHandler::printLocalPackageInformation(const QList<KDUpdater::LocalPa depending on the current verbosity level. If a package is also present in \a installedPackages, the installed version will be included in printed information. */ -void LoggingHandler::printPackageInformation(const PackagesList &matchedPackages, const LocalPackagesHash &installedPackages) const +void LoggingHandler::printPackageInformation(const PackagesList &matchedPackages, const LocalPackagesMap &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(); } - qCDebug(lcPackageInfo) << qPrintable(doc.toString(4)); + stream.writeEndElement(); + + stream.writeEndDocument(); + std::cout << qPrintable(output); +} + +/*! + Prints basic or more detailed information about component \a aliases, + depending on the current verbosity level. +*/ +void LoggingHandler::printAliasInformation(const QList<ComponentAlias *> &aliases) +{ + QList<ComponentAlias *> sortedAliases = aliases; + std::sort(sortedAliases.begin(), sortedAliases.end(), + [](const ComponentAlias *lhs, const ComponentAlias *rhs) { + return lhs->name() < rhs->name(); + } + ); + + QString output; + QTextStream stream(&output); + + stream << Qt::endl; + for (auto *alias : qAsConst(sortedAliases)) { + stream << "Name: " << alias->name() << Qt::endl; + stream << "Display name: " << alias->displayName() << Qt::endl; + stream << "Description: " << alias->description() << Qt::endl; + stream << "Version: " << alias->version() << Qt::endl; + if (verboseLevel() == VerbosityLevel::Detailed) + stream << "Virtual: " << alias->value(scVirtual) << Qt::endl; + + stream << "Components: " << alias->value(scRequiredComponents) << Qt::endl; + stream << "Required aliases: " << alias->value(scRequiredAliases) << Qt::endl; + + stream << "Optional components: " << alias->value(scOptionalComponents) << Qt::endl; + stream << "Optional aliases: " << alias->value(scOptionalAliases) << Qt::endl; + + if (sortedAliases.indexOf(alias) != (sortedAliases.count() - 1)) + stream << "========================================" << Qt::endl; + } + + std::cout << qPrintable(output); } /*! @@ -421,7 +482,7 @@ VerboseWriter *VerboseWriter::instance() */ void VerboseWriter::appendLine(const QString &msg) { - m_stream << msg << endl; + m_stream << msg << Qt::endl; } /*! |