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/sdk | |
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/sdk')
-rw-r--r-- | src/sdk/commandlineinterface.cpp | 26 | ||||
-rw-r--r-- | src/sdk/commandlineinterface.h | 3 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/sdk/commandlineinterface.cpp b/src/sdk/commandlineinterface.cpp index 69aa36c43..a6cd22151 100644 --- a/src/sdk/commandlineinterface.cpp +++ b/src/sdk/commandlineinterface.cpp @@ -132,7 +132,7 @@ int CommandLineInterface::searchAvailablePackages() QString regexp; if (!m_positionalArguments.isEmpty()) regexp = m_positionalArguments.first(); - m_core->listAvailablePackages(regexp); + m_core->listAvailablePackages(regexp, parsePackageFilters()); return EXIT_SUCCESS; } @@ -271,3 +271,27 @@ bool CommandLineInterface::setTargetDir() } return false; } + +QHash<QString, QString> CommandLineInterface::parsePackageFilters() +{ + QHash<QString, QString> filterHash; + if (m_parser.isSet(CommandLineOptions::scFilterPackagesLong)) { + const QStringList filterList = m_parser.value(CommandLineOptions::scFilterPackagesLong) + .split(QLatin1Char(',')); + + for (auto &filter : filterList) { + const int i = filter.indexOf(QLatin1Char('=')); + const QString element = filter.left(i).trimmed(); + const QString value = filter.mid(i + 1).trimmed(); + + if ((i == -1) || (filter.count(QLatin1Char('=') > 1)) + || element.isEmpty() || value.isEmpty()) { + qCWarning(QInstaller::lcInstallerInstallLog).nospace() << "Ignoring unknown entry " + << filter << "in package filter arguments. Please use syntax \"element=regex,...\"."; + continue; + } + filterHash.insert(element, value); + } + } + return filterHash; +} diff --git a/src/sdk/commandlineinterface.h b/src/sdk/commandlineinterface.h index 2627bc6f8..29bae74a4 100644 --- a/src/sdk/commandlineinterface.h +++ b/src/sdk/commandlineinterface.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -54,6 +54,7 @@ private: bool initialize(); bool checkLicense(); bool setTargetDir(); + QHash<QString, QString> parsePackageFilters(); QStringList m_positionalArguments; }; |