summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2021-04-29 17:15:48 +0200
committerhjk <hjk@qt.io>2021-04-30 09:16:28 +0000
commitdcba96d16e9011ee96cf5e79836f7368727a3a68 (patch)
treeabc9363f6268ce7229a85d8e7a88e46e3e63ee07
parentfe8fbf1a4aeeae646c40ca5183e0852ec350b4ce (diff)
downloadqt-creator-dcba96d16e9011ee96cf5e79836f7368727a3a68.tar.gz
Utils: Copy some SynchronousProcess function to QtcProcess
Start using it in Utils::Archive. The idea is to merge SynchronousProcess into QtcProcess (or avoid its use) to have fewer classes to make "remote-aware". Change-Id: Ieb08f6f66eab63fd058b75e3bafa79bfbf140387 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--src/libs/utils/archive.cpp12
-rw-r--r--src/libs/utils/archive.h5
-rw-r--r--src/libs/utils/qtcprocess.cpp20
-rw-r--r--src/libs/utils/qtcprocess.h5
4 files changed, 32 insertions, 10 deletions
diff --git a/src/libs/utils/archive.cpp b/src/libs/utils/archive.cpp
index 9f61eb28ab..de111dec83 100644
--- a/src/libs/utils/archive.cpp
+++ b/src/libs/utils/archive.cpp
@@ -30,7 +30,7 @@
#include "environment.h"
#include "mimetypes/mimedatabase.h"
#include "qtcassert.h"
-#include "synchronousprocess.h"
+#include "qtcprocess.h"
#include <QDir>
#include <QPushButton>
@@ -208,7 +208,7 @@ Archive *Archive::unarchive(const FilePath &src, const FilePath &dest)
const QString workingDirectory = dest.toFileInfo().absoluteFilePath();
QDir(workingDirectory).mkpath(".");
- archive->m_process = new QProcess;
+ archive->m_process = new QtcProcess;
archive->m_process->setProcessChannelMode(QProcess::MergedChannels);
QObject::connect(
archive->m_process,
@@ -265,15 +265,15 @@ Archive *Archive::unarchive(const FilePath &src, const FilePath &dest)
archive->m_process->setArguments(tool->arguments);
#endif
archive->m_process->setWorkingDirectory(workingDirectory);
- archive->m_process->start(QProcess::ReadOnly);
+ archive->m_process->setOpenMode(QProcess::ReadOnly);
+ archive->m_process->start();
return archive;
}
void Archive::cancel()
{
- if (!m_process)
- return;
- SynchronousProcess::stopProcess(*m_process);
+ if (m_process)
+ m_process->stopProcess();
}
} // namespace Utils
diff --git a/src/libs/utils/archive.h b/src/libs/utils/archive.h
index 324a473ba3..217191073a 100644
--- a/src/libs/utils/archive.h
+++ b/src/libs/utils/archive.h
@@ -30,10 +30,11 @@
#include "fileutils.h"
#include <QObject>
-#include <QProcess>
namespace Utils {
+class QtcProcess;
+
class QTCREATOR_UTILS_EXPORT Archive : public QObject
{
Q_OBJECT
@@ -51,7 +52,7 @@ signals:
private:
Archive() = default;
- QProcess *m_process = nullptr;
+ QtcProcess *m_process = nullptr;
};
} // namespace Utils
diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp
index 42a0165b0d..6384aef7d3 100644
--- a/src/libs/utils/qtcprocess.cpp
+++ b/src/libs/utils/qtcprocess.cpp
@@ -752,7 +752,7 @@ void QtcProcess::start()
#endif
// Note: Arguments set with setNativeArgs will be appended to the ones
// passed with start() below.
- QProcess::start(command, QStringList());
+ QProcess::start(command, QStringList(), m_openMode);
} else {
if (!success) {
setErrorString(tr("Error in command line."));
@@ -761,7 +761,7 @@ void QtcProcess::start()
emit errorOccurred(QProcess::UnknownError);
return;
}
- QProcess::start(command, arguments.toUnixArgs());
+ QProcess::start(command, arguments.toUnixArgs(), m_openMode);
}
if (m_synchronous)
@@ -1275,6 +1275,22 @@ void QtcProcess::setSynchronous(bool on)
m_synchronous = on;
}
+void QtcProcess::setOpenMode(OpenMode mode)
+{
+ m_openMode = mode;
+}
+
+bool QtcProcess::stopProcess()
+{
+ if (state() == QProcess::NotRunning)
+ return true;
+ terminate();
+ if (waitForFinished(300))
+ return true;
+ kill();
+ return waitForFinished(300);
+}
+
bool QtcProcess::ArgIterator::next()
{
// We delay the setting of m_prev so we can still delete the last argument
diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h
index a879fa0ae2..64e9bb57f4 100644
--- a/src/libs/utils/qtcprocess.h
+++ b/src/libs/utils/qtcprocess.h
@@ -149,6 +149,10 @@ public:
bool isSynchronous() const;
void setSynchronous(bool on);
+ void setOpenMode(OpenMode mode);
+
+ bool stopProcess();
+
private:
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
void setupChildProcess() override;
@@ -163,6 +167,7 @@ private:
bool m_lowPriority = false;
bool m_synchronous = false;
+ OpenMode m_openMode = ReadWrite;
};
} // namespace Utils