diff --git a/src/plugins/cvs/checkoutwizard.cpp b/src/plugins/cvs/checkoutwizard.cpp index 7e7eb026b24651fc334548db2802488c47cd1f21..736cd9e2fc69b0c79d36bf0b6f07e59ed02f7fd7 100644 --- a/src/plugins/cvs/checkoutwizard.cpp +++ b/src/plugins/cvs/checkoutwizard.cpp @@ -59,19 +59,21 @@ QString CheckoutWizard::name() const return tr("CVS Checkout"); } -QWizardPage *CheckoutWizard::createParameterPage(const QString &path) +QList<QWizardPage*> CheckoutWizard::createParameterPages(const QString &path) { CheckoutWizardPage *cwp = new CheckoutWizardPage; cwp->setPath(path); - return cwp; + QList<QWizardPage*> rc; + rc.push_back(cwp); + return rc; } -QSharedPointer<VCSBase::AbstractCheckoutJob> CheckoutWizard::createJob(const QWizardPage *parameterPage, +QSharedPointer<VCSBase::AbstractCheckoutJob> CheckoutWizard::createJob(const QList<QWizardPage*> ¶meterPages, QString *checkoutPath) { // Collect parameters for the checkout command. // CVS does not allow for checking out into a different directory. - const CheckoutWizardPage *cwp = qobject_cast<const CheckoutWizardPage *>(parameterPage); + const CheckoutWizardPage *cwp = qobject_cast<const CheckoutWizardPage *>(parameterPages.front()); QTC_ASSERT(cwp, return QSharedPointer<VCSBase::AbstractCheckoutJob>()) const CVSSettings settings = CVSPlugin::cvsPluginInstance()->settings(); const QString binary = settings.cvsCommand; diff --git a/src/plugins/cvs/checkoutwizard.h b/src/plugins/cvs/checkoutwizard.h index 53c7f86a96117ea367ab01c707bc8c56a4ab432a..a35eda2c25c418e0b5542eb42981c0dcef2e537e 100644 --- a/src/plugins/cvs/checkoutwizard.h +++ b/src/plugins/cvs/checkoutwizard.h @@ -47,8 +47,8 @@ public: protected: // BaseCheckoutWizard - virtual QWizardPage *createParameterPage(const QString &path); - virtual QSharedPointer<VCSBase::AbstractCheckoutJob> createJob(const QWizardPage *parameterPage, + virtual QList<QWizardPage*> createParameterPages(const QString &path); + virtual QSharedPointer<VCSBase::AbstractCheckoutJob> createJob(const QList<QWizardPage*> ¶meterPage, QString *checkoutPath); }; diff --git a/src/plugins/git/clonewizard.cpp b/src/plugins/git/clonewizard.cpp index 80d3112504d3b608142e43558485b4fbad35056a..03903aa4ff6560b91a8f1ed74b131455e3b198c8 100644 --- a/src/plugins/git/clonewizard.cpp +++ b/src/plugins/git/clonewizard.cpp @@ -60,18 +60,20 @@ QString CloneWizard::name() const return tr("Git Repository Clone"); } -QWizardPage *CloneWizard::createParameterPage(const QString &path) +QList<QWizardPage*> CloneWizard::createParameterPages(const QString &path) { CloneWizardPage *cwp = new CloneWizardPage; cwp->setPath(path); - return cwp; + QList<QWizardPage*> rc; + rc.push_back(cwp); + return rc; } -QSharedPointer<VCSBase::AbstractCheckoutJob> CloneWizard::createJob(const QWizardPage *parameterPage, +QSharedPointer<VCSBase::AbstractCheckoutJob> CloneWizard::createJob(const QList<QWizardPage*> ¶meterPages, QString *checkoutPath) { // Collect parameters for the clone command. - const CloneWizardPage *cwp = qobject_cast<const CloneWizardPage *>(parameterPage); + const CloneWizardPage *cwp = qobject_cast<const CloneWizardPage *>(parameterPages.front()); QTC_ASSERT(cwp, return QSharedPointer<VCSBase::AbstractCheckoutJob>()) const GitClient *client = GitPlugin::instance()->gitClient(); QStringList args = client->binary(); diff --git a/src/plugins/git/clonewizard.h b/src/plugins/git/clonewizard.h index 2a1c0ff3b55b4a8ba9a10a912a38c1253eed7d9b..241be32d75ab723effb18695f2f255dbd0752dd5 100644 --- a/src/plugins/git/clonewizard.h +++ b/src/plugins/git/clonewizard.h @@ -47,8 +47,8 @@ public: protected: // BaseCheckoutWizard - virtual QWizardPage *createParameterPage(const QString &path); - virtual QSharedPointer<VCSBase::AbstractCheckoutJob> createJob(const QWizardPage *parameterPage, + virtual QList<QWizardPage*> createParameterPages(const QString &path); + virtual QSharedPointer<VCSBase::AbstractCheckoutJob> createJob(const QList<QWizardPage*> ¶meterPages, QString *checkoutPath); }; diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 6b900a5d8f54f0e011181281f2c459e99f25e756..5c50e52ffdd8f4932cbfbaf62a4d9ea9aae4d31b 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -684,25 +684,6 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, return StatusChanged; } -// Filter out untracked files that are not part of the project -static void filterUntrackedFilesOfProject(const QString &repoDir, QStringList *l) -{ - if (l->empty()) - return; - const QStringList nativeProjectFiles = VCSBase::VCSBaseSubmitEditor::currentProjectFiles(true); - if (nativeProjectFiles.empty()) - return; - const QDir repoDirectory(repoDir); - for (QStringList::iterator it = l->begin(); it != l->end(); ) { - const QString path = QDir::toNativeSeparators(repoDirectory.absoluteFilePath(*it)); - if (nativeProjectFiles.contains(path)) { - ++it; - } else { - it = l->erase(it); - } - } -} - bool GitClient::getCommitData(const QString &workingDirectory, QString *commitTemplate, CommitData *d, @@ -771,7 +752,7 @@ bool GitClient::getCommitData(const QString &workingDirectory, return false; } // Filter out untracked files that are not part of the project - filterUntrackedFilesOfProject(repoDirectory, &d->untrackedFiles); + VCSBase::VCSBaseSubmitEditor::filterUntrackedFilesOfProject(repoDirectory, &d->untrackedFiles); if (d->filesEmpty()) { *errorMessage = msgNoChangedFiles(); return false; diff --git a/src/plugins/subversion/checkoutwizard.cpp b/src/plugins/subversion/checkoutwizard.cpp index 5285b704c3f8c42a992021249e130047fb2fc2a9..955f34a3b4e186eca69ef684b9aa5751bb149c46 100644 --- a/src/plugins/subversion/checkoutwizard.cpp +++ b/src/plugins/subversion/checkoutwizard.cpp @@ -59,18 +59,20 @@ QString CheckoutWizard::name() const return tr("Subversion Checkout"); } -QWizardPage *CheckoutWizard::createParameterPage(const QString &path) +QList<QWizardPage*> CheckoutWizard::createParameterPages(const QString &path) { CheckoutWizardPage *cwp = new CheckoutWizardPage; cwp->setPath(path); - return cwp; + QList<QWizardPage*> rc; + rc.push_back(cwp); + return rc; } -QSharedPointer<VCSBase::AbstractCheckoutJob> CheckoutWizard::createJob(const QWizardPage *parameterPage, +QSharedPointer<VCSBase::AbstractCheckoutJob> CheckoutWizard::createJob(const QList<QWizardPage*> ¶meterPages, QString *checkoutPath) { // Collect parameters for the checkout command. - const CheckoutWizardPage *cwp = qobject_cast<const CheckoutWizardPage *>(parameterPage); + const CheckoutWizardPage *cwp = qobject_cast<const CheckoutWizardPage *>(parameterPages.front()); QTC_ASSERT(cwp, return QSharedPointer<VCSBase::AbstractCheckoutJob>()) const SubversionSettings settings = SubversionPlugin::subversionPluginInstance()->settings(); const QString binary = settings.svnCommand; diff --git a/src/plugins/subversion/checkoutwizard.h b/src/plugins/subversion/checkoutwizard.h index fbc9c1e1d36660ea688c658f7c99e5084f1b0d95..6b651c878882023eadaaa9c070446b1709d61f7e 100644 --- a/src/plugins/subversion/checkoutwizard.h +++ b/src/plugins/subversion/checkoutwizard.h @@ -47,8 +47,8 @@ public: protected: // BaseCheckoutWizard - virtual QWizardPage *createParameterPage(const QString &path); - virtual QSharedPointer<VCSBase::AbstractCheckoutJob> createJob(const QWizardPage *parameterPage, + virtual QList<QWizardPage*> createParameterPages(const QString &path); + virtual QSharedPointer<VCSBase::AbstractCheckoutJob> createJob(const QList<QWizardPage*> ¶meterPage, QString *checkoutPath); }; diff --git a/src/plugins/vcsbase/basecheckoutwizard.cpp b/src/plugins/vcsbase/basecheckoutwizard.cpp index 384fea0a05b2a102aeaddd8332deba19c212af1f..208983eb5fda502ad122d07139bb9f1f0e3ec12d 100644 --- a/src/plugins/vcsbase/basecheckoutwizard.cpp +++ b/src/plugins/vcsbase/basecheckoutwizard.cpp @@ -43,17 +43,17 @@ namespace VCSBase { struct BaseCheckoutWizardPrivate { - BaseCheckoutWizardPrivate() : dialog(0), parameterPage(0) {} + BaseCheckoutWizardPrivate() : dialog(0) {} void clear(); Internal::CheckoutWizardDialog *dialog; - QWizardPage *parameterPage; + QList<QWizardPage *> parameterPages; QString checkoutPath; }; void BaseCheckoutWizardPrivate::clear() { - parameterPage = 0; + parameterPages.clear(); dialog = 0; checkoutPath.clear(); } @@ -87,8 +87,8 @@ QString BaseCheckoutWizard::trCategory() const QStringList BaseCheckoutWizard::runWizard(const QString &path, QWidget *parent) { // Create dialog and launch - d->parameterPage = createParameterPage(path); - Internal::CheckoutWizardDialog dialog(d->parameterPage, parent); + d->parameterPages = createParameterPages(path); + Internal::CheckoutWizardDialog dialog(d->parameterPages, parent); d->dialog = &dialog; connect(&dialog, SIGNAL(progressPageShown()), this, SLOT(slotProgressPageShown())); dialog.setWindowTitle(name()); @@ -142,7 +142,7 @@ QString BaseCheckoutWizard::openProject(const QString &path, QString *errorMessa void BaseCheckoutWizard::slotProgressPageShown() { - const QSharedPointer<AbstractCheckoutJob> job = createJob(d->parameterPage, &(d->checkoutPath)); + const QSharedPointer<AbstractCheckoutJob> job = createJob(d->parameterPages, &(d->checkoutPath)); if (!job.isNull()) d->dialog->start(job); } diff --git a/src/plugins/vcsbase/basecheckoutwizard.h b/src/plugins/vcsbase/basecheckoutwizard.h index 51ea090caf1f57f2df1abd1ab0ecfde37aaa3cb2..228e84e26243fa96fc8d6e8d554e9fce269d3cda 100644 --- a/src/plugins/vcsbase/basecheckoutwizard.h +++ b/src/plugins/vcsbase/basecheckoutwizard.h @@ -34,6 +34,7 @@ #include <coreplugin/dialogs/iwizard.h> #include <QtCore/QSharedPointer> +#include <QtCore/QList> QT_BEGIN_NAMESPACE class QWizardPage; @@ -76,8 +77,8 @@ public: static QString openProject(const QString &path, QString *errorMessage); protected: - virtual QWizardPage *createParameterPage(const QString &path) = 0; - virtual QSharedPointer<AbstractCheckoutJob> createJob(const QWizardPage *parameterPage, + virtual QList<QWizardPage *> createParameterPages(const QString &path) = 0; + virtual QSharedPointer<AbstractCheckoutJob> createJob(const QList<QWizardPage *> ¶meterPages, QString *checkoutPath) = 0; private slots: diff --git a/src/plugins/vcsbase/checkoutwizarddialog.cpp b/src/plugins/vcsbase/checkoutwizarddialog.cpp index 23cac1009d878db88275ba51868bef86150347b5..30a671129a8ac9b15e0a5c86983686a3aae1d032 100644 --- a/src/plugins/vcsbase/checkoutwizarddialog.cpp +++ b/src/plugins/vcsbase/checkoutwizarddialog.cpp @@ -39,16 +39,17 @@ namespace VCSBase { namespace Internal { -enum PageId { ParameterPageId, ProgressPageId }; - -CheckoutWizardDialog::CheckoutWizardDialog(QWizardPage *parameterPage, +CheckoutWizardDialog::CheckoutWizardDialog(const QList<QWizardPage *> ¶meterPages, QWidget *parent) : QWizard(parent), - m_progressPage(new CheckoutProgressWizardPage) + m_progressPage(new CheckoutProgressWizardPage), + m_progressPageId(-1) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - setPage(ParameterPageId, parameterPage); - setPage(ProgressPageId, m_progressPage); + foreach(QWizardPage *wp, parameterPages) + addPage(wp); + m_progressPageId = parameterPages.size(); + setPage(m_progressPageId, m_progressPage); connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(slotPageChanged(int))); connect(m_progressPage, SIGNAL(terminated(bool)), this, SLOT(slotTerminated(bool))); Core::BaseFileWizard::setupWizard(this); @@ -56,7 +57,7 @@ CheckoutWizardDialog::CheckoutWizardDialog(QWizardPage *parameterPage, void CheckoutWizardDialog::slotPageChanged(int id) { - if (id == ProgressPageId) + if (id == m_progressPageId) emit progressPageShown(); } @@ -74,15 +75,10 @@ void CheckoutWizardDialog::start(const QSharedPointer<AbstractCheckoutJob> &job) button(QWizard::BackButton)->setEnabled(false); } -const QWizardPage *CheckoutWizardDialog::parameterPage() const -{ - return page(ParameterPageId); -} - void CheckoutWizardDialog::reject() { // First click kills, 2nd closes - if (currentId() == ProgressPageId && m_progressPage->isRunning()) { + if (currentId() == m_progressPageId && m_progressPage->isRunning()) { m_progressPage->terminate(); } else { QWizard::reject(); diff --git a/src/plugins/vcsbase/checkoutwizarddialog.h b/src/plugins/vcsbase/checkoutwizarddialog.h index 624cacf03b5142854df00a037a4f8b135331ca99..a05c6e7a8e457892b4803e635fea77e5d5171cab 100644 --- a/src/plugins/vcsbase/checkoutwizarddialog.h +++ b/src/plugins/vcsbase/checkoutwizarddialog.h @@ -31,6 +31,7 @@ #define CHECKOUTWIZARDDIALOG_H #include <QtCore/QSharedPointer> +#include <QtCore/QList> #include <QtGui/QWizard> namespace VCSBase { @@ -46,11 +47,10 @@ class CheckoutProgressWizardPage; class CheckoutWizardDialog : public QWizard { Q_OBJECT public: - CheckoutWizardDialog(QWizardPage *parameterPage, + CheckoutWizardDialog(const QList<QWizardPage *> ¶meterPages, QWidget *parent = 0); void start(const QSharedPointer<AbstractCheckoutJob> &job); - const QWizardPage *parameterPage() const; signals: void progressPageShown(); @@ -62,6 +62,7 @@ private slots: private: CheckoutProgressWizardPage *m_progressPage; + int m_progressPageId; }; } // namespace Internal diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index baf2fdda70c9a739256c0c0ea79508a0c987c8dc..0e7b369d11eebef0ea134fbb20c996eab7ad2e2f 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -576,6 +576,7 @@ QIcon VCSBaseSubmitEditor::submitIcon() return QIcon(QLatin1String(":/vcsbase/images/submit.png")); } +// Compile a list if files in the current projects. TODO: Recurse down qrc files? QStringList VCSBaseSubmitEditor::currentProjectFiles(bool nativeSeparators, QString *name) { using namespace ProjectExplorer; @@ -606,6 +607,26 @@ QStringList VCSBaseSubmitEditor::currentProjectFiles(bool nativeSeparators, QStr return files; } +// Reduce a list of untracked files reported by a VCS down to the files +// that are actually part of the current project(s). +void VCSBaseSubmitEditor::filterUntrackedFilesOfProject(const QString &repositoryDirectory, QStringList *untrackedFiles) +{ + if (untrackedFiles->empty()) + return; + const QStringList nativeProjectFiles = VCSBase::VCSBaseSubmitEditor::currentProjectFiles(true); + if (nativeProjectFiles.empty()) + return; + const QDir repoDir(repositoryDirectory); + for (QStringList::iterator it = untrackedFiles->begin(); it != untrackedFiles->end(); ) { + const QString path = QDir::toNativeSeparators(repoDir.absoluteFilePath(*it)); + if (nativeProjectFiles.contains(path)) { + ++it; + } else { + it = untrackedFiles->erase(it); + } + } +} + // Helper to raise an already open submit editor to prevent opening twice. bool VCSBaseSubmitEditor::raiseSubmitEditor() { diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h index 54d862f69cf4903ac672d95059b45c9d7fa619e2..6c5d05ad7ecea4a1875ab1d25af5e8e5332493d6 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.h +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h @@ -162,6 +162,10 @@ public: // be restricted to them static QStringList currentProjectFiles(bool nativeSeparators, QString *name = 0); + // Reduce a list of untracked files reported by a VCS down to the files + // that are actually part of the current project(s). + static void filterUntrackedFilesOfProject(const QString &repositoryDirectory, QStringList *untrackedFiles); + virtual bool isTemporary() const { return true; } // Helper to raise an already open submit editor to prevent opening twice.