aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2010-06-08 15:55:12 +0200
committerFriedemann Kleint <[email protected]>2010-06-08 15:55:12 +0200
commit7dc2760f0e0b5b5b7587e0ee5826a75faddf8b7f (patch)
treefd6c1bef7939f27d91121a3418bb208f66566b06 /src/plugins
parent019ff9d06b980f16cd2da100b0800985deef12b2 (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.cpp41
-rw-r--r--src/plugins/git/gitclient.h2
-rw-r--r--src/plugins/git/gitplugin.cpp4
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 =