From 8e126df5459f2eea2a1736bd804d6f670bc18ba7 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@digia.com>
Date: Mon, 5 May 2014 17:56:54 +0200
Subject: [PATCH] BaseCheckoutWizard*: Move createCommand from factory into
 Wizard

Change-Id: I0dcc931f279b59f0d6cf7afb553a2fed30baae7a
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
---
 src/plugins/bazaar/bazaarclient.h             |  2 +-
 src/plugins/bazaar/clonewizard.cpp            | 55 +++++++++----------
 src/plugins/bazaar/clonewizard.h              |  7 +--
 src/plugins/cvs/checkoutwizard.cpp            | 41 +++++++-------
 src/plugins/cvs/checkoutwizard.h              |  8 +--
 src/plugins/git/clonewizard.cpp               | 27 +++++----
 src/plugins/git/clonewizard.h                 |  8 +--
 .../git/gitorious/gitoriousclonewizard.cpp    | 23 ++++----
 .../git/gitorious/gitoriousclonewizard.h      |  8 +--
 src/plugins/mercurial/clonewizard.cpp         | 51 +++++++++--------
 src/plugins/mercurial/clonewizard.h           |  7 +--
 src/plugins/subversion/checkoutwizard.cpp     | 42 +++++++-------
 src/plugins/subversion/checkoutwizard.h       |  8 +--
 src/plugins/vcsbase/basecheckoutwizard.cpp    | 27 +++++----
 src/plugins/vcsbase/basecheckoutwizard.h      |  9 ++-
 .../vcsbase/basecheckoutwizardfactory.cpp     | 16 +-----
 .../vcsbase/basecheckoutwizardfactory.h       |  7 ---
 17 files changed, 160 insertions(+), 186 deletions(-)

diff --git a/src/plugins/bazaar/bazaarclient.h b/src/plugins/bazaar/bazaarclient.h
index 06e717b4f4..8896d933fa 100644
--- a/src/plugins/bazaar/bazaarclient.h
+++ b/src/plugins/bazaar/bazaarclient.h
@@ -76,7 +76,7 @@ protected:
     StatusItem parseStatusLine(const QString &line) const;
 
 private:
-    friend class CloneWizardFactory;
+    friend class CloneWizard;
 };
 
 } // namespace Internal
diff --git a/src/plugins/bazaar/clonewizard.cpp b/src/plugins/bazaar/clonewizard.cpp
index d6226e0096..ec89f684eb 100644
--- a/src/plugins/bazaar/clonewizard.cpp
+++ b/src/plugins/bazaar/clonewizard.cpp
@@ -56,22 +56,39 @@ VcsBase::BaseCheckoutWizard *CloneWizardFactory::create(const QString &path, QWi
     return new CloneWizard(path, parent);
 }
 
-VcsBase::Command *CloneWizardFactory::createCommand(const QList<QWizardPage *> &parameterPages,
-                                             QString *checkoutPath)
+// --------------------------------------------------------------------
+// CloneWizard:
+// --------------------------------------------------------------------
+
+CloneWizard::CloneWizard(const QString &path, QWidget *parent) :
+    VcsBase::BaseCheckoutWizard(path, parent)
+{
+    setTitle(tr("Cloning"));
+    setStartedStatus(tr("Cloning started..."));
+
+    const Core::IVersionControl *vc = BazaarPlugin::instance()->versionControl();
+    if (!vc->isConfigured())
+        addPage(new VcsBase::VcsConfigurationPage(vc));
+    CloneWizardPage *page = new CloneWizardPage;
+    page->setPath(path);
+    addPage(page);
+}
+
+VcsBase::Command *CloneWizard::createCommand(QString *checkoutDir)
 {
-    const CloneWizardPage *page = 0;
-    foreach (QWizardPage *p, parameterPages) {
-        if ((page = qobject_cast<const CloneWizardPage *>(p)))
+    const CloneWizardPage *cwp = 0;
+    foreach (int pageId, pageIds()) {
+        if ((cwp = qobject_cast<const CloneWizardPage *>(page(pageId))))
             break;
     }
 
-    if (!page)
+    if (!cwp)
         return 0;
 
     const BazaarSettings &settings = BazaarPlugin::instance()->settings();
-    *checkoutPath = page->path() + QLatin1Char('/') + page->directory();
+    *checkoutDir = cwp->path() + QLatin1Char('/') + cwp->directory();
 
-    const CloneOptionsPanel *panel = page->cloneOptionsPanel();
+    const CloneOptionsPanel *panel = cwp->cloneOptionsPanel();
     QStringList extraOptions;
     if (panel->isUseExistingDirectoryOptionEnabled())
         extraOptions += QLatin1String("--use-existing-dir");
@@ -92,28 +109,10 @@ VcsBase::Command *CloneWizardFactory::createCommand(const QList<QWizardPage *> &
     const BazaarClient *client = BazaarPlugin::instance()->client();
     QStringList args;
     args << client->vcsCommandString(BazaarClient::CloneCommand)
-         << extraOptions << page->repository() << page->directory();
+         << extraOptions << cwp->repository() << cwp->directory();
 
-    VcsBase::Command *command = new VcsBase::Command(settings.binaryPath(), page->path(),
+    VcsBase::Command *command = new VcsBase::Command(settings.binaryPath(), cwp->path(),
                                                      client->processEnvironment());
     command->addJob(args, -1);
     return command;
 }
-
-// --------------------------------------------------------------------
-// CloneWizard:
-// --------------------------------------------------------------------
-
-CloneWizard::CloneWizard(const QString &path, QWidget *parent) :
-    VcsBase::BaseCheckoutWizard(path, parent)
-{
-    setTitle(tr("Cloning"));
-    setStartedStatus(tr("Cloning started..."));
-
-    const Core::IVersionControl *vc = BazaarPlugin::instance()->versionControl();
-    if (!vc->isConfigured())
-        addPage(new VcsBase::VcsConfigurationPage(vc));
-    CloneWizardPage *page = new CloneWizardPage;
-    page->setPath(path);
-    addPage(page);
-}
diff --git a/src/plugins/bazaar/clonewizard.h b/src/plugins/bazaar/clonewizard.h
index e374646863..b0bf361693 100644
--- a/src/plugins/bazaar/clonewizard.h
+++ b/src/plugins/bazaar/clonewizard.h
@@ -46,10 +46,6 @@ public:
     CloneWizardFactory();
 
     VcsBase::BaseCheckoutWizard *create(const QString &path, QWidget *parent = 0) const;
-
-private:
-    VcsBase::Command *createCommand(const QList<QWizardPage *> &parameterPages,
-                                    QString *checkoutPath);
 };
 
 class CloneWizard : public VcsBase::BaseCheckoutWizard
@@ -58,6 +54,9 @@ class CloneWizard : public VcsBase::BaseCheckoutWizard
 
 public:
     CloneWizard(const QString &path, QWidget *parent = 0);
+
+protected:
+    VcsBase::Command *createCommand(QString *checkoutDir);
 };
 
 } // namespace Internal
diff --git a/src/plugins/cvs/checkoutwizard.cpp b/src/plugins/cvs/checkoutwizard.cpp
index 0a53683647..d37aeff212 100644
--- a/src/plugins/cvs/checkoutwizard.cpp
+++ b/src/plugins/cvs/checkoutwizard.cpp
@@ -53,24 +53,40 @@ VcsBase::BaseCheckoutWizard *CheckoutWizardFactory::create(const QString &path,
     return new CheckoutWizard(path, parent);
 }
 
-VcsBase::Command *CheckoutWizardFactory::createCommand(const QList<QWizardPage*> &parameterPages,
-                                                QString *checkoutPath)
+// --------------------------------------------------------------------
+// CheckoutWizard:
+// --------------------------------------------------------------------
+
+CheckoutWizard::CheckoutWizard(const QString &path, QWidget *parent) :
+    VcsBase::BaseCheckoutWizard(path, parent)
+{
+    const Core::IVersionControl *vc = CvsPlugin::instance()->versionControl();
+    if (!vc->isConfigured())
+        addPage(new VcsBase::VcsConfigurationPage(vc));
+    CheckoutWizardPage *cwp = new CheckoutWizardPage;
+    cwp->setPath(path);
+    addPage(cwp);
+}
+
+VcsBase::Command *CheckoutWizard::createCommand(QString *checkoutDir)
 {
     // Collect parameters for the checkout command.
     // CVS does not allow for checking out into a different directory.
     const CheckoutWizardPage *cwp = 0;
-    foreach (QWizardPage *p, parameterPages) {
-        if ((cwp = qobject_cast<const CheckoutWizardPage *>(p)))
+    foreach (int pageId, pageIds()) {
+        if ((cwp = qobject_cast<const CheckoutWizardPage *>(page(pageId))))
             break;
     }
+
     QTC_ASSERT(cwp, return 0);
     const CvsSettings settings = CvsPlugin::instance()->settings();
     const QString binary = settings.binaryPath();
     QStringList args;
+
     const QString repository = cwp->repository();
     args << QLatin1String("checkout") << repository;
     const QString workingDirectory = cwp->path();
-    *checkoutPath = workingDirectory + QLatin1Char('/') + repository;
+    *checkoutDir = workingDirectory + QLatin1Char('/') + repository;
 
     VcsBase::Command *command = new VcsBase::Command(binary, workingDirectory,
                                                      QProcessEnvironment::systemEnvironment());
@@ -78,20 +94,5 @@ VcsBase::Command *CheckoutWizardFactory::createCommand(const QList<QWizardPage*>
     return command;
 }
 
-// --------------------------------------------------------------------
-// CheckoutWizard:
-// --------------------------------------------------------------------
-
-CheckoutWizard::CheckoutWizard(const QString &path, QWidget *parent) :
-    VcsBase::BaseCheckoutWizard(path, parent)
-{
-    const Core::IVersionControl *vc = CvsPlugin::instance()->versionControl();
-    if (!vc->isConfigured())
-        addPage(new VcsBase::VcsConfigurationPage(vc));
-    CheckoutWizardPage *cwp = new CheckoutWizardPage;
-    cwp->setPath(path);
-    addPage(cwp);
-}
-
 } // namespace Internal
 } // namespace Cvs
diff --git a/src/plugins/cvs/checkoutwizard.h b/src/plugins/cvs/checkoutwizard.h
index 14c36730cc..b57710ae93 100644
--- a/src/plugins/cvs/checkoutwizard.h
+++ b/src/plugins/cvs/checkoutwizard.h
@@ -44,11 +44,6 @@ public:
     CheckoutWizardFactory();
 
     VcsBase::BaseCheckoutWizard *create(const QString &path, QWidget *parent = 0) const;
-
-private:
-    // BaseCheckoutWizard
-    VcsBase::Command *createCommand(const QList<QWizardPage*> &parameterPage,
-                                    QString *checkoutPath);
 };
 
 class CheckoutWizard : public VcsBase::BaseCheckoutWizard
@@ -57,6 +52,9 @@ class CheckoutWizard : public VcsBase::BaseCheckoutWizard
 
 public:
     CheckoutWizard(const QString &path, QWidget *parent = 0);
+
+protected:
+    VcsBase::Command *createCommand(QString *checkoutDir);
 };
 
 } // namespace Internal
diff --git a/src/plugins/git/clonewizard.cpp b/src/plugins/git/clonewizard.cpp
index fd99944563..291c857b38 100644
--- a/src/plugins/git/clonewizard.cpp
+++ b/src/plugins/git/clonewizard.cpp
@@ -53,20 +53,6 @@ VcsBase::BaseCheckoutWizard *CloneWizardFactory::create(const QString &path, QWi
     return new CloneWizard(path, parent);
 }
 
-VcsBase::Command *CloneWizardFactory::createCommand(const QList<QWizardPage*> &parameterPages,
-                                             QString *checkoutPath)
-{
-    // Collect parameters for the clone command.
-    const CloneWizardPage *cwp = 0;
-    foreach (QWizardPage *wp, parameterPages) {
-        if ((cwp = qobject_cast<const CloneWizardPage *>(wp)))
-            break;
-    }
-
-    QTC_ASSERT(cwp, return 0);
-    return cwp->createCheckoutJob(checkoutPath);
-}
-
 // --------------------------------------------------------------------
 // CloneWizard:
 // --------------------------------------------------------------------
@@ -85,5 +71,18 @@ CloneWizard::CloneWizard(const QString &path, QWidget *parent) :
     addPage(cwp);
 }
 
+VcsBase::Command *CloneWizard::createCommand(QString *checkoutDir)
+{
+    // Collect parameters for the clone command.
+    const CloneWizardPage *cwp = 0;
+    foreach (int pageId, pageIds()) {
+        if ((cwp = qobject_cast<const CloneWizardPage *>(page(pageId))))
+            break;
+    }
+
+    QTC_ASSERT(cwp, return 0);
+    return cwp->createCheckoutJob(checkoutDir);
+}
+
 } // namespace Internal
 } // namespace Git
diff --git a/src/plugins/git/clonewizard.h b/src/plugins/git/clonewizard.h
index dffce65b10..95c62a15da 100644
--- a/src/plugins/git/clonewizard.h
+++ b/src/plugins/git/clonewizard.h
@@ -44,11 +44,6 @@ public:
     CloneWizardFactory();
 
     VcsBase::BaseCheckoutWizard *create(const QString &path, QWidget *parent = 0) const;
-
-private:
-    // BaseCheckoutWizard
-    VcsBase::Command *createCommand(const QList<QWizardPage*> &parameterPages,
-                                    QString *checkoutPath);
 };
 
 class CloneWizard : public VcsBase::BaseCheckoutWizard
@@ -57,6 +52,9 @@ class CloneWizard : public VcsBase::BaseCheckoutWizard
 
 public:
     CloneWizard(const QString &path, QWidget *parent = 0);
+
+protected:
+    VcsBase::Command *createCommand(QString *checkoutDir);
 };
 
 } // namespace Internal
diff --git a/src/plugins/git/gitorious/gitoriousclonewizard.cpp b/src/plugins/git/gitorious/gitoriousclonewizard.cpp
index 4224a0e4d4..d11051d517 100644
--- a/src/plugins/git/gitorious/gitoriousclonewizard.cpp
+++ b/src/plugins/git/gitorious/gitoriousclonewizard.cpp
@@ -82,18 +82,6 @@ VcsBase::BaseCheckoutWizard *GitoriousCloneWizardFactory::create(const QString &
     return new GitoriousCloneWizard(path, parent);
 }
 
-VcsBase::Command *GitoriousCloneWizardFactory::createCommand(const QList<QWizardPage*> &parameterPages,
-                                                      QString *checkoutPath)
-{
-    const Git::CloneWizardPage *cwp = 0;
-    foreach (QWizardPage *p, parameterPages) {
-        if ((cwp = qobject_cast<const Git::CloneWizardPage *>(p)))
-            break;
-    }
-    QTC_ASSERT(cwp, return 0);
-    return cwp->createCheckoutJob(checkoutPath);
-}
-
 // --------------------------------------------------------------------
 // GitoriousCloneWizard:
 // --------------------------------------------------------------------
@@ -120,5 +108,16 @@ GitoriousCloneWizard::GitoriousCloneWizard(const QString &path, QWidget *parent)
     addPage(clonePage);
 }
 
+VcsBase::Command *GitoriousCloneWizard::createCommand(QString *checkoutDir)
+{
+    const Git::CloneWizardPage *cwp = 0;
+    foreach (int pageId, pageIds()) {
+        if ((cwp = qobject_cast<const Git::CloneWizardPage *>(page(pageId))))
+            break;
+    }
+    QTC_ASSERT(cwp, return 0);
+    return cwp->createCheckoutJob(checkoutDir);
+}
+
 } // namespace Internal
 } // namespace Gitorius
diff --git a/src/plugins/git/gitorious/gitoriousclonewizard.h b/src/plugins/git/gitorious/gitoriousclonewizard.h
index 7f35f18fb2..22dfac6de6 100644
--- a/src/plugins/git/gitorious/gitoriousclonewizard.h
+++ b/src/plugins/git/gitorious/gitoriousclonewizard.h
@@ -46,11 +46,6 @@ public:
     GitoriousCloneWizardFactory();
 
     VcsBase::BaseCheckoutWizard *create(const QString &path, QWidget *parent = 0) const;
-
-private:
-    // BaseCheckoutWizard
-    VcsBase::Command *createCommand(const QList<QWizardPage*> &parameterPages,
-                                    QString *checkoutPath);
 };
 
 class GitoriousCloneWizard : public VcsBase::BaseCheckoutWizard
@@ -59,6 +54,9 @@ class GitoriousCloneWizard : public VcsBase::BaseCheckoutWizard
 
 public:
     GitoriousCloneWizard(const QString &path, QWidget *parent = 0);
+
+protected:
+    VcsBase::Command *createCommand(QString *checkoutDir);
 };
 
 
diff --git a/src/plugins/mercurial/clonewizard.cpp b/src/plugins/mercurial/clonewizard.cpp
index d6586b23aa..04a464d699 100644
--- a/src/plugins/mercurial/clonewizard.cpp
+++ b/src/plugins/mercurial/clonewizard.cpp
@@ -53,32 +53,6 @@ BaseCheckoutWizard *CloneWizardFactory::create(const QString &path, QWidget *par
     return new CloneWizard(path, parent);
 }
 
-Command *CloneWizardFactory::createCommand(const QList<QWizardPage *> &parameterPages,
-                                    QString *checkoutPath)
-{
-    const CloneWizardPage *page = 0;
-    foreach (QWizardPage *p, parameterPages) {
-        if ((page = qobject_cast<const CloneWizardPage *>(p)))
-            break;
-    }
-
-    if (!page)
-        return 0;
-
-    const MercurialSettings &settings = MercurialPlugin::settings();
-
-    QString path = page->path();
-    QString directory = page->directory();
-
-    QStringList args;
-    args << QLatin1String("clone") << page->repository() << directory;
-    *checkoutPath = path + QLatin1Char('/') + directory;
-    VcsBase::Command *command = new VcsBase::Command(settings.binaryPath(), path,
-                                                     QProcessEnvironment::systemEnvironment());
-    command->addJob(args, -1);
-    return command;
-}
-
 // --------------------------------------------------------------------
 // CloneWizard:
 // --------------------------------------------------------------------
@@ -96,3 +70,28 @@ CloneWizard::CloneWizard(const QString &path, QWidget *parent) :
     page->setPath(path);
     addPage(page);
 }
+
+Command *CloneWizard::createCommand(QString *checkoutDir)
+{
+    const CloneWizardPage *cwp = 0;
+    foreach (int pageId, pageIds()) {
+        if ((cwp = qobject_cast<const CloneWizardPage *>(page(pageId))))
+            break;
+    }
+
+    if (!cwp)
+        return 0;
+
+    const MercurialSettings &settings = MercurialPlugin::settings();
+
+    QString path = cwp->path();
+    QString directory = cwp->directory();
+
+    QStringList args;
+    args << QLatin1String("clone") << cwp->repository() << directory;
+    *checkoutDir = path + QLatin1Char('/') + directory;
+    VcsBase::Command *command = new VcsBase::Command(settings.binaryPath(), path,
+                                                     QProcessEnvironment::systemEnvironment());
+    command->addJob(args, -1);
+    return command;
+}
diff --git a/src/plugins/mercurial/clonewizard.h b/src/plugins/mercurial/clonewizard.h
index 3de79df304..73fdb5beaf 100644
--- a/src/plugins/mercurial/clonewizard.h
+++ b/src/plugins/mercurial/clonewizard.h
@@ -47,10 +47,6 @@ public:
 
     VcsBase::BaseCheckoutWizard *create(const QString &path, QWidget *parent = 0) const;
 
-protected:
-    VcsBase::Command *createCommand(const QList<QWizardPage *> &parameterPages,
-                                    QString *checkoutPath);
-
 private:
     const QIcon m_icon;
 };
@@ -61,6 +57,9 @@ class CloneWizard : public VcsBase::BaseCheckoutWizard
 
 public:
     CloneWizard(const QString &path, QWidget *parent = 0);
+
+protected:
+    VcsBase::Command *createCommand(QString *checkoutDir);
 };
 
 } //namespace Internal
diff --git a/src/plugins/subversion/checkoutwizard.cpp b/src/plugins/subversion/checkoutwizard.cpp
index 7802adbeee..f58128e907 100644
--- a/src/plugins/subversion/checkoutwizard.cpp
+++ b/src/plugins/subversion/checkoutwizard.cpp
@@ -56,23 +56,40 @@ VcsBase::BaseCheckoutWizard *CheckoutWizardFactory::create(const QString &path,
     return new CheckoutWizard(path, parent);
 }
 
-VcsBase::Command *CheckoutWizardFactory::createCommand(const QList<QWizardPage*> &parameterPages,
-                                                QString *checkoutPath)
+// --------------------------------------------------------------------
+// CheckoutWizard:
+// --------------------------------------------------------------------
+
+CheckoutWizard::CheckoutWizard(const QString &path, QWidget *parent) :
+    VcsBase::BaseCheckoutWizard(path, parent)
+{
+    const Core::IVersionControl *vc = SubversionPlugin::instance()->versionControl();
+    if (!vc->isConfigured())
+        addPage(new VcsBase::VcsConfigurationPage(vc));
+    CheckoutWizardPage *cwp = new CheckoutWizardPage;
+    cwp->setPath(path);
+    addPage(cwp);
+}
+
+VcsBase::Command *CheckoutWizard::createCommand(QString *checkoutDir)
 {
     // Collect parameters for the checkout command.
     const CheckoutWizardPage *cwp = 0;
-    foreach (const QWizardPage *p, parameterPages) {
-        if ((cwp = qobject_cast<const CheckoutWizardPage *>(p)))
+    foreach (int pageId, pageIds()) {
+        if ((cwp = qobject_cast<const CheckoutWizardPage *>(page(pageId))))
             break;
     }
     QTC_ASSERT(cwp, return 0);
+
     const SubversionSettings settings = SubversionPlugin::instance()->settings();
     const QString binary = settings.binaryPath();
     const QString directory = cwp->directory();
     QStringList args;
     args << QLatin1String("checkout") << cwp->repository() << directory;
     const QString workingDirectory = cwp->path();
-    *checkoutPath = workingDirectory + QLatin1Char('/') + directory;
+
+    *checkoutDir = workingDirectory + QLatin1Char('/') + directory;
+
     if (settings.hasAuthentication()) {
         const QString user = settings.stringValue(SubversionSettings::userKey);
         const QString pwd = settings.stringValue(SubversionSettings::passwordKey);
@@ -84,20 +101,5 @@ VcsBase::Command *CheckoutWizardFactory::createCommand(const QList<QWizardPage*>
     return command;
 }
 
-// --------------------------------------------------------------------
-// CheckoutWizard:
-// --------------------------------------------------------------------
-
-CheckoutWizard::CheckoutWizard(const QString &path, QWidget *parent) :
-    VcsBase::BaseCheckoutWizard(path, parent)
-{
-    const Core::IVersionControl *vc = SubversionPlugin::instance()->versionControl();
-    if (!vc->isConfigured())
-        addPage(new VcsBase::VcsConfigurationPage(vc));
-    CheckoutWizardPage *cwp = new CheckoutWizardPage;
-    cwp->setPath(path);
-    addPage(cwp);
-}
-
 } // namespace Internal
 } // namespace Subversion
diff --git a/src/plugins/subversion/checkoutwizard.h b/src/plugins/subversion/checkoutwizard.h
index 26c99c7236..305ef0af30 100644
--- a/src/plugins/subversion/checkoutwizard.h
+++ b/src/plugins/subversion/checkoutwizard.h
@@ -44,11 +44,6 @@ public:
     CheckoutWizardFactory();
 
     VcsBase::BaseCheckoutWizard *create(const QString &path, QWidget *parent = 0) const;
-
-private:
-    // BaseCheckoutWizard
-    VcsBase::Command *createCommand(const QList<QWizardPage*> &parameterPage,
-                                    QString *checkoutPath);
 };
 
 class CheckoutWizard : public VcsBase::BaseCheckoutWizard
@@ -57,6 +52,9 @@ class CheckoutWizard : public VcsBase::BaseCheckoutWizard
 
 public:
     CheckoutWizard(const QString &path, QWidget *parent = 0);
+
+protected:
+    VcsBase::Command *createCommand(QString *checkoutDir);
 };
 
 } // namespace Internal
diff --git a/src/plugins/vcsbase/basecheckoutwizard.cpp b/src/plugins/vcsbase/basecheckoutwizard.cpp
index 67a432a911..4c15b8a272 100644
--- a/src/plugins/vcsbase/basecheckoutwizard.cpp
+++ b/src/plugins/vcsbase/basecheckoutwizard.cpp
@@ -33,6 +33,8 @@
 
 #include <coreplugin/basefilewizard.h>
 
+#include <utils/qtcassert.h>
+
 #include <QPushButton>
 
 /*!
@@ -66,8 +68,15 @@ void BaseCheckoutWizard::setStartedStatus(const QString &title)
 
 void BaseCheckoutWizard::slotPageChanged(int id)
 {
-    if (id == m_progressPageId)
-        emit progressPageShown();
+    if (id != m_progressPageId)
+        return;
+
+    VcsBase::Command *cmd = createCommand(&m_checkoutDir);
+    QTC_ASSERT(cmd, done(QDialog::Rejected));
+
+    // No "back" available while running.
+    button(QWizard::BackButton)->setEnabled(false);
+    m_progressPage->start(cmd);
 }
 
 void BaseCheckoutWizard::slotTerminated(bool success)
@@ -77,17 +86,13 @@ void BaseCheckoutWizard::slotTerminated(bool success)
         button(QWizard::BackButton)->setEnabled(true);
 }
 
-void BaseCheckoutWizard::start(Command *command)
-{
-    // No "back" available while running.
-    button(QWizard::BackButton)->setEnabled(false);
-    m_progressPage->start(command);
-}
-
-int BaseCheckoutWizard::exec()
+QString BaseCheckoutWizard::run()
 {
     m_progressPageId = addPage(m_progressPage);
-    return Utils::Wizard::exec();
+    if (Utils::Wizard::exec() == QDialog::Accepted)
+        return m_checkoutDir;
+    else
+        return QString();
 }
 
 void BaseCheckoutWizard::reject()
diff --git a/src/plugins/vcsbase/basecheckoutwizard.h b/src/plugins/vcsbase/basecheckoutwizard.h
index d0269b9916..168424470c 100644
--- a/src/plugins/vcsbase/basecheckoutwizard.h
+++ b/src/plugins/vcsbase/basecheckoutwizard.h
@@ -49,13 +49,11 @@ public:
 
     void setTitle(const QString &title);
     void setStartedStatus(const QString &title);
-    void start(VcsBase::Command *command);
 
-public slots:
-    int exec();
+    QString run();
 
-signals:
-    void progressPageShown();
+protected:
+    virtual VcsBase::Command *createCommand(QString *checkoutDir) = 0;
 
 private slots:
     void slotPageChanged(int id);
@@ -65,6 +63,7 @@ private slots:
 private:
     Internal::CheckoutProgressWizardPage *m_progressPage;
     int m_progressPageId;
+    QString m_checkoutDir;
 };
 
 } // namespace VcsBase
diff --git a/src/plugins/vcsbase/basecheckoutwizardfactory.cpp b/src/plugins/vcsbase/basecheckoutwizardfactory.cpp
index 8151f74609..632eec4fa4 100644
--- a/src/plugins/vcsbase/basecheckoutwizardfactory.cpp
+++ b/src/plugins/vcsbase/basecheckoutwizardfactory.cpp
@@ -71,14 +71,12 @@ public:
     void clear();
 
     BaseCheckoutWizard *wizard;
-    QString checkoutPath;
 };
 
 void BaseCheckoutWizardFactoryPrivate::clear()
 {
     delete wizard;
     wizard = 0;
-    checkoutPath.clear();
 }
 
 } // namespace Internal
@@ -107,14 +105,13 @@ void BaseCheckoutWizardFactory::runWizard(const QString &path, QWidget *parent,
     // Create dialog and launch
 
     d->wizard = create(path, parent);
-    connect(d->wizard, SIGNAL(progressPageShown()), this, SLOT(slotProgressPageShown()));
     d->wizard->setWindowTitle(displayName());
-    if (d->wizard->exec() != QDialog::Accepted) {
+    const QString checkoutPath = d->wizard->run();
+    if (checkoutPath.isEmpty()) {
         d->clear();
         return;
     }
     // Now try to find the project file and open
-    const QString checkoutPath = d->checkoutPath;
     d->clear();
     QString errorMessage;
     const QString projectFile = openProject(checkoutPath, &errorMessage);
@@ -175,13 +172,4 @@ QString BaseCheckoutWizardFactory::openProject(const QString &path, QString *err
     return projectFile;
 }
 
-void BaseCheckoutWizardFactory::slotProgressPageShown()
-{
-    QList<QWizardPage *> pages;
-    foreach (int id, d->wizard->pageIds())
-        pages << d->wizard->page(id);
-    Command *command = createCommand(pages, &(d->checkoutPath));
-    d->wizard->start(command);
-}
-
 } // namespace VcsBase
diff --git a/src/plugins/vcsbase/basecheckoutwizardfactory.h b/src/plugins/vcsbase/basecheckoutwizardfactory.h
index 7c6e5682c8..8da9522150 100644
--- a/src/plugins/vcsbase/basecheckoutwizardfactory.h
+++ b/src/plugins/vcsbase/basecheckoutwizardfactory.h
@@ -60,13 +60,6 @@ public:
 
     virtual BaseCheckoutWizard *create(const QString &path, QWidget *parent = 0) const = 0;
 
-protected:
-    virtual Command *createCommand(const QList<QWizardPage *> &parameterPages,
-                                   QString *checkoutPath) = 0;
-
-private slots:
-    void slotProgressPageShown();
-
 private:
     Internal::BaseCheckoutWizardFactoryPrivate *const d;
 };
-- 
GitLab