diff --git a/src/plugins/bazaar/bazaarcontrol.cpp b/src/plugins/bazaar/bazaarcontrol.cpp index 361f2a96cb328f2ae59956538673cb82eea188ac..e832086fbbb325b4545bb7cdb5901f67db8bd497 100644 --- a/src/plugins/bazaar/bazaarcontrol.cpp +++ b/src/plugins/bazaar/bazaarcontrol.cpp @@ -67,7 +67,7 @@ bool BazaarControl::managesDirectory(const QString &directory, QString *topLevel bool BazaarControl::isConfigured() const { - const QString binary = m_bazaarClient->settings()->stringValue(BazaarSettings::binaryPathKey); + const QString binary = m_bazaarClient->settings()->binaryPath(); if (binary.isEmpty()) return false; QFileInfo fi(binary); diff --git a/src/plugins/bazaar/clonewizard.cpp b/src/plugins/bazaar/clonewizard.cpp index 827041a44a82744e5aee386dff2ac9744701fbc2..07aade5404314da69f250e8eb3c56bf017cb0afc 100644 --- a/src/plugins/bazaar/clonewizard.cpp +++ b/src/plugins/bazaar/clonewizard.cpp @@ -113,6 +113,6 @@ QSharedPointer<VcsBase::AbstractCheckoutJob> CloneWizard::createJob(const QList< << extraOptions << page->repository() << page->directory(); VcsBase::ProcessCheckoutJob *job = new VcsBase::ProcessCheckoutJob; - job->addStep(settings.stringValue(BazaarSettings::binaryPathKey), args, page->path()); + job->addStep(settings.binaryPath(), args, page->path()); return QSharedPointer<VcsBase::AbstractCheckoutJob>(job); } diff --git a/src/plugins/bazaar/optionspage.cpp b/src/plugins/bazaar/optionspage.cpp index da108b6cb9eded0ed537dad85723715a493c8802..377d13b3727763bf14c556580c5efc06a829add8 100644 --- a/src/plugins/bazaar/optionspage.cpp +++ b/src/plugins/bazaar/optionspage.cpp @@ -53,7 +53,7 @@ OptionsPageWidget::OptionsPageWidget(QWidget *parent) BazaarSettings OptionsPageWidget::settings() const { BazaarSettings s = BazaarPlugin::instance()->settings(); - s.setValue(BazaarSettings::binaryPathKey, m_ui.commandChooser->path()); + s.setValue(BazaarSettings::binaryPathKey, m_ui.commandChooser->rawPath()); s.setValue(BazaarSettings::userNameKey, m_ui.defaultUsernameLineEdit->text().trimmed()); s.setValue(BazaarSettings::userEmailKey, m_ui.defaultEmailLineEdit->text().trimmed()); s.setValue(BazaarSettings::logCountKey, m_ui.logEntriesCount->value()); diff --git a/src/plugins/cvs/checkoutwizard.cpp b/src/plugins/cvs/checkoutwizard.cpp index a28a3172090aed7f0cc19d998cad8984562609da..2339260f7ad4b6c1d496fcfbd8e4970fd9b60c55 100644 --- a/src/plugins/cvs/checkoutwizard.cpp +++ b/src/plugins/cvs/checkoutwizard.cpp @@ -84,7 +84,7 @@ QSharedPointer<VcsBase::AbstractCheckoutJob> CheckoutWizard::createJob(const QLi const CheckoutWizardPage *cwp = qobject_cast<const CheckoutWizardPage *>(parameterPages.front()); QTC_ASSERT(cwp, return QSharedPointer<VcsBase::AbstractCheckoutJob>()); const CvsSettings settings = CvsPlugin::instance()->settings(); - const QString binary = settings.cvsCommand; + const QString binary = settings.cvsBinaryPath; QStringList args; const QString repository = cwp->repository(); args << QLatin1String("checkout") << repository; diff --git a/src/plugins/cvs/cvscontrol.cpp b/src/plugins/cvs/cvscontrol.cpp index f16344818c2c02fa40f533b794927f50807429ca..45e8f473d8c0c4e8dff6d295f6752db5437c3be7 100644 --- a/src/plugins/cvs/cvscontrol.cpp +++ b/src/plugins/cvs/cvscontrol.cpp @@ -56,7 +56,7 @@ Core::Id CvsControl::id() const bool CvsControl::isConfigured() const { - const QString binary = m_plugin->settings().cvsCommand; + const QString binary = m_plugin->settings().cvsBinaryPath; if (binary.isEmpty()) return false; QFileInfo fi(binary); diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index 1f1561b46f3200cf5460a4498de336990d603415..1bf6a4fc6c46e57b3d9d987235826ae67c1a5a87 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -1229,7 +1229,7 @@ CvsResponse CvsPlugin::runCvs(const QString &workingDirectory, unsigned flags, QTextCodec *outputCodec) { - const QString executable = m_settings.cvsCommand; + const QString executable = m_settings.cvsBinaryPath; CvsResponse response; if (executable.isEmpty()) { response.result = CvsResponse::OtherError; diff --git a/src/plugins/cvs/cvssettings.cpp b/src/plugins/cvs/cvssettings.cpp index 3a843b63c3e2a1447a99949962cb2d3f8eebc239..e22a7bb8985d058fa2dac92e5e6f51412ce5da22 100644 --- a/src/plugins/cvs/cvssettings.cpp +++ b/src/plugins/cvs/cvssettings.cpp @@ -30,6 +30,8 @@ #include "cvssettings.h" +#include <utils/environment.h> + #include <QSettings> #include <QTextStream> @@ -70,6 +72,7 @@ void CvsSettings::fromSettings(QSettings *settings) { settings->beginGroup(QLatin1String(groupC)); cvsCommand = settings->value(QLatin1String(commandKeyC), defaultCommand()).toString(); + cvsBinaryPath = Utils::Environment::systemEnvironment().searchInPath(cvsCommand); promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool(); cvsRoot = settings->value(QLatin1String(rootC), QString()).toString(); cvsDiffOptions = settings->value(QLatin1String(diffOptionsKeyC), QLatin1String(defaultDiffOptions)).toString(); diff --git a/src/plugins/cvs/cvssettings.h b/src/plugins/cvs/cvssettings.h index eb3eaaa9416f759b6283600b135e7222d1c027dc..09cd04da9a790a6b71b9a94e0a2f77cd6aaaf3c1 100644 --- a/src/plugins/cvs/cvssettings.h +++ b/src/plugins/cvs/cvssettings.h @@ -56,6 +56,7 @@ struct CvsSettings bool equals(const CvsSettings &s) const; QString cvsCommand; + QString cvsBinaryPath; QString cvsRoot; QString cvsDiffOptions; int timeOutS; diff --git a/src/plugins/cvs/settingspage.cpp b/src/plugins/cvs/settingspage.cpp index 622043024ed90872223c59af2544c458246f70aa..51383b2158a210bbb8ca05319cba8b7c042ef47a 100644 --- a/src/plugins/cvs/settingspage.cpp +++ b/src/plugins/cvs/settingspage.cpp @@ -55,7 +55,8 @@ SettingsPageWidget::SettingsPageWidget(QWidget *parent) : CvsSettings SettingsPageWidget::settings() const { CvsSettings rc; - rc.cvsCommand = m_ui.commandPathChooser->path(); + rc.cvsCommand = m_ui.commandPathChooser->rawPath(); + rc.cvsBinaryPath = m_ui.commandPathChooser->path(); rc.cvsRoot = m_ui.rootLineEdit->text(); rc.cvsDiffOptions = m_ui.diffOptionsLineEdit->text(); rc.timeOutS = m_ui.timeOutSpinBox->value(); diff --git a/src/plugins/git/gitsettings.cpp b/src/plugins/git/gitsettings.cpp index c4fca8d32d49ddb462fb5149ad241c6181d3e31d..53810909683f20683e05f5dd1d3a263a1ff753a1 100644 --- a/src/plugins/git/gitsettings.cpp +++ b/src/plugins/git/gitsettings.cpp @@ -82,7 +82,7 @@ QString GitSettings::gitBinaryPath(bool *ok, QString *errorMessage) const errorMessage->clear(); if (m_binaryPath.isEmpty()) { - const QString binary = stringValue(binaryPathKey); + const QString binary = binaryPath(); QString currentPath = stringValue(pathKey); QString systemPath = QString::fromLocal8Bit(qgetenv("PATH")); if (!systemPath.isEmpty()) { diff --git a/src/plugins/mercurial/clonewizard.cpp b/src/plugins/mercurial/clonewizard.cpp index 1ed218952c194fed6e7650d9ff7758d4b072a6aa..99afd0708e6fc0c5cb767f7747214010d7b8196d 100644 --- a/src/plugins/mercurial/clonewizard.cpp +++ b/src/plugins/mercurial/clonewizard.cpp @@ -92,6 +92,6 @@ QSharedPointer<AbstractCheckoutJob> CloneWizard::createJob(const QList<QWizardPa args << QLatin1String("clone") << page->repository() << directory; *checkoutPath = path + QLatin1Char('/') + directory; ProcessCheckoutJob *job = new ProcessCheckoutJob; - job->addStep(settings.stringValue(MercurialSettings::binaryPathKey), args, path); + job->addStep(settings.binaryPath(), args, path); return QSharedPointer<AbstractCheckoutJob>(job); } diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp index 275a28c690957853c45f8f531ee1a4893ccdaab4..3b9b075bbac05cf33f399f88f2a5d5409862fa30 100644 --- a/src/plugins/mercurial/mercurialcontrol.cpp +++ b/src/plugins/mercurial/mercurialcontrol.cpp @@ -67,7 +67,7 @@ bool MercurialControl::managesDirectory(const QString &directory, QString *topLe bool MercurialControl::isConfigured() const { - const QString binary = mercurialClient->settings()->stringValue(MercurialSettings::binaryPathKey); + const QString binary = mercurialClient->settings()->binaryPath(); if (binary.isEmpty()) return false; QFileInfo fi(binary); diff --git a/src/plugins/mercurial/optionspage.cpp b/src/plugins/mercurial/optionspage.cpp index 1fe57b1af58f5bc76d4b7a18cffc0ab138fe6e69..9c7bc41b632b9926cc3231d31f49d06739b2d749 100644 --- a/src/plugins/mercurial/optionspage.cpp +++ b/src/plugins/mercurial/optionspage.cpp @@ -52,7 +52,7 @@ OptionsPageWidget::OptionsPageWidget(QWidget *parent) : MercurialSettings OptionsPageWidget::settings() const { MercurialSettings s = MercurialPlugin::instance()->settings(); - s.setValue(MercurialSettings::binaryPathKey, m_ui.commandChooser->path()); + s.setValue(MercurialSettings::binaryPathKey, m_ui.commandChooser->rawPath()); s.setValue(MercurialSettings::userNameKey, m_ui.defaultUsernameLineEdit->text().trimmed()); s.setValue(MercurialSettings::userEmailKey, m_ui.defaultEmailLineEdit->text().trimmed()); s.setValue(MercurialSettings::logCountKey, m_ui.logEntriesCount->value()); diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index a53d9ab2c3b53678a46a403e7195c6a28fecc5d9..8b204e6708fc9531aa3e5c8762d851b3cf1ed2c6 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -1013,7 +1013,7 @@ PerforceResponse PerforcePlugin::synchronousProcess(const QString &workingDir, if (Perforce::Constants::debug) qDebug() << "PerforcePlugin::run syncp actual args [" << process.workingDirectory() << ']' << args; process.setTimeOutMessageBoxEnabled(true); - const Utils::SynchronousProcessResponse sp_resp = process.run(m_settings.p4Command(), args); + const Utils::SynchronousProcessResponse sp_resp = process.run(m_settings.p4BinaryPath(), args); if (Perforce::Constants::debug) qDebug() << sp_resp; @@ -1034,7 +1034,7 @@ PerforceResponse PerforcePlugin::synchronousProcess(const QString &workingDir, response.message = msgCrash(); break; case Utils::SynchronousProcessResponse::StartFailed: - response.message = msgNotStarted(m_settings.p4Command()); + response.message = msgNotStarted(m_settings.p4BinaryPath()); break; case Utils::SynchronousProcessResponse::Hang: response.message = msgCrash(); @@ -1061,13 +1061,13 @@ PerforceResponse PerforcePlugin::fullySynchronousProcess(const QString &workingD qDebug() << "PerforcePlugin::run fully syncp actual args [" << process.workingDirectory() << ']' << args; PerforceResponse response; - process.start(m_settings.p4Command(), args); + process.start(m_settings.p4BinaryPath(), args); if (stdInput.isEmpty()) process.closeWriteChannel(); if (!process.waitForStarted(3000)) { response.error = true; - response.message = msgNotStarted(m_settings.p4Command()); + response.message = msgNotStarted(m_settings.p4BinaryPath()); return response; } if (!stdInput.isEmpty()) { @@ -1075,7 +1075,7 @@ PerforceResponse PerforcePlugin::fullySynchronousProcess(const QString &workingD Utils::SynchronousProcess::stopProcess(process); response.error = true; response.message = tr("Unable to write input data to process %1: %2"). - arg(QDir::toNativeSeparators(m_settings.p4Command()), + arg(QDir::toNativeSeparators(m_settings.p4BinaryPath()), process.errorString()); return response; } @@ -1145,7 +1145,7 @@ PerforceResponse PerforcePlugin::runP4Cmd(const QString &workingDir, actualArgs.append(args); if (flags & CommandToWindow) - outputWindow->appendCommand(workingDir, m_settings.p4Command(), actualArgs); + outputWindow->appendCommand(workingDir, m_settings.p4BinaryPath(), actualArgs); if (flags & ShowBusyCursor) QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); @@ -1520,14 +1520,14 @@ void PerforcePlugin::slotTopLevelFailed(const QString &errorMessage) void PerforcePlugin::getTopLevel() { // Run a new checker - if (m_settings.p4Command().isEmpty()) + if (m_settings.p4BinaryPath().isEmpty()) return; PerforceChecker *checker = new PerforceChecker(this); connect(checker, SIGNAL(failed(QString)), this, SLOT(slotTopLevelFailed(QString))); connect(checker, SIGNAL(failed(QString)), checker, SLOT(deleteLater())); connect(checker, SIGNAL(succeeded(QString)), this, SLOT(slotTopLevelFound(QString))); connect(checker, SIGNAL(succeeded(QString)),checker, SLOT(deleteLater())); - checker->start(m_settings.p4Command(), m_settings.commonP4Arguments(QString()), 30000); + checker->start(m_settings.p4BinaryPath(), m_settings.commonP4Arguments(QString()), 30000); } } diff --git a/src/plugins/perforce/perforcesettings.cpp b/src/plugins/perforce/perforcesettings.cpp index 414daf350e67d638e298513a733cf8d30d2ced9e..2dcd24f9e5c9c371a575a5154175be8f49247685 100644 --- a/src/plugins/perforce/perforcesettings.cpp +++ b/src/plugins/perforce/perforcesettings.cpp @@ -57,13 +57,12 @@ enum { defaultTimeOutS = 30, defaultLogCount = 1000 }; static QString defaultCommand() { - Utils::Environment env = Utils::Environment::systemEnvironment(); QString rc; rc = QLatin1String("p4"); #if defined(Q_OS_WIN32) rc.append(QLatin1String(".exe")); #endif - return env.searchInPath(rc); + return rc; } namespace Perforce { @@ -115,6 +114,7 @@ void PerforceSettings::fromSettings(QSettings *settings) { settings->beginGroup(QLatin1String(groupC)); m_settings.p4Command = settings->value(QLatin1String(commandKeyC), defaultCommand()).toString(); + m_settings.p4BinaryPath = Utils::Environment::systemEnvironment().searchInPath(m_settings.p4Command); m_settings.defaultEnv = settings->value(QLatin1String(defaultKeyC), true).toBool(); m_settings.p4Port = settings->value(QLatin1String(portKeyC), QString()).toString(); m_settings.p4Client = settings->value(QLatin1String(clientKeyC), QString()).toString(); @@ -159,6 +159,11 @@ QString PerforceSettings::p4Command() const return m_settings.p4Command; } +QString PerforceSettings::p4BinaryPath() const +{ + return m_settings.p4BinaryPath; +} + QString PerforceSettings::p4Port() const { return m_settings.p4Port; diff --git a/src/plugins/perforce/perforcesettings.h b/src/plugins/perforce/perforcesettings.h index cd185689582563fbd037c02d5fd6b05c57089217..120b6d17d3327622ed4719f6a307f7f2d6fb4f95 100644 --- a/src/plugins/perforce/perforcesettings.h +++ b/src/plugins/perforce/perforcesettings.h @@ -54,6 +54,7 @@ struct Settings { QString *errorMessage); QString p4Command; + QString p4BinaryPath; QString p4Port; QString p4Client; QString p4User; @@ -92,7 +93,7 @@ public: inline bool isValid() const { - return !m_topLevel.isEmpty() && !m_settings.p4Command.isEmpty(); + return !m_topLevel.isEmpty() && !m_settings.p4BinaryPath.isEmpty(); } void fromSettings(QSettings *settings); @@ -123,6 +124,7 @@ public: QString mapToFileSystem(const QString &perforceFilePath) const; QString p4Command() const; + QString p4BinaryPath() const; QString p4Port() const; QString p4Client() const; QString p4User() const; diff --git a/src/plugins/perforce/perforceversioncontrol.cpp b/src/plugins/perforce/perforceversioncontrol.cpp index 0b0e804fe168d72b41f4dcf37acfdeca3f5efeb7..d4482aa5ba63b5a9084b5edff75b18a8bf750bf0 100644 --- a/src/plugins/perforce/perforceversioncontrol.cpp +++ b/src/plugins/perforce/perforceversioncontrol.cpp @@ -58,7 +58,7 @@ Core::Id PerforceVersionControl::id() const bool PerforceVersionControl::isConfigured() const { - const QString binary = m_plugin->settings().p4Command(); + const QString binary = m_plugin->settings().p4BinaryPath(); if (binary.isEmpty()) return false; QFileInfo fi(binary); diff --git a/src/plugins/perforce/settingspage.cpp b/src/plugins/perforce/settingspage.cpp index 4695b035033c6100fa333d41ed1458ee8ebea002..0a0239443ac71032b876f6fb65cf99d2cb893c43 100644 --- a/src/plugins/perforce/settingspage.cpp +++ b/src/plugins/perforce/settingspage.cpp @@ -67,7 +67,7 @@ void SettingsPageWidget::slotTest() setStatusText(tr("Testing...")); const Settings s = settings(); - m_checker->start(s.p4Command, s.commonP4Arguments(), 10000); + m_checker->start(s.p4BinaryPath, s.commonP4Arguments(), 10000); } void SettingsPageWidget::testSucceeded(const QString &repo) @@ -78,7 +78,8 @@ void SettingsPageWidget::testSucceeded(const QString &repo) Settings SettingsPageWidget::settings() const { Settings settings; - settings.p4Command = m_ui.pathChooser->path(); + settings.p4Command = m_ui.pathChooser->rawPath(); + settings.p4BinaryPath = m_ui.pathChooser->path(); settings.defaultEnv = !m_ui.environmentGroupBox->isChecked(); settings.p4Port = m_ui.portLineEdit->text(); settings.p4User = m_ui.userLineEdit->text(); diff --git a/src/plugins/subversion/checkoutwizard.cpp b/src/plugins/subversion/checkoutwizard.cpp index b2f86267d9b40c53e9e848910e6ce695e61418f8..c7ee8c5d26c762f962b1198a2e2d5cd8293c898c 100644 --- a/src/plugins/subversion/checkoutwizard.cpp +++ b/src/plugins/subversion/checkoutwizard.cpp @@ -83,7 +83,7 @@ QSharedPointer<VcsBase::AbstractCheckoutJob> CheckoutWizard::createJob(const QLi const CheckoutWizardPage *cwp = qobject_cast<const CheckoutWizardPage *>(parameterPages.front()); QTC_ASSERT(cwp, return QSharedPointer<VcsBase::AbstractCheckoutJob>()); const SubversionSettings settings = SubversionPlugin::instance()->settings(); - const QString binary = settings.svnCommand; + const QString binary = settings.svnBinaryPath; const QString directory = cwp->directory(); QStringList args; args << QLatin1String("checkout") << cwp->repository() << directory; diff --git a/src/plugins/subversion/settingspage.cpp b/src/plugins/subversion/settingspage.cpp index 1b14ec46621c5804b8bcd40f757f5af4d9ac8ce0..f8404453c651027fe309d833ccfe2eb6c507a24f 100644 --- a/src/plugins/subversion/settingspage.cpp +++ b/src/plugins/subversion/settingspage.cpp @@ -55,7 +55,8 @@ SettingsPageWidget::SettingsPageWidget(QWidget *parent) : SubversionSettings SettingsPageWidget::settings() const { SubversionSettings rc; - rc.svnCommand = m_ui.pathChooser->path(); + rc.svnCommand = m_ui.pathChooser->rawPath(); + rc.svnBinaryPath = m_ui.pathChooser->path(); rc.useAuthentication = m_ui.userGroupBox->isChecked(); rc.user = m_ui.usernameLineEdit->text(); rc.password = m_ui.passwordLineEdit->text(); diff --git a/src/plugins/subversion/subversioncontrol.cpp b/src/plugins/subversion/subversioncontrol.cpp index be625fbc9d78d0e8682e7b58985e80139e6f0c8f..b581244b6cdc1f4f542051c19d5d94e84e8ed1b4 100644 --- a/src/plugins/subversion/subversioncontrol.cpp +++ b/src/plugins/subversion/subversioncontrol.cpp @@ -56,7 +56,7 @@ Core::Id SubversionControl::id() const bool SubversionControl::isConfigured() const { - const QString binary = m_plugin->settings().svnCommand; + const QString binary = m_plugin->settings().svnBinaryPath; if (binary.isEmpty()) return false; QFileInfo fi(binary); diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index 97d6882d2a9a858ec04c0c78fd7eb52ee0ae4c7a..c24490515909fa70785b2dcd56300d59d8b794c6 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -1120,7 +1120,7 @@ SubversionResponse SubversionPlugin::runSvn(const QString &workingDir, const QStringList &arguments, int timeOut, unsigned flags, QTextCodec *outputCodec) { - const QString executable = m_settings.svnCommand; + const QString executable = m_settings.svnBinaryPath; SubversionResponse response; if (executable.isEmpty()) { response.error = true; diff --git a/src/plugins/subversion/subversionsettings.cpp b/src/plugins/subversion/subversionsettings.cpp index d0ef51366b7219f87051e2d07fe3bde327a076b9..8ba54a5a053ff1c3242c8af0e9f07680b33622e4 100644 --- a/src/plugins/subversion/subversionsettings.cpp +++ b/src/plugins/subversion/subversionsettings.cpp @@ -30,6 +30,8 @@ #include "subversionsettings.h" +#include <utils/environment.h> + #include <QSettings> static const char groupC[] = "Subversion"; @@ -71,6 +73,7 @@ void SubversionSettings::fromSettings(QSettings *settings) { settings->beginGroup(QLatin1String(groupC)); svnCommand = settings->value(QLatin1String(commandKeyC), defaultCommand()).toString(); + svnBinaryPath = Utils::Environment::systemEnvironment().searchInPath(svnCommand); useAuthentication = settings->value(QLatin1String(authenticationKeyC), QVariant(false)).toBool(); user = settings->value(QLatin1String(userKeyC), QString()).toString(); password = settings->value(QLatin1String(passwordKeyC), QString()).toString(); diff --git a/src/plugins/subversion/subversionsettings.h b/src/plugins/subversion/subversionsettings.h index d52a48d630a713270aecd8c1b9a6479f9f209b1d..735f21d7bc7a418ff5ccf5b4528b507e2a2fe5f5 100644 --- a/src/plugins/subversion/subversionsettings.h +++ b/src/plugins/subversion/subversionsettings.h @@ -55,6 +55,7 @@ struct SubversionSettings bool equals(const SubversionSettings &s) const; QString svnCommand; + QString svnBinaryPath; bool useAuthentication; QString user; QString password; diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp index 0b0737beeb481bf5f094745451a72bfeddeea882..e7afa89b7eef7fef7a8342178c764941e5952f6d 100644 --- a/src/plugins/vcsbase/vcsbaseclient.cpp +++ b/src/plugins/vcsbase/vcsbaseclient.cpp @@ -282,7 +282,7 @@ bool VcsBaseClient::vcsFullySynchronousExec(const QString &workingDir, vcsProcess.setWorkingDirectory(workingDir); vcsProcess.setProcessEnvironment(processEnvironment()); - const QString binary = settings()->stringValue(VcsBaseClientSettings::binaryPathKey); + const QString binary = settings()->binaryPath(); ::vcsOutputWindow()->appendCommand(workingDir, binary, args); @@ -317,7 +317,7 @@ Utils::SynchronousProcessResponse VcsBaseClient::vcsSynchronousExec( unsigned flags, QTextCodec *outputCodec) { - const QString binary = settings()->stringValue(VcsBaseClientSettings::binaryPathKey); + const QString binary = settings()->binaryPath(); const int timeoutSec = settings()->intValue(VcsBaseClientSettings::timeoutKey); return VcsBase::VcsBasePlugin::runVcs(workingDirectory, binary, args, timeoutSec * 1000, flags, outputCodec); @@ -545,7 +545,7 @@ VcsBaseEditorParameterWidget *VcsBaseClient::createLogEditor(const QString &work QString VcsBaseClient::vcsEditorTitle(const QString &vcsCmd, const QString &sourceId) const { - const QString binary = settings()->stringValue(VcsBaseClientSettings::binaryPathKey); + const QString binary = settings()->binaryPath(); return QFileInfo(binary).baseName() + QLatin1Char(' ') + vcsCmd + QLatin1Char(' ') + QFileInfo(sourceId).fileName(); @@ -592,7 +592,7 @@ Command *VcsBaseClient::createCommand(const QString &workingDirectory, VcsBase::VcsBaseEditorWidget *editor, JobOutputBindMode mode) { - Command *cmd = new Command(d->m_clientSettings->stringValue(VcsBaseClientSettings::binaryPathKey), + Command *cmd = new Command(d->m_clientSettings->binaryPath(), workingDirectory, processEnvironment()); cmd->setDefaultTimeout(d->m_clientSettings->intValue(VcsBaseClientSettings::timeoutKey)); if (editor) @@ -620,7 +620,7 @@ Command *VcsBaseClient::createCommand(const QString &workingDirectory, void VcsBaseClient::enqueueJob(Command *cmd, const QStringList &args) { - const QString binary = QFileInfo(d->m_clientSettings->stringValue(VcsBaseClientSettings::binaryPathKey)).baseName(); + const QString binary = QFileInfo(d->m_clientSettings->binaryPath()).baseName(); ::vcsOutputWindow()->appendCommand(cmd->workingDirectory(), binary, args); cmd->addJob(args); cmd->execute(); diff --git a/src/plugins/vcsbase/vcsbaseclientsettings.cpp b/src/plugins/vcsbase/vcsbaseclientsettings.cpp index c5a3bdbd59e9364a01c9a7b829701ca81b66144a..e71b242e2af21abdd9e97e9e2e5db10864cc75dd 100644 --- a/src/plugins/vcsbase/vcsbaseclientsettings.cpp +++ b/src/plugins/vcsbase/vcsbaseclientsettings.cpp @@ -30,6 +30,8 @@ #include "vcsbaseclientsettings.h" +#include <utils/environment.h> + #include <QSettings> namespace { @@ -165,13 +167,15 @@ public: QSharedData(other), m_valueHash(other.m_valueHash), m_defaultValueHash(other.m_defaultValueHash), - m_settingsGroup(other.m_settingsGroup) + m_settingsGroup(other.m_settingsGroup), + m_binaryFullPath(other.m_binaryFullPath) { } QHash<QString, SettingValue> m_valueHash; QVariantHash m_defaultValueHash; QString m_settingsGroup; + QString m_binaryFullPath; }; } // namespace Internal @@ -326,8 +330,11 @@ QVariant VcsBaseClientSettings::value(const QString &key) const void VcsBaseClientSettings::setValue(const QString &key, const QVariant &v) { - if (SettingValue::isUsableVariantType(valueType(key))) + if (SettingValue::isUsableVariantType(valueType(key))) { d->m_valueHash.insert(key, SettingValue(v)); + if (key == binaryPathKey) + d->m_binaryFullPath = Utils::Environment::systemEnvironment().searchInPath(v.toString()); + } } QVariant::Type VcsBaseClientSettings::valueType(const QString &key) const @@ -337,6 +344,11 @@ QVariant::Type VcsBaseClientSettings::valueType(const QString &key) const return QVariant::Invalid; } +QString VcsBaseClientSettings::binaryPath() const +{ + return d->m_binaryFullPath; +} + QString VcsBaseClientSettings::settingsGroup() const { return d->m_settingsGroup; diff --git a/src/plugins/vcsbase/vcsbaseclientsettings.h b/src/plugins/vcsbase/vcsbaseclientsettings.h index beab822c516206c7f2552148980e8b4f7777b214..f840a085c21ac3e46e83e66a5958afa03425dd5e 100644 --- a/src/plugins/vcsbase/vcsbaseclientsettings.h +++ b/src/plugins/vcsbase/vcsbaseclientsettings.h @@ -81,6 +81,8 @@ public: void setValue(const QString &key, const QVariant &v); QVariant::Type valueType(const QString &key) const; + QString binaryPath() const; + protected: QString settingsGroup() const; void setSettingsGroup(const QString &group);