From 7bfaf7a946b9e1e512463c3a93c65bb396e40c2c Mon Sep 17 00:00:00 2001 From: Orgad Shaneh <orgad.shaneh@audiocodes.com> Date: Wed, 22 May 2013 21:31:46 +0300 Subject: [PATCH] Git: Provide a commit editor for files opened externally Change-Id: I52fccf36cca032dda36102d4be2654eb7461de64 Reviewed-by: Eike Ziller <eike.ziller@digia.com> Reviewed-by: Tobias Hunger <tobias.hunger@digia.com> --- src/plugins/git/Git.mimetypes.xml | 9 +++++++++ src/plugins/git/git.pro | 2 ++ src/plugins/git/git.qbs | 1 + src/plugins/git/git.qrc | 1 + src/plugins/git/gitconstants.h | 4 ++++ src/plugins/git/giteditor.cpp | 10 ++++++++++ src/plugins/git/giteditor.h | 1 + src/plugins/git/gitplugin.cpp | 13 +++++++++++-- src/plugins/vcsbase/vcsbaseeditor.h | 2 +- 9 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 src/plugins/git/Git.mimetypes.xml diff --git a/src/plugins/git/Git.mimetypes.xml b/src/plugins/git/Git.mimetypes.xml new file mode 100644 index 00000000000..c40c30181a9 --- /dev/null +++ b/src/plugins/git/Git.mimetypes.xml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'> + <mime-type type="text/vnd.qtcreator.git.commit"> + <sub-class-of type="text/plain"/> + <comment>Git Commit File</comment> + <glob pattern="COMMIT_MSG"/> + <glob pattern="COMMIT_EDITMSG"/> + </mime-type> +</mime-info> diff --git a/src/plugins/git/git.pro b/src/plugins/git/git.pro index 06634276437..0366c953e11 100644 --- a/src/plugins/git/git.pro +++ b/src/plugins/git/git.pro @@ -62,4 +62,6 @@ include(gitorious/gitorious.pri) RESOURCES += \ git.qrc +OTHER_FILES += Git.mimetypes.xml + include(gerrit/gerrit.pri) diff --git a/src/plugins/git/git.qbs b/src/plugins/git/git.qbs index 80acf97b6ed..2f8110f8f28 100644 --- a/src/plugins/git/git.qbs +++ b/src/plugins/git/git.qbs @@ -14,6 +14,7 @@ QtcPlugin { Depends { name: "Locator" } files: [ + "Git.mimetypes.xml", "annotationhighlighter.cpp", "annotationhighlighter.h", "branchadddialog.cpp", diff --git a/src/plugins/git/git.qrc b/src/plugins/git/git.qrc index ae2b2b64707..3371b45cd8f 100644 --- a/src/plugins/git/git.qrc +++ b/src/plugins/git/git.qrc @@ -2,5 +2,6 @@ <qresource prefix="/git"> <file>images/git.png</file> <file>images/gitorious.png</file> + <file>Git.mimetypes.xml</file> </qresource> </RCC> diff --git a/src/plugins/git/gitconstants.h b/src/plugins/git/gitconstants.h index 872bf3022ce..35cf9619562 100644 --- a/src/plugins/git/gitconstants.h +++ b/src/plugins/git/gitconstants.h @@ -47,6 +47,9 @@ const char C_GIT_BLAME_EDITOR[] = "Git Annotation Editor"; const char GIT_DIFF_EDITOR_ID[] = "Git Diff Editor"; const char GIT_DIFF_EDITOR_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("VCS", "Git Diff Editor"); const char C_GIT_DIFF_EDITOR[] = "Git Diff Editor"; +const char GIT_COMMIT_TEXT_EDITOR_ID[] = "Git Commit Editor"; +const char GIT_COMMIT_TEXT_EDITOR_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("VCS", "Git Commit Editor"); +const char C_GIT_COMMIT_TEXT_EDITOR[] = "Git Commit Editor"; const char C_GITSUBMITEDITOR[] = "Git Submit Editor"; const char GITSUBMITEDITOR_ID[] = "Git Submit Editor"; @@ -54,6 +57,7 @@ const char GITSUBMITEDITOR_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("VCS", "Git Submit const char SUBMIT_CURRENT[] = "Git.SubmitCurrentLog"; const char DIFF_SELECTED[] = "Git.DiffSelectedFilesInLog"; const char SUBMIT_MIMETYPE[] = "text/vnd.qtcreator.git.submit"; +const char C_GITEDITORID[] = "Git Editor"; } // namespace Constants } // namespace Git diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp index fb6bea95f9a..2c6062799bf 100644 --- a/src/plugins/git/giteditor.cpp +++ b/src/plugins/git/giteditor.cpp @@ -33,9 +33,12 @@ #include "gitplugin.h" #include "gitclient.h" #include "gitsettings.h" +#include "gitsubmiteditorwidget.h" +#include "gitconstants.h" #include <utils/qtcassert.h> #include <vcsbase/vcsbaseoutputwindow.h> +#include <texteditor/basetextdocument.h> #include <QDebug> #include <QFileInfo> #include <QRegExp> @@ -225,6 +228,13 @@ void GitEditor::revertChange() GitPlugin::instance()->gitClient()->synchronousRevert(workingDirectory, m_currentChange); } +void GitEditor::init() +{ + VcsBase::VcsBaseEditorWidget::init(); + if (editor()->id() == Git::Constants::GIT_COMMIT_TEXT_EDITOR_ID) + new GitSubmitHighlighter(baseTextDocument().data()); +} + QString GitEditor::decorateVersion(const QString &revision) const { const QFileInfo fi(source()); diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h index 6af13790506..5010fd81937 100644 --- a/src/plugins/git/giteditor.h +++ b/src/plugins/git/giteditor.h @@ -59,6 +59,7 @@ private slots: void revertChange(); private: + void init(); QSet<QString> annotationChanges() const; QString changeUnderCursor(const QTextCursor &) const; VcsBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes, const QColor &bg) const; diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 610a060a7b5..ea8ca19f4cb 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -58,6 +58,7 @@ #include <coreplugin/infobar.h> #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/ieditor.h> +#include <coreplugin/mimedatabase.h> #include <utils/qtcassert.h> #include <utils/parameteraction.h> @@ -81,6 +82,7 @@ #include <QScopedPointer> static const unsigned minimumRequiredVersion = 0x010702; +static const char RC_GIT_MIME_XML[] = ":/git/Git.mimetypes.xml"; static const VcsBase::VcsBaseEditorParameters editorParameters[] = { { @@ -103,7 +105,12 @@ static const VcsBase::VcsBaseEditorParameters editorParameters[] = { Git::Constants::GIT_DIFF_EDITOR_ID, Git::Constants::GIT_DIFF_EDITOR_DISPLAY_NAME, Git::Constants::C_GIT_DIFF_EDITOR, - "text/x-patch"} + "text/x-patch"}, +{ VcsBase::DiffOutput, + Git::Constants::GIT_COMMIT_TEXT_EDITOR_ID, + Git::Constants::GIT_COMMIT_TEXT_EDITOR_DISPLAY_NAME, + Git::Constants::C_GIT_COMMIT_TEXT_EDITOR, + "text/vnd.qtcreator.git.commit"}, }; // Utility to find a parameter set by type @@ -263,7 +270,6 @@ ActionCommandPair bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) { Q_UNUSED(arguments) - Q_UNUSED(errorMessage) m_settings.readSettings(Core::ICore::settings()); @@ -656,6 +662,9 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) command = Core::ActionManager::registerAction(m_redoAction, Core::Constants::REDO, submitContext); + if (!Core::ICore::mimeDatabase()->addMimeTypes(QLatin1String(RC_GIT_MIME_XML), errorMessage)) + return false; + /* "Gerrit" */ m_gerritPlugin = new Gerrit::Internal::GerritPlugin(this); const bool ok = m_gerritPlugin->initialize(remoteRepositoryMenu); diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h index 5228d16846c..955c194d901 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.h +++ b/src/plugins/vcsbase/vcsbaseeditor.h @@ -105,7 +105,7 @@ protected: void setLogEntryPattern(const QRegExp &pattern); public: - void init(); + virtual void init(); ~VcsBaseEditorWidget(); -- GitLab