From ecf48086de63dc767b37f5a63faf0e6b438c5641 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Fri, 30 Oct 2009 17:40:33 +0100 Subject: [PATCH] Checkout wizard: Hangs on Windows when VCS binary is missing. due to StartFailed being emitted from start(). Set state correctly, improve error reporting. Reviewed-by: con <qtc-commiter@nokia.com> --- src/plugins/vcsbase/checkoutjobs.cpp | 11 +++++++++-- src/plugins/vcsbase/checkoutprogresswizardpage.cpp | 7 ++++--- src/plugins/vcsbase/checkoutwizarddialog.cpp | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/plugins/vcsbase/checkoutjobs.cpp b/src/plugins/vcsbase/checkoutjobs.cpp index 7a419a00982..257068d5b50 100644 --- a/src/plugins/vcsbase/checkoutjobs.cpp +++ b/src/plugins/vcsbase/checkoutjobs.cpp @@ -94,9 +94,16 @@ void ProcessCheckoutJob::slotOutput() emit output(s); } -void ProcessCheckoutJob::slotError(QProcess::ProcessError /* error */) +void ProcessCheckoutJob::slotError(QProcess::ProcessError error) { - emit failed(d->process.errorString()); + switch (error) { + case QProcess::FailedToStart: + emit failed(tr("Unable to start %1: %2").arg(d->binary, d->process.errorString())); + break; + default: + emit failed(d->process.errorString()); + break; + } } void ProcessCheckoutJob::slotFinished (int exitCode, QProcess::ExitStatus exitStatus) diff --git a/src/plugins/vcsbase/checkoutprogresswizardpage.cpp b/src/plugins/vcsbase/checkoutprogresswizardpage.cpp index 6af15fb0f8b..8fcaef51fc3 100644 --- a/src/plugins/vcsbase/checkoutprogresswizardpage.cpp +++ b/src/plugins/vcsbase/checkoutprogresswizardpage.cpp @@ -63,10 +63,11 @@ void CheckoutProgressWizardPage::start(const QSharedPointer<AbstractCheckoutJob> connect(job.data(), SIGNAL(succeeded()), this, SLOT(slotSucceeded())); QApplication::setOverrideCursor(Qt::WaitCursor); ui->logPlainTextEdit->clear(); - setSubTitle(tr("Checkout started...")); - job->start(); + setSubTitle(tr("Checkout started...")); m_state = Running; - + // Note: Process jobs can emit failed() right from + // the start() method on Windows. + job->start(); } void CheckoutProgressWizardPage::slotFailed(const QString &why) diff --git a/src/plugins/vcsbase/checkoutwizarddialog.cpp b/src/plugins/vcsbase/checkoutwizarddialog.cpp index 9cb5a6a45e8..36b9c271ee0 100644 --- a/src/plugins/vcsbase/checkoutwizarddialog.cpp +++ b/src/plugins/vcsbase/checkoutwizarddialog.cpp @@ -70,9 +70,9 @@ void CheckoutWizardDialog::slotTerminated(bool success) void CheckoutWizardDialog::start(const QSharedPointer<AbstractCheckoutJob> &job) { - m_progressPage->start(job); // No "back" available while running. button(QWizard::BackButton)->setEnabled(false); + m_progressPage->start(job); } void CheckoutWizardDialog::reject() -- GitLab