diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2021-03-18 13:07:39 +0200 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2021-04-09 09:19:48 +0300 |
commit | 6c70f89e8e8e312a4a738c180742c0ab41b3ab95 (patch) | |
tree | 4093246a789b25125b074aa6b682a3a60e8c497e /src/libs/installer/packagemanagercore.cpp | |
parent | 8f97bf0ba510a374d4ce3ab040a513c62779454f (diff) |
CLI: Add support for additional filtering of search results
Search command results can now be optionally filtered with
the '--filter-packages'-option, which takes an unspecified
count of key-value pairs that contain the desired package
information element and a regular expression used to find
matches in the element.
Example usage:
'installer --fp "Version=1.0, Description=Some text" search *'
Only the packages which match all given filter rules are
included in the output print.
Task-number: QTIFW-2168
Change-Id: I788b065d95952b988489c36db80b3c859b970f05
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs/installer/packagemanagercore.cpp')
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index c512c23b5..26df043a0 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -2179,11 +2179,13 @@ ComponentModel *PackageManagerCore::updaterComponentModel() const /*! Lists available packages filtered with \a regexp without GUI. Virtual - components are not listed unless set visible. + components are not listed unless set visible. Optionally, a \a filters + hash containing package information elements and regular expressions + can be used to further filter listed packages. \sa setVirtualComponentsVisible() */ -void PackageManagerCore::listAvailablePackages(const QString ®exp) +void PackageManagerCore::listAvailablePackages(const QString ®exp, const QHash<QString, QString> &filters) { setPackageViewer(); qCDebug(QInstaller::lcInstallerInstallLog) @@ -2209,8 +2211,19 @@ void PackageManagerCore::listAvailablePackages(const QString ®exp) continue; const QModelIndex &idx = model->indexFromComponentName(component->treeName()); - if (idx.isValid() && re.match(name).hasMatch()) - matchedPackages.append(package); + if (idx.isValid() && re.match(name).hasMatch()) { + bool ignoreComponent = false; + for (auto &key : filters.keys()) { + const QString elementValue = component->value(key); + QRegularExpression elementRegexp(filters.value(key)); + if (elementValue.isEmpty() || !elementRegexp.match(elementValue).hasMatch()) { + ignoreComponent = true; + break; + } + } + if (!ignoreComponent) + matchedPackages.append(package); + } } if (matchedPackages.count() == 0) qCDebug(QInstaller::lcInstallerInstallLog) << "No matching packages found."; |