From 4d1bbebf2ad06ba1e3aaf5171addad08be21a6f5 Mon Sep 17 00:00:00 2001 From: Francois Ferrand <thetypz@gmail.com> Date: Mon, 3 Oct 2011 14:17:03 +0200 Subject: [PATCH] Git: Add customizable repository browser command. Change-Id: Iac297e3665b18d97ca80097c4dd33dd70e64b9a1 Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com> --- src/plugins/git/gitclient.cpp | 7 ++++++ src/plugins/git/gitclient.h | 2 ++ src/plugins/git/gitplugin.cpp | 14 ++++++++++++ src/plugins/git/gitplugin.h | 2 ++ src/plugins/git/gitsettings.cpp | 2 ++ src/plugins/git/gitsettings.h | 1 + src/plugins/git/settingspage.cpp | 7 ++++++ src/plugins/git/settingspage.ui | 38 ++++++++++++++++++++++++++++++++ 8 files changed, 73 insertions(+) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 696560a7839..944679aa8ec 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1605,6 +1605,13 @@ void GitClient::launchGitK(const QString &workingDirectory) tryLauchingGitK(env, workingDirectory, foundBinDir.path() + QLatin1String("/bin"), false); } +void GitClient::launchRepositoryBrowser(const QString &workingDirectory) +{ + const QString repBrowserBinary = settings()->stringValue(GitSettings::repositoryBrowserCmd); + if (!repBrowserBinary.isEmpty()) + QProcess::startDetached(repBrowserBinary, QStringList(workingDirectory), workingDirectory); +} + bool GitClient::tryLauchingGitK(const QProcessEnvironment &env, const QString &workingDirectory, const QString &gitBinDirectory, diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 00bad95e531..434a860e091 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -215,6 +215,8 @@ public: QString *errorMessage = 0, bool *onBranch = 0); void launchGitK(const QString &workingDirectory); + void launchRepositoryBrowser(const QString &workingDirectory); + QStringList synchronousRepositoryBranches(const QString &repositoryURL); GitSettings *settings() const; diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index b845f4db344..3eec1999d89 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -430,6 +430,11 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) tr("Launch gitk"), Core::Id("Git.LaunchGitK"), globalcontext, true, &GitClient::launchGitK); + m_repositoryBrowserAction + = createRepositoryAction(actionManager, gitContainer, + tr("Launch repository browser"), Core::Id("Git.LaunchRepositoryBrowser"), + globalcontext, true, &GitClient::launchRepositoryBrowser).first; + createRepositoryAction(actionManager, gitContainer, tr("Branches..."), Core::Id("Git.BranchList"), globalcontext, true, SLOT(branchList())); @@ -1031,11 +1036,19 @@ void GitPlugin::updateActions(VcsBase::VcsBasePlugin::ActionState as) foreach (QAction *repositoryAction, m_repositoryActions) repositoryAction->setEnabled(repositoryEnabled); + updateRepositoryBrowserAction(); // Prompts for repo. m_showAction->setEnabled(true); } +void GitPlugin::updateRepositoryBrowserAction() +{ + const bool repositoryEnabled = currentState().hasTopLevel(); + const bool hasRepositoryBrowserCmd = !settings().stringValue(GitSettings::repositoryBrowserCmd).isEmpty(); + m_repositoryBrowserAction->setEnabled(repositoryEnabled && hasRepositoryBrowserCmd); +} + void GitPlugin::showCommit() { const VcsBase::VcsBasePluginState state = currentState(); @@ -1070,6 +1083,7 @@ void GitPlugin::setSettings(const GitSettings &s) m_settings = s; m_gitClient->saveSettings(); static_cast<GitVersionControl *>(versionControl())->emitConfigurationChanged(); + updateRepositoryBrowserAction(); } GitClient *GitPlugin::gitClient() const diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h index 75bab4fc58d..9ad5f2c344a 100644 --- a/src/plugins/git/gitplugin.h +++ b/src/plugins/git/gitplugin.h @@ -175,6 +175,7 @@ private: const Core::Context &context, bool addToLocator, GitClientMemberFunc); + void updateRepositoryBrowserAction(); bool isCommitEditorOpen() const; Core::IEditor *openSubmitEditor(const QString &fileName, const CommitData &cd, bool amend); void cleanCommitMessageFile(); @@ -193,6 +194,7 @@ private: QAction *m_undoAction; QAction *m_redoAction; QAction *m_menuAction; + QAction *m_repositoryBrowserAction; QVector<Utils::ParameterAction *> m_fileActions; QVector<Utils::ParameterAction *> m_projectActions; diff --git a/src/plugins/git/gitsettings.cpp b/src/plugins/git/gitsettings.cpp index 177d79a270f..095922306c1 100644 --- a/src/plugins/git/gitsettings.cpp +++ b/src/plugins/git/gitsettings.cpp @@ -49,6 +49,7 @@ const QLatin1String GitSettings::winSetHomeEnvironmentKey("WinSetHomeEnvironment const QLatin1String GitSettings::showPrettyFormatKey("DiffPrettyFormat"); const QLatin1String GitSettings::gitkOptionsKey("GitKOptions"); const QLatin1String GitSettings::logDiffKey("LogDiff"); +const QLatin1String GitSettings::repositoryBrowserCmd("RepositoryBrowserCmd"); GitSettings::GitSettings() { @@ -70,6 +71,7 @@ GitSettings::GitSettings() declareKey(gitkOptionsKey, QString()); declareKey(showPrettyFormatKey, 2); declareKey(logDiffKey, false); + declareKey(repositoryBrowserCmd, QString()); } QString GitSettings::gitBinaryPath(bool *ok, QString *errorMessage) const diff --git a/src/plugins/git/gitsettings.h b/src/plugins/git/gitsettings.h index e381dd014a7..a6929bd5fd1 100644 --- a/src/plugins/git/gitsettings.h +++ b/src/plugins/git/gitsettings.h @@ -56,6 +56,7 @@ public: static const QLatin1String showPrettyFormatKey; static const QLatin1String gitkOptionsKey; static const QLatin1String logDiffKey; + static const QLatin1String repositoryBrowserCmd; QString gitBinaryPath(bool *ok = 0, QString *errorMessage = 0) const; diff --git a/src/plugins/git/settingspage.cpp b/src/plugins/git/settingspage.cpp index bcb3ecedd37..5c023a33584 100644 --- a/src/plugins/git/settingspage.cpp +++ b/src/plugins/git/settingspage.cpp @@ -36,6 +36,7 @@ #include "gitclient.h" #include <vcsbase/vcsbaseconstants.h> +#include <utils/pathchooser.h> #include <QCoreApplication> #include <QDir> @@ -65,6 +66,8 @@ SettingsPageWidget::SettingsPageWidget(QWidget *parent) : #else m_ui.winHomeCheckBox->setVisible(false); #endif + m_ui.repBrowserCommandPathChooser->setExpectedKind(Utils::PathChooser::ExistingCommand); + m_ui.repBrowserCommandPathChooser->setPromptDialogTitle(tr("Git Repository Browser Command")); } GitSettings SettingsPageWidget::settings() const @@ -77,6 +80,7 @@ GitSettings SettingsPageWidget::settings() const rc.setValue(GitSettings::promptOnSubmitKey, m_ui.promptToSubmitCheckBox->isChecked()); rc.setValue(GitSettings::winSetHomeEnvironmentKey, m_ui.winHomeCheckBox->isChecked()); rc.setValue(GitSettings::gitkOptionsKey, m_ui.gitkOptionsLineEdit->text().trimmed()); + rc.setValue(GitSettings::repositoryBrowserCmd, m_ui.repBrowserCommandPathChooser->path().trimmed()); return rc; } @@ -89,6 +93,7 @@ void SettingsPageWidget::setSettings(const GitSettings &s) m_ui.promptToSubmitCheckBox->setChecked(s.boolValue(GitSettings::promptOnSubmitKey)); m_ui.winHomeCheckBox->setChecked(s.boolValue(GitSettings::winSetHomeEnvironmentKey)); m_ui.gitkOptionsLineEdit->setText(s.stringValue(GitSettings::gitkOptionsKey)); + m_ui.repBrowserCommandPathChooser->setPath(s.stringValue(GitSettings::repositoryBrowserCmd)); } QString SettingsPageWidget::searchKeywords() const @@ -105,6 +110,8 @@ QString SettingsPageWidget::searchKeywords() const << sep << m_ui.promptToSubmitCheckBox->text() << sep << m_ui.gitkGroupBox->title() << sep << m_ui.gitkOptionsLabel->text() + << sep << m_ui.repBrowserGroupBox->title() + << sep << m_ui.repBrowserCommandLabel->text() ; rc.remove(QLatin1Char('&')); return rc; diff --git a/src/plugins/git/settingspage.ui b/src/plugins/git/settingspage.ui index 2453404c749..b12fbe028d3 100644 --- a/src/plugins/git/settingspage.ui +++ b/src/plugins/git/settingspage.ui @@ -152,6 +152,32 @@ </layout> </widget> </item> + <item> + <widget class="QGroupBox" name="repBrowserGroupBox"> + <property name="title"> + <string>Repository browser</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QLabel" name="repBrowserCommandLabel"> + <property name="text"> + <string>Command:</string> + </property> + </widget> + </item> + <item> + <widget class="Utils::PathChooser" name="repBrowserCommandPathChooser" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </widget> + </item> <item> <spacer name="verticalSpacer"> <property name="orientation"> @@ -167,6 +193,18 @@ </item> </layout> </widget> + <customwidgets> + <customwidget> + <class>Utils::PathChooser</class> + <extends>QWidget</extends> + <header location="global">utils/pathchooser.h</header> + <container>1</container> + <slots> + <signal>editingFinished()</signal> + <signal>browsingFinished()</signal> + </slots> + </customwidget> + </customwidgets> <tabstops> <tabstop>pathLineEdit</tabstop> </tabstops> -- GitLab