summaryrefslogtreecommitdiffstats
path: root/src/libs/installer
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2019-05-29 14:04:57 +0300
committerKatja Marttila <katja.marttila@qt.io>2019-11-19 09:38:04 +0000
commit48a43de0be59639b16962ec04f1a4e07141abaf0 (patch)
treee79773f2c5acfc974a65646ffe60ca0b7355c9a0 /src/libs/installer
parent3bd4e7d632967b1bf77120918700c11f83318166 (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.cpp69
-rw-r--r--src/libs/installer/globals.h23
-rw-r--r--src/libs/installer/metadatajob.cpp9
-rw-r--r--src/libs/installer/metadatajob.h11
-rw-r--r--src/libs/installer/packagemanagercore.cpp45
-rw-r--r--src/libs/installer/packagemanagercore.h2
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp7
-rw-r--r--src/libs/installer/packagemanagercore_p.h2
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 &regexp)
+{
+ 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 &regexp);
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();