diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 4636c6736150879b73236a74ad5cc98c5408f383..3f73eaf1e76889d061b6f26c1cdb4d8c7c4118ab 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -2880,12 +2880,31 @@ void GitClient::launchGitK(const QString &workingDirectory, const QString &fileN QDir foundBinDir(binaryInfo.dir()); const bool foundBinDirIsCmdDir = foundBinDir.dirName() == QLatin1String("cmd"); QProcessEnvironment env = processEnvironment(); - if (tryLauchingGitK(env, workingDirectory, fileName, foundBinDir.path(), foundBinDirIsCmdDir)) + if (tryLauchingGitK(env, workingDirectory, fileName, foundBinDir.path())) return; - if (!foundBinDirIsCmdDir) + + QString gitkPath = foundBinDir.path() + QLatin1String("/gitk"); + VcsBase::VcsBaseOutputWindow::instance()->appendSilently(msgCannotLaunch(gitkPath)); + + if (foundBinDirIsCmdDir) { + foundBinDir.cdUp(); + if (tryLauchingGitK(env, workingDirectory, fileName, + foundBinDir.path() + QLatin1String("/bin"))) { + return; + } + gitkPath = foundBinDir.path() + QLatin1String("/gitk"); + VcsBase::VcsBaseOutputWindow::instance()->appendSilently(msgCannotLaunch(gitkPath)); + } + + Utils::Environment sysEnv = Utils::Environment::systemEnvironment(); + const QString exec = sysEnv.searchInPath(QLatin1String("gitk")); + + if (!exec.isEmpty() && tryLauchingGitK(env, workingDirectory, fileName, + QFileInfo(exec).absolutePath())) { return; - foundBinDir.cdUp(); - tryLauchingGitK(env, workingDirectory, fileName, foundBinDir.path() + QLatin1String("/bin"), false); + } + + VcsBase::VcsBaseOutputWindow::instance()->appendError(msgCannotLaunch(QLatin1String("gitk"))); } void GitClient::launchRepositoryBrowser(const QString &workingDirectory) @@ -2898,8 +2917,7 @@ void GitClient::launchRepositoryBrowser(const QString &workingDirectory) bool GitClient::tryLauchingGitK(const QProcessEnvironment &env, const QString &workingDirectory, const QString &fileName, - const QString &gitBinDirectory, - bool silent) + const QString &gitBinDirectory) { QString binary = gitBinDirectory + QLatin1String("/gitk"); QStringList arguments; @@ -2934,12 +2952,7 @@ bool GitClient::tryLauchingGitK(const QProcessEnvironment &env, } else { success = QProcess::startDetached(binary, arguments, workingDirectory); } - if (!success) { - if (silent) - outwin->appendSilently(msgCannotLaunch(binary)); - else - outwin->appendError(msgCannotLaunch(binary)); - } + return success; } diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 6d5593df4c41d0426fa853a44232861341afcb71..5e8131925b1f811113fc702e9181fc083b1d0a87 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -410,8 +410,7 @@ private: bool tryLauchingGitK(const QProcessEnvironment &env, const QString &workingDirectory, const QString &fileName, - const QString &gitBinDirectory, - bool silent); + const QString &gitBinDirectory); bool cleanList(const QString &workingDirectory, const QString &flag, QStringList *files, QString *errorMessage); mutable QString m_gitVersionForBinary;