diff options
author | Friedemann Kleint <[email protected]> | 2010-06-08 15:55:12 +0200 |
---|---|---|
committer | Friedemann Kleint <[email protected]> | 2010-06-08 15:55:12 +0200 |
commit | 7dc2760f0e0b5b5b7587e0ee5826a75faddf8b7f (patch) | |
tree | fd6c1bef7939f27d91121a3418bb208f66566b06 /src/plugins | |
parent | 019ff9d06b980f16cd2da100b0800985deef12b2 (diff) |
VCS[git]: Add menu option to launch gitk.
Task-number: QTCREATORBUG-1577
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/git/gitclient.cpp | 41 | ||||
-rw-r--r-- | src/plugins/git/gitclient.h | 2 | ||||
-rw-r--r-- | src/plugins/git/gitplugin.cpp | 4 |
3 files changed, 46 insertions, 1 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 7abe9ea1cb6..c9128ba4ac7 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1141,7 +1141,7 @@ bool GitClient::fullySynchronousGit(const QString &workingDirectory, if (!Utils::SynchronousProcess::readDataFromProcess(process, m_settings.timeoutSeconds * 1000, outputText, errorText, true)) { - *errorText->append(GitCommand::msgTimeout(m_settings.timeoutSeconds).toLocal8Bit()); + errorText->append(GitCommand::msgTimeout(m_settings.timeoutSeconds).toLocal8Bit()); Utils::SynchronousProcess::stopProcess(process); return false; } @@ -1254,6 +1254,45 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, return StatusChanged; } +void GitClient::launchGitK(const QString &workingDirectory) +{ + VCSBase::VCSBaseOutputWindow *outwin = VCSBase::VCSBaseOutputWindow::instance(); + // Locate git in (potentially) custom path. m_binaryPath can be absolute, + // which will be handled correctly. + QTC_ASSERT(!m_binaryPath.isEmpty(), return); + const QString gitBinary = QLatin1String(Constants::GIT_BINARY); + const QProcessEnvironment env = processEnvironment(); + const QString path = env.value(QLatin1String("PATH")); + const QString fullGitBinary = Utils::SynchronousProcess::locateBinary(path, m_binaryPath); + if (fullGitBinary.isEmpty()) { + outwin->appendError(tr("Cannot locate %1.").arg(gitBinary)); + return; + } + const QString gitBinDirectory = QFileInfo(fullGitBinary).absolutePath(); +#ifdef Q_OS_WIN + // Launch 'wish' shell from git binary directory with the gitk located there + const QString binary = gitBinDirectory + QLatin1String("/wish"); + const QStringList arguments(gitBinDirectory + QLatin1String("/gitk")); +#else + // Simple: Run gitk from binary path + const QString binary = gitBinDirectory + QLatin1String("/gitk"); + const QStringList arguments; +#endif + outwin->appendCommand(workingDirectory, binary, arguments); + // This should use QProcess::startDetached ideally, but that does not have + // an environment parameter. + QProcess *process = new QProcess(this); + process->setWorkingDirectory(workingDirectory); + process->setProcessEnvironment(env); + process->start(binary, arguments); + if (!process->waitForStarted()) { + outwin->appendError(tr("Unable to launch %1.").arg(binary)); + delete process; + return; + } + connect(process, SIGNAL(finished(int)), process, SLOT(deleteLater())); +} + bool GitClient::getCommitData(const QString &workingDirectory, QString *commitTemplate, CommitData *d, diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 21403256d29..592a6d50ff1 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -203,6 +203,8 @@ public: QString *errorMessage = 0, bool *onBranch = 0); + void launchGitK(const QString &workingDirectory); + GitSettings settings() const; void setSettings(const GitSettings &s); diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 5b5d09902c4..119530b8ca8 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -416,6 +416,10 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) tr("Clean Repository..."), QLatin1String("Git.CleanRepository"), globalcontext, true, SLOT(cleanRepository())); + createRepositoryAction(actionManager, gitContainer, + tr("Launch gitk"), QLatin1String("Git.LaunchGitK"), + globalcontext, false, &GitClient::launchGitK); + gitContainer->addAction(createSeparator(actionManager, globalcontext, QLatin1String("Git.Sep.Global"), this)); ActionCommandPair actionCommand = |