summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2022-06-22 07:28:15 +0200
committerJarek Kobus <jaroslaw.kobus@qt.io>2022-06-22 06:30:04 +0000
commit94adc1a566eaf8e29970e85619ffdc4b64d3561b (patch)
treec73bc64536ebe264bab40d5050c7da049096382c
parent35c3d9430b28a05c200a631ce05f60c24f7889b6 (diff)
downloadqt-creator-94adc1a566eaf8e29970e85619ffdc4b64d3561b.tar.gz
MergeTool: Don't call blocking waitForStarted()
Connect to done() signal instead of finished(). In case the process failed to start it will delete itself from inside done handler. Change-Id: I277779904d571759bf3877860d64e80ad304c2da Reviewed-by: Orgad Shaneh <orgads@gmail.com>
-rw-r--r--src/plugins/git/gitclient.cpp3
-rw-r--r--src/plugins/git/mergetool.cpp28
-rw-r--r--src/plugins/git/mergetool.h2
3 files changed, 12 insertions, 21 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 4b3b59a06d..1a2b211156 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -1141,8 +1141,7 @@ void GitClient::diffBranch(const FilePath &workingDirectory, const QString &bran
void GitClient::merge(const FilePath &workingDirectory, const QStringList &unmergedFileNames)
{
auto mergeTool = new MergeTool(this);
- if (!mergeTool->start(workingDirectory, unmergedFileNames))
- delete mergeTool;
+ mergeTool->start(workingDirectory, unmergedFileNames);
}
void GitClient::status(const FilePath &workingDirectory) const
diff --git a/src/plugins/git/mergetool.cpp b/src/plugins/git/mergetool.cpp
index 97259483be..ceaf634b00 100644
--- a/src/plugins/git/mergetool.cpp
+++ b/src/plugins/git/mergetool.cpp
@@ -52,7 +52,7 @@ MergeTool::~MergeTool()
delete m_process;
}
-bool MergeTool::start(const FilePath &workingDirectory, const QStringList &files)
+void MergeTool::start(const FilePath &workingDirectory, const QStringList &files)
{
QStringList arguments;
arguments << "mergetool" << "-y" << files;
@@ -60,6 +60,8 @@ bool MergeTool::start(const FilePath &workingDirectory, const QStringList &files
env.set("LANG", "C");
env.set("LANGUAGE", "C");
m_process = new QtcProcess;
+ connect(m_process, &QtcProcess::done, this, &MergeTool::done);
+ connect(m_process, &QtcProcess::readyReadStandardOutput, this, &MergeTool::readData);
m_process->setProcessMode(ProcessMode::Writer);
m_process->setWorkingDirectory(workingDirectory);
m_process->setEnvironment(env);
@@ -69,15 +71,6 @@ bool MergeTool::start(const FilePath &workingDirectory, const QStringList &files
VcsOutputWindow::appendCommand(workingDirectory, cmd);
m_process->setCommand(cmd);
m_process->start();
- if (m_process->waitForStarted()) {
- connect(m_process, &QtcProcess::finished, this, &MergeTool::done);
- connect(m_process, &QtcProcess::readyReadStandardOutput, this, &MergeTool::readData);
- } else {
- delete m_process;
- m_process = nullptr;
- return false;
- }
- return true;
}
MergeTool::FileState MergeTool::parseStatus(const QString &line, QString &extraInfo)
@@ -254,15 +247,14 @@ void MergeTool::readLine(const QString &line)
void MergeTool::done()
{
+ const bool success = m_process->result() == ProcessResult::FinishedWithSuccess;
+ if (success)
+ VcsOutputWindow::appendMessage(m_process->exitMessage());
+ else
+ VcsOutputWindow::appendError(m_process->exitMessage());
+
const FilePath workingDirectory = m_process->workingDirectory();
- int exitCode = m_process->exitCode();
- if (!exitCode) {
- VcsOutputWindow::appendMessage(tr("Merge tool process finished successfully."));
- } else {
- VcsOutputWindow::appendError(tr("Merge tool process terminated with exit code %1")
- .arg(exitCode));
- }
- GitClient::instance()->continueCommandIfNeeded(workingDirectory, exitCode == 0);
+ GitClient::instance()->continueCommandIfNeeded(workingDirectory, success);
GitPlugin::emitRepositoryChanged(workingDirectory);
deleteLater();
}
diff --git a/src/plugins/git/mergetool.h b/src/plugins/git/mergetool.h
index 7d0fba01b8..4d7dfb830e 100644
--- a/src/plugins/git/mergetool.h
+++ b/src/plugins/git/mergetool.h
@@ -57,7 +57,7 @@ class MergeTool : public QObject
public:
explicit MergeTool(QObject *parent = nullptr);
~MergeTool() override;
- bool start(const Utils::FilePath &workingDirectory, const QStringList &files = {});
+ void start(const Utils::FilePath &workingDirectory, const QStringList &files = {});
enum MergeType {
NormalMerge,