summaryrefslogtreecommitdiffstats
path: root/src/sdk
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2021-03-18 13:07:39 +0200
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2021-04-09 09:19:48 +0300
commit6c70f89e8e8e312a4a738c180742c0ab41b3ab95 (patch)
tree4093246a789b25125b074aa6b682a3a60e8c497e /src/sdk
parent8f97bf0ba510a374d4ce3ab040a513c62779454f (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.cpp26
-rw-r--r--src/sdk/commandlineinterface.h3
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;
};