summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2020-03-27 10:53:25 +0200
committerKatja Marttila <katja.marttila@qt.io>2020-03-31 10:02:29 +0300
commitb5022c36b878c13861378ab2d9970d0533a43b6a (patch)
treed3ee58cd5cc158f752dcb75a28460160e58d265f /src
parent8d025e5dcd841939bdf44fc4705dffe429bca5b5 (diff)
Add function to allow additional processes to be run
Maintenancetool does not allow updating install if running processes are found from install directory. Only maintenancetool process was allowed, otherwise the install failed with query to shut down processes. This commit adds a function to extend the allowed processes to be run, this is mandatory when running tests as test executable lies in the install directory. Task-number: QTIFW-1019 Change-Id: I5422b0327e3f77edf3f9c88c74f40eff5cc8c830 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io> Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/libs/installer/packagemanagercore.cpp17
-rw-r--r--src/libs/installer/packagemanagercore.h2
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp19
-rw-r--r--src/libs/installer/packagemanagercore_p.h1
4 files changed, 27 insertions, 12 deletions
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp
index 4658e5072..55a143ceb 100644
--- a/src/libs/installer/packagemanagercore.cpp
+++ b/src/libs/installer/packagemanagercore.cpp
@@ -2489,6 +2489,23 @@ bool PackageManagerCore::killProcess(const QString &absoluteFilePath) const
return true;
}
+/*!
+ Sets additional \a processes that can run when
+ updating with the mainenance tool.
+*/
+void PackageManagerCore::setAllowedRunningProcesses(const QStringList &processes)
+{
+ d->m_allowedRunningProcesses = processes;
+}
+
+/*!
+ Returns processes that are allowed to run when
+ updating with the maintenance tool.
+*/
+QStringList PackageManagerCore::allowedRunningProcesses() const
+{
+ return d->m_allowedRunningProcesses;
+}
/*!
Makes sure the installer runs from a local drive. Otherwise the user will get an
diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h
index 91b1daa18..82ab779c3 100644
--- a/src/libs/installer/packagemanagercore.h
+++ b/src/libs/installer/packagemanagercore.h
@@ -258,6 +258,8 @@ public:
Q_INVOKABLE bool isProcessRunning(const QString &name) const;
Q_INVOKABLE bool killProcess(const QString &absoluteFilePath) const;
+ Q_INVOKABLE void setAllowedRunningProcesses(const QStringList &processes);
+ Q_INVOKABLE QStringList allowedRunningProcesses() const;
Settings &settings() const;
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index fa434f289..54eace77a 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -1967,11 +1967,11 @@ void PackageManagerCorePrivate::installComponent(Component *component, double pr
bool PackageManagerCorePrivate::runningProcessesFound()
{
//Check if there are processes running in the install
- QStringList excludeFiles;
+ QStringList excludeFiles = m_allowedRunningProcesses;
excludeFiles.append(maintenanceToolName());
QStringList runningProcesses = runningInstallerProcesses(excludeFiles);
if (!runningProcesses.isEmpty()) {
- qCWarning(QInstaller::lcInstallerInstallLog) << "Unable to update components. Please stop these processes: "
+ qCWarning(QInstaller::lcInstallerInstallLog).noquote() << "Unable to update components. Please stop these processes: "
<< runningProcesses << " and try again.";
return true;
}
@@ -2476,18 +2476,13 @@ void PackageManagerCorePrivate::processFilesForDelayedDeletion()
void PackageManagerCorePrivate::findExecutablesRecursive(const QString &path, const QStringList &excludeFiles, QStringList *result)
{
- QString executable;
QDirIterator it(path, QDir::NoDotAndDotDot | QDir::Executable | QDir::Files | QDir::System, QDirIterator::Subdirectories );
- while (it.hasNext()) {
- executable = it.next();
- foreach (QString exclude, excludeFiles) {
- if (QDir::toNativeSeparators(executable.toLower())
- != QDir::toNativeSeparators(exclude.toLower())) {
- result->append(executable);
- }
- }
- }
+ while (it.hasNext())
+ result->append(QDir::toNativeSeparators(it.next().toLower()));
+
+ foreach (const QString &process, excludeFiles)
+ result->removeAll(QDir::toNativeSeparators(process.toLower()));
}
QStringList PackageManagerCorePrivate::runningInstallerProcesses(const QStringList &excludeFiles)
diff --git a/src/libs/installer/packagemanagercore_p.h b/src/libs/installer/packagemanagercore_p.h
index e246317cc..dc5ad6af4 100644
--- a/src/libs/installer/packagemanagercore_p.h
+++ b/src/libs/installer/packagemanagercore_p.h
@@ -206,6 +206,7 @@ public:
OperationList m_performedOperationsCurrentSession;
bool m_dependsOnLocalInstallerBinary;
+ QStringList m_allowedRunningProcesses;
private slots:
void infoMessage(Job *, const QString &message) {