diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2013-09-11 22:20:30 +0300 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2013-09-12 13:02:55 +0200 |
commit | 9df379e0dc72d2abb17040b17a505ece607b589f (patch) | |
tree | 3e8ad9f2b8786c4d65c46ae743bd7d43c5fbc9aa | |
parent | f69b994896304126976848d474bdd6da589dc78d (diff) | |
download | qt-creator-9df379e0dc72d2abb17040b17a505ece607b589f.tar.gz |
Git: Fix crash on diff
Task-number: QTCREATORBUG-10138
Change-Id: I7c7f054e6253c677b52a3ea24d7ace562f1ad4af
Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com>
-rw-r--r-- | src/plugins/git/gitclient.cpp | 40 | ||||
-rw-r--r-- | src/plugins/git/gitclient.h | 3 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseeditor.cpp | 7 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseeditor.h | 5 |
4 files changed, 21 insertions, 34 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 7542354522..aeced497c2 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1013,15 +1013,14 @@ DiffEditor::DiffEditor *GitClient::createDiffEditor(const char *registerDynamicP * (using the file's codec). Makes use of a dynamic property to find an * existing instance and to reuse it (in case, say, 'git diff foo' is * already open). */ -VcsBase::VcsBaseEditorWidget *GitClient::createVcsEditor(const Core::Id &id, - QString title, - // Source file or directory - const QString &source, - CodecType codecType, - // Dynamic property and value to identify that editor - const char *registerDynamicProperty, - const QString &dynamicPropertyValue, - QWidget *configWidget) const +VcsBase::VcsBaseEditorWidget *GitClient::createVcsEditor( + const Core::Id &id, + QString title, + const QString &source, // Source file or directory + CodecType codecType, + const char *registerDynamicProperty, // Dynamic property and value to identify that editor + const QString &dynamicPropertyValue, + VcsBase::VcsBaseEditorParameterWidget *configWidget) const { VcsBase::VcsBaseEditorWidget *rc = 0; QTC_CHECK(!findExistingVCSEditor(registerDynamicProperty, dynamicPropertyValue)); @@ -1219,14 +1218,10 @@ void GitClient::diff(const QString &workingDirectory, } vcsEditor->setDiffBaseDirectory(workingDirectory); - GitFileDiffArgumentsWidget *argWidget = qobject_cast<GitFileDiffArgumentsWidget *>( - vcsEditor->configurationWidget()); - QStringList userDiffArgs = argWidget->arguments(); - QStringList cmdArgs; cmdArgs << QLatin1String("diff") << QLatin1String(noColorOption) - << userDiffArgs; + << vcsEditor->configurationWidget()->arguments(); if (!fileName.isEmpty()) cmdArgs << QLatin1String("--") << fileName; @@ -1287,14 +1282,10 @@ void GitClient::diffBranch(const QString &workingDirectory, } vcsEditor->setDiffBaseDirectory(workingDirectory); - GitBranchDiffArgumentsWidget *argWidget = qobject_cast<GitBranchDiffArgumentsWidget *>( - vcsEditor->configurationWidget()); - QStringList userDiffArgs = argWidget->arguments(); - QStringList cmdArgs; cmdArgs << QLatin1String("diff") << QLatin1String(noColorOption) - << userDiffArgs + << vcsEditor->configurationWidget()->arguments() << branchName; executeGit(workingDirectory, cmdArgs, vcsEditor); @@ -1450,15 +1441,11 @@ void GitClient::show(const QString &source, const QString &id, newEditor = vcsEditor->editor(); } - GitShowArgumentsWidget *argWidget = qobject_cast<GitShowArgumentsWidget *>( - vcsEditor->configurationWidget()); - QStringList userArgs = argWidget->arguments(); - QStringList arguments; arguments << QLatin1String("show") << QLatin1String(noColorOption) << QLatin1String(decorateOption) - << userArgs + << vcsEditor->configurationWidget()->arguments() << id; vcsEditor->setDiffBaseDirectory(workingDirectory); @@ -1520,12 +1507,9 @@ void GitClient::blame(const QString &workingDirectory, argWidget->setEditor(editor); } - GitBlameArgumentsWidget *argWidget = qobject_cast<GitBlameArgumentsWidget *>(editor->configurationWidget()); - QStringList userBlameArgs = argWidget->arguments(); - QStringList arguments(QLatin1String("blame")); arguments << QLatin1String("--root"); - arguments.append(userBlameArgs); + arguments.append(editor->configurationWidget()->arguments()); arguments << QLatin1String("--") << fileName; if (!revision.isEmpty()) arguments << revision; diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index b5ca2b083e..969f7983e5 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -54,6 +54,7 @@ namespace VcsBase { class Command; class SubmitFileModel; class VcsBaseEditorWidget; + class VcsBaseEditorParameterWidget; } namespace Utils { @@ -363,7 +364,7 @@ private: CodecType codecType, const char *registerDynamicProperty, const QString &dynamicPropertyValue, - QWidget *configWidget) const; + VcsBase::VcsBaseEditorParameterWidget *configWidget) const; DiffEditor::DiffEditor *createDiffEditor(const char *registerDynamicProperty, const QString &dynamicPropertyValue, const QString &titlePattern, diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index 62f862e881..5f62830981 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -31,6 +31,7 @@ #include "diffhighlighter.h" #include "baseannotationhighlighter.h" #include "vcsbaseplugin.h" +#include "vcsbaseeditorparameterwidget.h" #include <coreplugin/icore.h> #include <coreplugin/vcsmanager.h> @@ -566,7 +567,7 @@ public: QString m_copyRevisionTextFormat; bool m_fileLogAnnotateEnabled; TextEditor::BaseTextEditor *m_editor; - QWidget *m_configurationWidget; + VcsBaseEditorParameterWidget *m_configurationWidget; bool m_mouseDragging; QList<AbstractTextCursorHandler *> m_textCursorHandlers; @@ -1324,7 +1325,7 @@ QString VcsBaseEditorWidget::getTitleId(const QString &workingDirectory, return rc; } -bool VcsBaseEditorWidget::setConfigurationWidget(QWidget *w) +bool VcsBaseEditorWidget::setConfigurationWidget(VcsBaseEditorParameterWidget *w) { if (!d->m_editor || d->m_configurationWidget) return false; @@ -1335,7 +1336,7 @@ bool VcsBaseEditorWidget::setConfigurationWidget(QWidget *w) return true; } -QWidget *VcsBaseEditorWidget::configurationWidget() const +VcsBaseEditorParameterWidget *VcsBaseEditorWidget::configurationWidget() const { return d->m_configurationWidget; } diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h index b438b93bbe..5bbd78b4d4 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.h +++ b/src/plugins/vcsbase/vcsbaseeditor.h @@ -54,6 +54,7 @@ class VcsBaseEditorWidgetPrivate; class DiffHighlighter; class BaseAnnotationHighlighter; +class VcsBaseEditorParameterWidget; // Documentation inside enum EditorContentType @@ -183,8 +184,8 @@ public: const QStringList &fileNames, const QString &revision = QString()); - bool setConfigurationWidget(QWidget *w); - QWidget *configurationWidget() const; + bool setConfigurationWidget(VcsBaseEditorParameterWidget *w); + VcsBaseEditorParameterWidget *configurationWidget() const; /* Tagging editors: Sometimes, an editor should be re-used, for example, when showing * a diff of the same file with different diff-options. In order to be able to find |