aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/gitplugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/git/gitplugin.cpp')
-rw-r--r--src/plugins/git/gitplugin.cpp90
1 files changed, 53 insertions, 37 deletions
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index dfaeb44f45..aa1d36d13b 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -48,9 +48,7 @@
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/actioncontainer.h>
#include <coreplugin/actionmanager/command.h>
-#include <coreplugin/id.h>
#include <coreplugin/idocument.h>
-#include <coreplugin/infobar.h>
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/locator/commandlocator.h>
@@ -60,12 +58,14 @@
#include <coreplugin/vcsmanager.h>
#include <aggregation/aggregate.h>
+
+#include <texteditor/texteditor.h>
+#include <utils/infobar.h>
#include <utils/parameteraction.h>
#include <utils/pathchooser.h>
#include <utils/qtcassert.h>
#include <utils/stringutils.h>
#include <utils/utilsicons.h>
-#include <texteditor/texteditor.h>
#include <vcsbase/basevcseditorfactory.h>
#include <vcsbase/submitfilemodel.h>
@@ -103,7 +103,7 @@ using namespace std::placeholders;
namespace Git {
namespace Internal {
-using GitClientMemberFunc = void (GitClient::*)(const QString &);
+using GitClientMemberFunc = void (GitClient::*)(const QString &) const;
class GitTopicCache : public Core::IVersionControl::TopicCache
{
@@ -233,7 +233,7 @@ public:
// IVersionControl
QString displayName() const final;
- Core::Id id() const final;
+ Utils::Id id() const final;
bool isVcsFileOrDirectory(const Utils::FilePath &fileName) const final;
@@ -249,7 +249,8 @@ public:
bool vcsMove(const QString &from, const QString &to) final;
bool vcsCreateRepository(const QString &directory) final;
- bool vcsAnnotate(const QString &file, int line) final;
+ void vcsAnnotate(const QString &file, int line) final;
+ void vcsDescribe(const QString &source, const QString &id) final { m_gitClient.show(source, id); };
QString vcsTopic(const QString &directory) final;
Core::ShellCommand *createInitialCheckoutCommand(const QString &url,
@@ -264,11 +265,20 @@ public:
menu->addAction(tr("&Copy \"%1\"").arg(reference),
[reference] { QApplication::clipboard()->setText(reference); });
QAction *action = menu->addAction(tr("&Describe Change %1").arg(reference),
- [=] { describe(workingDirectory, reference); });
+ [=] { vcsDescribe(workingDirectory, reference); });
menu->setDefaultAction(action);
GitClient::addChangeActions(menu, workingDirectory, reference);
}
+ bool handleLink(const QString &workingDirectory, const QString &reference) final
+ {
+ if (reference.contains(".."))
+ GitClient::instance()->log(workingDirectory, {}, false, {reference});
+ else
+ GitClient::instance()->show(workingDirectory, reference);
+ return true;
+ }
+
RepoUrl getRepoUrl(const QString &location) const override;
QStringList additionalToolsPath() const final;
@@ -297,12 +307,13 @@ public:
void resetRepository();
void recoverDeletedFiles();
void startRebase();
- void startChangeRelatedAction(const Core::Id &id);
+ void startChangeRelatedAction(const Utils::Id &id);
void stageFile();
void unstageFile();
void gitkForCurrentFile();
void gitkForCurrentFolder();
void gitGui();
+ void gitBash();
void cleanProject();
void cleanRepository();
void updateSubmodules();
@@ -323,37 +334,37 @@ public:
void updateContinueAndAbortCommands();
void delayedPushToGerrit();
- Core::Command *createCommand(QAction *action, Core::ActionContainer *ac, Core::Id id,
+ Core::Command *createCommand(QAction *action, Core::ActionContainer *ac, Utils::Id id,
const Core::Context &context, bool addToLocator,
const std::function<void()> &callback, const QKeySequence &keys);
Utils::ParameterAction *createParameterAction(Core::ActionContainer *ac,
const QString &defaultText, const QString &parameterText,
- Core::Id id, const Core::Context &context, bool addToLocator,
+ Utils::Id id, const Core::Context &context, bool addToLocator,
const std::function<void()> &callback,
const QKeySequence &keys = QKeySequence());
QAction *createFileAction(Core::ActionContainer *ac,
const QString &defaultText, const QString &parameterText,
- Core::Id id, const Core::Context &context, bool addToLocator,
+ Utils::Id id, const Core::Context &context, bool addToLocator,
const std::function<void()> &callback,
const QKeySequence &keys = QKeySequence());
QAction *createProjectAction(Core::ActionContainer *ac,
const QString &defaultText, const QString &parameterText,
- Core::Id id, const Core::Context &context, bool addToLocator,
+ Utils::Id id, const Core::Context &context, bool addToLocator,
void (GitPluginPrivate::*func)(),
const QKeySequence &keys = QKeySequence());
- QAction *createRepositoryAction(Core::ActionContainer *ac, const QString &text, Core::Id id,
+ QAction *createRepositoryAction(Core::ActionContainer *ac, const QString &text, Utils::Id id,
const Core::Context &context, bool addToLocator,
const std::function<void()> &callback,
const QKeySequence &keys = QKeySequence());
- QAction *createRepositoryAction(Core::ActionContainer *ac, const QString &text, Core::Id id,
+ QAction *createRepositoryAction(Core::ActionContainer *ac, const QString &text, Utils::Id id,
const Core::Context &context, bool addToLocator,
GitClientMemberFunc, const QKeySequence &keys = QKeySequence());
- QAction *createChangeRelatedRepositoryAction(const QString &text, Core::Id id,
+ QAction *createChangeRelatedRepositoryAction(const QString &text, Utils::Id id,
const Core::Context &context);
void updateRepositoryBrowserAction();
@@ -365,7 +376,6 @@ public:
void onApplySettings();;
- void describe(const QString &source, const QString &id) { m_gitClient.show(source, id); };
Core::CommandLocator *m_commandLocator = nullptr;
@@ -406,37 +416,37 @@ public:
VcsEditorFactory svnLogEditorFactory {
&svnLogEditorParameters,
[] { return new GitEditorWidget; },
- std::bind(&GitPluginPrivate::describe, this, _1, _2)
+ std::bind(&GitPluginPrivate::vcsDescribe, this, _1, _2)
};
VcsEditorFactory logEditorFactory {
&logEditorParameters,
[] { return new GitLogEditorWidgetT<GitEditorWidget>; },
- std::bind(&GitPluginPrivate::describe, this, _1, _2)
+ std::bind(&GitPluginPrivate::vcsDescribe, this, _1, _2)
};
VcsEditorFactory reflogEditorFactory {
&reflogEditorParameters,
[] { return new GitLogEditorWidgetT<GitReflogEditorWidget>; },
- std::bind(&GitPluginPrivate::describe, this, _1, _2)
+ std::bind(&GitPluginPrivate::vcsDescribe, this, _1, _2)
};
VcsEditorFactory blameEditorFactory {
&blameEditorParameters,
[] { return new GitEditorWidget; },
- std::bind(&GitPluginPrivate::describe, this, _1, _2)
+ std::bind(&GitPluginPrivate::vcsDescribe, this, _1, _2)
};
VcsEditorFactory commitTextEditorFactory {
&commitTextEditorParameters,
[] { return new GitEditorWidget; },
- std::bind(&GitPluginPrivate::describe, this, _1, _2)
+ std::bind(&GitPluginPrivate::vcsDescribe, this, _1, _2)
};
VcsEditorFactory rebaseEditorFactory {
&rebaseEditorParameters,
[] { return new GitEditorWidget; },
- std::bind(&GitPluginPrivate::describe, this, _1, _2)
+ std::bind(&GitPluginPrivate::vcsDescribe, this, _1, _2)
};
VcsSubmitEditorFactory submitEditorFactory {
@@ -962,6 +972,14 @@ GitPluginPrivate::GitPluginPrivate()
= createRepositoryAction(gitToolsMenu, tr("Merge Tool"), "Git.MergeTool",
context, true, std::bind(&GitPluginPrivate::startMergeTool, this));
+ // --------------
+ if (Utils::HostOsInfo::isWindowsHost()) {
+ gitToolsMenu->addSeparator(context);
+
+ createRepositoryAction(gitToolsMenu, tr("Git Bash"), "Git.GitBash",
+ context, true, std::bind(&GitPluginPrivate::gitBash, this));
+ }
+
/* \"Git Tools" menu */
// --------------
@@ -991,16 +1009,6 @@ GitPluginPrivate::GitPluginPrivate()
m_gerritPlugin->updateActions(currentState());
m_gerritPlugin->addToLocator(m_commandLocator);
- connect(VcsOutputWindow::instance(), &VcsOutputWindow::referenceClicked,
- this, [this](const QString &name) {
- const VcsBasePluginState state = currentState();
- QTC_ASSERT(state.hasTopLevel(), return);
- if (name.contains(".."))
- m_gitClient.log(state.topLevel(), {}, false, {name});
- else
- m_gitClient.show(state.topLevel(), name);
- });
-
}
void GitPluginPrivate::diffCurrentFile()
@@ -1201,7 +1209,9 @@ void GitPluginPrivate::startChangeRelatedAction(const Id &id)
if (dialog.command() == Show) {
m_gitClient.show(workingDirectory, change);
return;
- } else if (dialog.command() == Archive) {
+ }
+
+ if (dialog.command() == Archive) {
m_gitClient.archive(workingDirectory, change);
return;
}
@@ -1282,6 +1292,13 @@ void GitPluginPrivate::gitGui()
m_gitClient.launchGitGui(state.topLevel());
}
+void GitPluginPrivate::gitBash()
+{
+ const VcsBasePluginState state = currentState();
+ QTC_ASSERT(state.hasTopLevel(), return);
+ m_gitClient.launchGitBash(state.topLevel());
+}
+
void GitPluginPrivate::startCommit(CommitType commitType)
{
if (!promptBeforeCommit())
@@ -1794,9 +1811,9 @@ QString GitPluginPrivate::displayName() const
return QLatin1String("Git");
}
-Core::Id GitPluginPrivate::id() const
+Utils::Id GitPluginPrivate::id() const
{
- return Core::Id(VcsBase::Constants::VCS_ID_GIT);
+ return Utils::Id(VcsBase::Constants::VCS_ID_GIT);
}
bool GitPluginPrivate::isVcsFileOrDirectory(const Utils::FilePath &fileName) const
@@ -1919,11 +1936,10 @@ QStringList GitPluginPrivate::unmanagedFiles(const QString &workingDir,
return m_gitClient.unmanagedFiles(workingDir, filePaths);
}
-bool GitPluginPrivate::vcsAnnotate(const QString &file, int line)
+void GitPluginPrivate::vcsAnnotate(const QString &file, int line)
{
const QFileInfo fi(file);
m_gitClient.annotate(fi.absolutePath(), fi.fileName(), QString(), line);
- return true;
}
void GitPlugin::emitFilesChanged(const QStringList &l)