diff options
author | Katja Marttila <katja.marttila@qt.io> | 2019-05-29 14:04:57 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2019-11-19 09:38:04 +0000 |
commit | 48a43de0be59639b16962ec04f1a4e07141abaf0 (patch) | |
tree | e79773f2c5acfc974a65646ffe60ca0b7355c9a0 /src/libs/installer | |
parent | 3bd4e7d632967b1bf77120918700c11f83318166 (diff) |
List available packages from command line
Available packages can be listed from command line with
--listPackages <regexp>. All packages can be listed with --listPackages
. . By default package id, name and version are listed in output. In
case you want to see all the packet information use logging category
--logging-rules ifw.package.*=true. See --help for more detailed
information on how to use logging category.
Change-Id: Ic0815d2274643e3fb3f0670ed9036fe765805c0e
Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
Diffstat (limited to 'src/libs/installer')
-rw-r--r-- | src/libs/installer/globals.cpp | 69 | ||||
-rw-r--r-- | src/libs/installer/globals.h | 23 | ||||
-rw-r--r-- | src/libs/installer/metadatajob.cpp | 9 | ||||
-rw-r--r-- | src/libs/installer/metadatajob.h | 11 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 45 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.h | 2 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 7 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.h | 2 |
8 files changed, 157 insertions, 11 deletions
diff --git a/src/libs/installer/globals.cpp b/src/libs/installer/globals.cpp index 48195f0dd..a2177bc43 100644 --- a/src/libs/installer/globals.cpp +++ b/src/libs/installer/globals.cpp @@ -34,6 +34,28 @@ const char IFW_RESOURCES[] = "ifw.resources"; const char IFW_TRANSLATIONS[] = "ifw.translations"; const char IFW_NETWORK[] = "ifw.network"; +const char IFW_PACKAGE_DISPLAYNAME[] = "ifw.package.displayname"; +const char IFW_PACKAGE_DESCRIPTION[] = "ifw.package.description"; +const char IFW_PACKAGE_VERSION[] = "ifw.package.version"; +const char IFW_PACKAGE_INSTALLEDVERSION[] = "ifw.package.installedversion"; +const char IFW_PACKAGE_RELEASEDATE[] = "ifw.package.releasedate"; +const char IFW_PACKAGE_NAME[] = "ifw.package.name"; +const char IFW_PACKAGE_DEPENDENCIES[] = "ifw.package.dependencies"; +const char IFW_PACKAGE_AUTODEPENDON[] = "ifw.package.autodependon"; +const char IFW_PACKAGE_VIRTUAL[] = "ifw.package.virtual"; +const char IFW_PACKAGE_SORTINGPRIORITY[] = "ifw.package.sortingpriority"; +const char IFW_PACKAGE_SCRIPT[] = "ifw.package.script"; +const char IFW_PACKAGE_DEFAULT[] = "ifw.package.default"; +const char IFW_PACKAGE_ESSETIAL[] = "ifw.package.essential"; +const char IFW_PACKAGE_FORCEDINSTALLATION[] = "ifw.package.forcedinstallation"; +const char IFW_PACKAGE_REPLACES[] = "ifw.package.replaces"; +const char IFW_PACKAGE_DOWNLOADABLEARCHIVES[] = "ifw.package.downloadablearchives"; +const char IFW_PACKAGE_REQUIRESADMINRIGHTS[] = "ifw.package.requiresadminrights"; +const char IFW_PACKAGE_CHECKABLE[] = "ifw.package.checkable"; +const char IFW_PACKAGE_LICENSES[] = "ifw.package.licenses"; +const char IFW_PACKAGE_COMPRESSEDSIZE[] = "ifw.package.compressedsize"; +const char IFW_PACKAGE_UNCOMPRESSEDSIZE[] = "ifw.package.uncompressedsize"; + namespace QInstaller { @@ -42,14 +64,59 @@ Q_LOGGING_CATEGORY(lcResources, IFW_RESOURCES) Q_LOGGING_CATEGORY(lcTranslations, IFW_TRANSLATIONS) Q_LOGGING_CATEGORY(lcNetwork, IFW_NETWORK) +Q_LOGGING_CATEGORY(lcPackageDisplayname, IFW_PACKAGE_DISPLAYNAME); +Q_LOGGING_CATEGORY(lcPackageDescription, IFW_PACKAGE_DESCRIPTION) +Q_LOGGING_CATEGORY(lcPackageVersion, IFW_PACKAGE_VERSION) +Q_LOGGING_CATEGORY(lcPackageInstalledVersion, IFW_PACKAGE_INSTALLEDVERSION) +Q_LOGGING_CATEGORY(lcPackageReleasedate, IFW_PACKAGE_RELEASEDATE) +Q_LOGGING_CATEGORY(lcPackageName, IFW_PACKAGE_NAME) +Q_LOGGING_CATEGORY(lcPackageDependencies, IFW_PACKAGE_DEPENDENCIES) +Q_LOGGING_CATEGORY(lcPackageAutodependon, IFW_PACKAGE_AUTODEPENDON) +Q_LOGGING_CATEGORY(lcPackageVirtual, IFW_PACKAGE_VIRTUAL) +Q_LOGGING_CATEGORY(lcPackageSortingpriority, IFW_PACKAGE_SORTINGPRIORITY) +Q_LOGGING_CATEGORY(lcPackageScript, IFW_PACKAGE_SCRIPT) +Q_LOGGING_CATEGORY(lcPackageDefault, IFW_PACKAGE_DEFAULT) +Q_LOGGING_CATEGORY(lcPackageEssential, IFW_PACKAGE_ESSETIAL) +Q_LOGGING_CATEGORY(lcPackageForcedinstallation, IFW_PACKAGE_FORCEDINSTALLATION) +Q_LOGGING_CATEGORY(lcPackageReplaces, IFW_PACKAGE_REPLACES) +Q_LOGGING_CATEGORY(lcPackageDownloadableArchives, IFW_PACKAGE_DOWNLOADABLEARCHIVES) +Q_LOGGING_CATEGORY(lcPackageRequiresAdminRights, IFW_PACKAGE_REQUIRESADMINRIGHTS) +Q_LOGGING_CATEGORY(lcPackageCheckable, IFW_PACKAGE_CHECKABLE) +Q_LOGGING_CATEGORY(lcPackageLicenses, IFW_PACKAGE_LICENSES) +Q_LOGGING_CATEGORY(lcPackageUncompressedSize, IFW_PACKAGE_UNCOMPRESSEDSIZE) +Q_LOGGING_CATEGORY(lcPackageCompressedSize, IFW_PACKAGE_COMPRESSEDSIZE) + + QStringList loggingCategories() { static QStringList categories = QStringList() << QLatin1String(IFW_COMPONENT_CHECKER) << QLatin1String(IFW_RESOURCES) << QLatin1String(IFW_TRANSLATIONS) - << QLatin1String(IFW_NETWORK); + << QLatin1String(IFW_NETWORK) + << QLatin1String(IFW_PACKAGE_DISPLAYNAME) + << QLatin1String(IFW_PACKAGE_DESCRIPTION) + << QLatin1String(IFW_PACKAGE_VERSION) + << QLatin1String(IFW_PACKAGE_INSTALLEDVERSION) + << QLatin1String(IFW_PACKAGE_RELEASEDATE) + << QLatin1String(IFW_PACKAGE_NAME) + << QLatin1String(IFW_PACKAGE_DEPENDENCIES) + << QLatin1String(IFW_PACKAGE_AUTODEPENDON) + << QLatin1String(IFW_PACKAGE_VIRTUAL) + << QLatin1String(IFW_PACKAGE_SORTINGPRIORITY) + << QLatin1String(IFW_PACKAGE_SCRIPT) + << QLatin1String(IFW_PACKAGE_DEFAULT) + << QLatin1String(IFW_PACKAGE_ESSETIAL) + << QLatin1String(IFW_PACKAGE_FORCEDINSTALLATION) + << QLatin1String(IFW_PACKAGE_REPLACES) + << QLatin1String(IFW_PACKAGE_DOWNLOADABLEARCHIVES) + << QLatin1String(IFW_PACKAGE_REQUIRESADMINRIGHTS) + << QLatin1String(IFW_PACKAGE_CHECKABLE) + << QLatin1String(IFW_PACKAGE_LICENSES) + << QLatin1String(IFW_PACKAGE_UNCOMPRESSEDSIZE) + << QLatin1String(IFW_PACKAGE_COMPRESSEDSIZE); return categories; + } Q_GLOBAL_STATIC_WITH_ARGS(QRegExp, staticCommaRegExp, (QLatin1String("(, |,)"))); diff --git a/src/libs/installer/globals.h b/src/libs/installer/globals.h index b92dfd1bb..d4ad78c55 100644 --- a/src/libs/installer/globals.h +++ b/src/libs/installer/globals.h @@ -40,6 +40,29 @@ INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcResources) INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcTranslations) INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcNetwork) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageDisplayname) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageDescription) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageVersion) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageInstalledVersion) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageReleasedate) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageName) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageDependencies) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageAutodependon) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageVirtual) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageSortingpriority) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageScript) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageDefault) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageEssential) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageForcedinstallation) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageReplaces) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageDownloadableArchives) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageRequiresAdminRights) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageCheckable) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageLicenses) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageUncompressedSize) +INSTALLER_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcPackageCompressedSize) + + QStringList INSTALLER_EXPORT loggingCategories(); QRegExp INSTALLER_EXPORT commaRegExp(); diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index 7d7b46e72..09389aec0 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -54,7 +54,7 @@ static QUrl resolveUrl(const FileTaskResult &result, const QString &url) MetadataJob::MetadataJob(QObject *parent) : Job(parent) , m_core(nullptr) - , m_addCompressedPackages(false) + , m_downloadType(DownloadType::All) , m_downloadableChunkSize(1000) , m_taskNumber(0) { @@ -109,7 +109,7 @@ void MetadataJob::doStart() return; // We can't do anything here without core, so avoid tons of !m_core checks. } const ProductKeyCheck *const productKeyCheck = ProductKeyCheck::instance(); - if (!m_addCompressedPackages) { + if (m_downloadType == DownloadType::All || m_downloadType == DownloadType::UpdatesXML) { emit infoMessage(this, tr("Preparing meta information download...")); const bool onlineInstaller = m_core->isInstaller() && !m_core->isOfflineOnly(); if (onlineInstaller || m_core->isMaintainer()) { @@ -364,7 +364,10 @@ void MetadataJob::xmlTaskFinished() return; if (status == XmlDownloadSuccess) { - if (!fetchMetaDataPackages()) { + if (m_downloadType != DownloadType::UpdatesXML) { + if (!fetchMetaDataPackages()) + emitFinished(); + } else { emitFinished(); } } else if (status == XmlDownloadRetry) { diff --git a/src/libs/installer/metadatajob.h b/src/libs/installer/metadatajob.h index 973275de3..cd4f87cd6 100644 --- a/src/libs/installer/metadatajob.h +++ b/src/libs/installer/metadatajob.h @@ -52,6 +52,13 @@ struct ArchiveMetadata Metadata metaData; }; +enum DownloadType +{ + All, + CompressedPackage, + UpdatesXML +}; + class INSTALLER_EXPORT MetadataJob : public Job { Q_OBJECT @@ -70,7 +77,7 @@ public: QList<Metadata> metadata() const; Repository repositoryForDirectory(const QString &directory) const; void setPackageManagerCore(PackageManagerCore *core) { m_core = core; } - void addCompressedPackages(bool addCompressPackage) { m_addCompressedPackages = addCompressPackage;} + void addDownloadType(DownloadType downloadType) { m_downloadType = downloadType;} QStringList shaMismatchPackages() const { return m_shaMissmatchPackages; } private slots: @@ -102,7 +109,7 @@ private: QFutureWatcher<FileTaskResult> m_metadataTask; QHash<QFutureWatcher<void> *, QObject*> m_unzipTasks; QHash<QFutureWatcher<void> *, QObject*> m_unzipRepositoryTasks; - bool m_addCompressedPackages; + DownloadType m_downloadType; QList<FileTaskItem> m_unzipRepositoryitems; QList<FileTaskResult> m_metadataResult; int m_downloadableChunkSize; diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 2be6eaeb0..4ae994a6d 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -64,6 +64,7 @@ #include <QDesktopServices> #include <QFileDialog> +#include <QRegularExpression> #include "sysinfo.h" #include "updateoperationfactory.h" @@ -1824,6 +1825,50 @@ ComponentModel *PackageManagerCore::updaterComponentModel() const return d->m_updaterModel; } +void PackageManagerCore::listAvailablePackages(const QString ®exp) +{ + d->fetchMetaInformationFromRepositories(DownloadType::UpdatesXML); + + d->addUpdateResourcesFromRepositories(true); + QRegularExpression re(regexp); + const PackagesList &packages = d->remotePackages(); + foreach (const Package *update, packages) { + const QString name = update->data(scName).toString(); + if (re.match(name).hasMatch()) { + printPackageInformation(name, update); + } + } +} + +void PackageManagerCore::printPackageInformation(const QString &name, const Package *update) +{ + qCDebug(QInstaller::lcPackageName) << "Id:" << name; + qCDebug(QInstaller::lcPackageDisplayname) << "\tDisplay name:" << update->data(scDisplayName).toString(); + qCDebug(QInstaller::lcPackageVersion) << "\tVersion:" << update->data(scVersion).toString(); + qCDebug(QInstaller::lcPackageDescription) << "\tDescription: " << update->data(scDescription).toString(); + qCDebug(QInstaller::lcPackageReleasedate) << "\tRelease date: " << update->data(scReleaseDate).toString(); + qCDebug(QInstaller::lcPackageDependencies) << "\tDependencies: " << update->data(scDependencies).toString(); + qCDebug(QInstaller::lcPackageAutodependon) << "\tAutodependon: " << update->data(scAutoDependOn).toString(); + qCDebug(QInstaller::lcPackageVirtual) << "\tVirtual: " << update->data(scVirtual, false).toString(); + qCDebug(QInstaller::lcPackageSortingpriority) << "\tSorting priority: " << update->data(scSortingPriority).toString(); + qCDebug(QInstaller::lcPackageScript) << "\tScript: " << update->data(scScript).toString(); + qCDebug(QInstaller::lcPackageDefault) << "\tDefault: "<< update->data(scDefault, false).toString(); + qCDebug(QInstaller::lcPackageEssential) << "\tEssential: " << update->data(scEssential, false).toString(); + qCDebug(QInstaller::lcPackageForcedinstallation) << "\tForced installation: " << update->data(QLatin1String("ForcedInstallation"), false).toString(); + qCDebug(QInstaller::lcPackageReplaces) << "\tReplaces: " << update->data(scReplaces).toString(); + qCDebug(QInstaller::lcPackageDownloadableArchives) << "\tDownloadable archives: " << update->data(scDownloadableArchives).toString(); + qCDebug(QInstaller::lcPackageRequiresAdminRights) << "\tRequires admin rights: " << update->data(scRequiresAdminRights).toString(); + qCDebug(QInstaller::lcPackageCheckable) << "\tCheckable: " << update->data(scCheckable).toString(); + qCDebug(QInstaller::lcPackageLicenses) << "\tLicenses: " << update->data(QLatin1String("Licenses")).toString(); + qCDebug(QInstaller::lcPackageCompressedSize) << "\tCompressed size: " << update->data(QLatin1String("CompressedSize")).toString(); + qCDebug(QInstaller::lcPackageUncompressedSize) << "\tUncompressed size: " << update->data(QLatin1String("UncompressedSize")).toString(); + + //Check if package already installed + LocalPackagesHash installedPackages = this->localInstalledPackages(); + if (installedPackages.contains(name)) + qCDebug(QInstaller::lcPackageInstalledVersion) << "\tInstalled version: " << installedPackages.value(name).version; +} + void PackageManagerCore::listInstalledPackages() { LocalPackagesHash installedPackages = this->localInstalledPackages(); diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index eb4a630d4..45bb27286 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -227,6 +227,7 @@ public: ComponentModel *defaultComponentModel() const; ComponentModel *updaterComponentModel() const; void listInstalledPackages(); + void listAvailablePackages(const QString ®exp); void updateComponentsSilently(); // convenience @@ -361,6 +362,7 @@ private: QList<Component *> componentsMarkedForInstallation() const; bool fetchPackagesTree(const PackagesList &packages, const LocalPackagesHash installedPackages); + void printPackageInformation(const QString &name, const Package *update); private: PackageManagerCorePrivate *const d; diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index f33d03bec..63b39ed76 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -2255,14 +2255,14 @@ LocalPackagesHash PackageManagerCorePrivate::localInstalledPackages() return installedPackages; } -bool PackageManagerCorePrivate::fetchMetaInformationFromRepositories() +bool PackageManagerCorePrivate::fetchMetaInformationFromRepositories(DownloadType type) { m_updates = false; m_repoFetched = false; m_updateSourcesAdded = false; try { - m_metadataJob.addCompressedPackages(false); + m_metadataJob.addDownloadType(type); m_metadataJob.start(); m_metadataJob.waitForFinished(); } catch (Error &error) { @@ -2296,10 +2296,9 @@ bool PackageManagerCorePrivate::fetchMetaInformationFromCompressedRepositories() //Tell MetadataJob that only compressed packages needed to be fetched and not all. //We cannot do this in general fetch meta method as the compressed packages might be //installed after components tree is generated - m_metadataJob.addCompressedPackages(true); + m_metadataJob.addDownloadType(DownloadType::CompressedPackage); m_metadataJob.start(); m_metadataJob.waitForFinished(); - m_metadataJob.addCompressedPackages(false); } catch (Error &error) { setStatus(PackageManagerCore::Failure, tr("Cannot retrieve meta information: %1") .arg(error.message())); diff --git a/src/libs/installer/packagemanagercore_p.h b/src/libs/installer/packagemanagercore_p.h index c7b657eb8..ace941ced 100644 --- a/src/libs/installer/packagemanagercore_p.h +++ b/src/libs/installer/packagemanagercore_p.h @@ -235,7 +235,7 @@ private: PackagesList remotePackages(); PackagesList compressedPackages(); LocalPackagesHash localInstalledPackages(); - bool fetchMetaInformationFromRepositories(); + bool fetchMetaInformationFromRepositories(DownloadType type = DownloadType::All); bool fetchMetaInformationFromCompressedRepositories(); bool addUpdateResourcesFromRepositories(bool parseChecksum, bool compressedRepository = false); void processFilesForDelayedDeletion(); |