diff --git a/git/fileviewgitplugin.h b/git/fileviewgitplugin.h
--- a/git/fileviewgitplugin.h
+++ b/git/fileviewgitplugin.h
@@ -58,6 +58,7 @@
void pull();
void log();
void showDiff(const QUrl &link);
+ void merge();
void slotOperationCompleted(int exitCode, QProcess::ExitStatus exitStatus);
void slotOperationError();
@@ -115,6 +116,7 @@
QAction* m_pushAction;
QAction* m_pullAction;
QAction* m_logAction;
+ QAction* m_mergeAction;
QString m_currentDir;
QProcess m_process;
diff --git a/git/fileviewgitplugin.cpp b/git/fileviewgitplugin.cpp
--- a/git/fileviewgitplugin.cpp
+++ b/git/fileviewgitplugin.cpp
@@ -106,6 +106,10 @@
m_pullAction->setText(xi18nd("@action:inmenu", "Git Pull..."));
connect(m_pullAction, SIGNAL(triggered()),
this, SLOT(pull()));
+ m_mergeAction = new QAction(this);
+ m_mergeAction->setIcon(QIcon::fromTheme("merge"));
+ m_mergeAction->setText(xi18nd("@action:inmenu", "Git Merge..."));
+ connect(m_mergeAction, &QAction::triggered, this, &FileViewGitPlugin::merge);
m_logAction = new QAction(this);
m_logAction->setText(xi18nd("@action:inmenu", "Git Log..."));
@@ -345,6 +349,7 @@
bool canCommit = false;
bool showChanges = false;
+ bool shouldMerge = false;
QHash::const_iterator it = m_versionInfoHash.constBegin();
while (it != m_versionInfoHash.constEnd()) {
const ItemVersion state = it.value();
@@ -357,6 +362,7 @@
if (state == ConflictingVersion) {
canCommit = false;
showChanges = true;
+ shouldMerge = true;
break;
}
++it;
@@ -368,8 +374,13 @@
m_showLocalChangesAction->setEnabled(!m_pendingOperation && showChanges);
actions.append(m_showLocalChangesAction);
- m_commitAction->setEnabled(!m_pendingOperation && canCommit);
- actions.append(m_commitAction);
+ if (!shouldMerge) {
+ m_commitAction->setEnabled(!m_pendingOperation && canCommit);
+ actions.append(m_commitAction);
+ } else {
+ m_mergeAction->setEnabled(!m_pendingOperation);
+ actions.append(m_mergeAction);
+ }
m_tagAction->setEnabled(!m_pendingOperation);
actions.append(m_tagAction);
@@ -484,6 +495,13 @@
view->show();
}
+void FileViewGitPlugin::merge()
+{
+ Q_ASSERT(!m_contextDir.isEmpty());
+
+ KRun::runCommand(QStringLiteral("git mergetool"), nullptr, m_contextDir);
+}
+
void FileViewGitPlugin::checkout()
{
CheckoutDialog dialog;