summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore_p.cpp
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-06-09 10:52:51 +0300
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-08-21 10:56:00 +0300
commitf2ab63396c1f101216b2c6ade37528492e464785 (patch)
tree6aeceb76196b453d8a999ddf2d4e8b0d1dc43aef /src/libs/installer/packagemanagercore_p.cpp
parent190b643736d7fa3270dca5926e018d6eef6d74cb (diff)
CLI: Ask user confirmation before performing installer actions
Also add new option --confirm-command to skip the interactive query. Task-number: QTIFW-1834 Change-Id: I1c63fd990431c792a523da7047637f54b193bee6 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.cpp')
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp31
1 files changed, 25 insertions, 6 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index 89be5d907..6b5c4683f 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -222,6 +222,7 @@ PackageManagerCorePrivate::PackageManagerCorePrivate(PackageManagerCore *core)
, m_checkAvailableSpace(true)
, m_autoAcceptLicenses(false)
, m_disableWriteMaintenanceTool(false)
+ , m_autoConfirmCommand(false)
{
}
@@ -259,6 +260,7 @@ PackageManagerCorePrivate::PackageManagerCorePrivate(PackageManagerCore *core, q
, m_checkAvailableSpace(true)
, m_autoAcceptLicenses(false)
, m_disableWriteMaintenanceTool(false)
+ , m_autoConfirmCommand(false)
{
foreach (const OperationBlob &operation, performedOperations) {
QScopedPointer<QInstaller::Operation> op(KDUpdater::UpdateOperationFactory::instance()
@@ -2548,7 +2550,9 @@ bool PackageManagerCorePrivate::calculateComponentsAndRun()
qCDebug(QInstaller::lcInstallerInstallLog) << "Installation canceled.";
} else if (componentsOk && acceptLicenseAgreements()) {
qCDebug(QInstaller::lcInstallerInstallLog).noquote() << htmlToString(htmlOutput);
- if (m_core->run()) {
+ if (!(m_autoConfirmCommand || askUserConfirmCommand())) {
+ qCDebug(QInstaller::lcInstallerInstallLog) << "Installation aborted.";
+ } else if (m_core->run()) {
// Write maintenance tool if required
m_core->writeMaintenanceTool();
return true;
@@ -2592,11 +2596,7 @@ bool PackageManagerCorePrivate::askUserAcceptLicense(const QString &name, const
"before continuing with the installation:" << name;
forever {
- qCDebug(QInstaller::lcInstallerInstallLog) << "Accept|Reject|Show";
-
- QTextStream stream(stdin);
- QString input;
- stream.readLineInto(&input);
+ const QString input = m_core->readConsoleLine(QLatin1String("Accept|Reject|Show"));
if (QString::compare(input, QLatin1String("Accept"), Qt::CaseInsensitive) == 0
|| QString::compare(input, QLatin1String("A"), Qt::CaseInsensitive) == 0) {
@@ -2658,4 +2658,23 @@ void PackageManagerCorePrivate::printLocalPackageInformation(const KDUpdater::Lo
qCDebug(QInstaller::lcPackageUpdateDate).noquote() << "\tLast updated:" << package.lastUpdateDate;
}
+bool PackageManagerCorePrivate::askUserConfirmCommand() const
+{
+ qCDebug(QInstaller::lcInstallerInstallLog) << "Do you want to continue?";
+
+ forever {
+ const QString input = m_core->readConsoleLine(QLatin1String("Yes|No"));
+
+ if (QString::compare(input, QLatin1String("Yes"), Qt::CaseInsensitive) == 0
+ || QString::compare(input, QLatin1String("Y"), Qt::CaseInsensitive) == 0) {
+ return true;
+ } else if (QString::compare(input, QLatin1String("No"), Qt::CaseInsensitive) == 0
+ || QString::compare(input, QLatin1String("N"), Qt::CaseInsensitive) == 0) {
+ return false;
+ } else {
+ qCDebug(QInstaller::lcInstallerInstallLog) << "Unknown answer:" << input;
+ }
+ }
+}
+
} // namespace QInstaller