diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2012-12-25 18:27:38 +0200 |
---|---|---|
committer | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2012-12-30 21:47:35 +0100 |
commit | cecfffc7a3b858c75ccd3bb1c7a745ebdec1d509 (patch) | |
tree | e338aa86ad0f7a2c161e3631f71cba5e3c56da0d /src/plugins/git | |
parent | 6c4c45ba0ee32c359b9012beb223390d80abee71 (diff) | |
download | qt-creator-cecfffc7a3b858c75ccd3bb1c7a745ebdec1d509.tar.gz |
VCS: Refresh submit editor status when it might change
Including Git implementation
Task-number: QTCREATORBUG-5644
Change-Id: Ic5dede99d93b84e5d271292b4694216f51e66882
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Diffstat (limited to 'src/plugins/git')
-rw-r--r-- | src/plugins/git/gitplugin.cpp | 3 | ||||
-rw-r--r-- | src/plugins/git/gitsubmiteditor.cpp | 52 | ||||
-rw-r--r-- | src/plugins/git/gitsubmiteditor.h | 4 |
3 files changed, 54 insertions, 5 deletions
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index b82818a163..850553992c 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -808,8 +808,7 @@ Core::IEditor *GitPlugin::openSubmitEditor(const QString &fileName, const Commit submitEditor->setCheckScriptWorkingDirectory(m_submitRepository); const QString title = amend ? tr("Amend %1").arg(cd.amendSHA1) : tr("Git Commit"); submitEditor->setDisplayName(title); - if (amend) // Allow for just correcting the message - submitEditor->setEmptyFileListEnabled(true); + submitEditor->setAmend(amend); connect(submitEditor, SIGNAL(diff(QStringList,QStringList)), this, SLOT(submitEditorDiff(QStringList,QStringList))); connect(submitEditor, SIGNAL(merge(QStringList)), this, SLOT(submitEditorMerge(QStringList))); return editor; diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp index 2bb63d50e7..606ca9fb05 100644 --- a/src/plugins/git/gitsubmiteditor.cpp +++ b/src/plugins/git/gitsubmiteditor.cpp @@ -27,13 +27,16 @@ ** ****************************************************************************/ +#include "commitdata.h" +#include "gitclient.h" +#include "gitconstants.h" +#include "gitplugin.h" #include "gitsubmiteditor.h" #include "gitsubmiteditorwidget.h" -#include "gitconstants.h" -#include "commitdata.h" #include <utils/qtcassert.h> #include <vcsbase/submitfilemodel.h> +#include <vcsbase/vcsbaseoutputwindow.h> #include <QDebug> #include <QStringList> @@ -49,7 +52,8 @@ namespace Internal { GitSubmitEditor::GitSubmitEditor(const VcsBase::VcsBaseSubmitEditorParameters *parameters, QWidget *parent) : VcsBaseSubmitEditor(parameters, new GitSubmitEditorWidget(parent)), - m_model(0) + m_model(0), + m_amend(false) { connect(this, SIGNAL(diffSelectedFiles(QStringList)), this, SLOT(slotDiffSelected(QStringList))); } @@ -59,6 +63,25 @@ GitSubmitEditorWidget *GitSubmitEditor::submitEditorWidget() return static_cast<GitSubmitEditorWidget *>(widget()); } +static void mergeFileModels(VcsBase::SubmitFileModel *model, const VcsBase::SubmitFileModel *source) +{ + int j = 0; + for (int i = 0; i < model->rowCount() && j < source->rowCount(); ++i) { + CommitData::StateFilePair stateFile( + static_cast<FileStates>(model->extraData(i).toInt()), model->file(i)); + for (; j < source->rowCount(); ++j) { + CommitData::StateFilePair sourceStateFile( + static_cast<FileStates>(source->extraData(j).toInt()), source->file(j)); + if (stateFile == sourceStateFile) { + model->setChecked(i, source->checked(j)); + break; + } else if (stateFile < sourceStateFile) { + break; + } + } + } +} + void GitSubmitEditor::setCommitData(const CommitData &d) { GitSubmitEditorWidget *w = submitEditorWidget(); @@ -67,7 +90,9 @@ void GitSubmitEditor::setCommitData(const CommitData &d) w->setHasUnmerged(false); m_commitEncoding = d.commitEncoding; + m_workingDirectory = d.panelInfo.repository; + VcsBase::SubmitFileModel *oldModel = m_model; m_model = new VcsBase::SubmitFileModel(this); if (!d.files.isEmpty()) { for (QList<CommitData::StateFilePair>::const_iterator it = d.files.constBegin(); @@ -87,9 +112,19 @@ void GitSubmitEditor::setCommitData(const CommitData &d) QVariant(static_cast<int>(state))); } } + if (oldModel) { + mergeFileModels(m_model, oldModel); + delete oldModel; + } setFileModel(m_model, d.panelInfo.repository); } +void GitSubmitEditor::setAmend(bool amend) +{ + m_amend = amend; + setEmptyFileListEnabled(amend); // Allow for just correcting the message +} + void GitSubmitEditor::slotDiffSelected(const QStringList &files) { // Sort it apart into unmerged/staged/unstaged files @@ -116,6 +151,17 @@ void GitSubmitEditor::slotDiffSelected(const QStringList &files) emit merge(unmergedFiles); } +void GitSubmitEditor::updateFileModel() +{ + GitClient *client = GitPlugin::instance()->gitClient(); + QString errorMessage, commitTemplate; + CommitData data; + if (client->getCommitData(m_workingDirectory, m_amend, &commitTemplate, &data, &errorMessage)) + setCommitData(data); + else + VcsBase::VcsBaseOutputWindow::instance()->append(errorMessage); +} + GitSubmitEditorPanelData GitSubmitEditor::panelData() const { return const_cast<GitSubmitEditor*>(this)->submitEditorWidget()->panelData(); diff --git a/src/plugins/git/gitsubmiteditor.h b/src/plugins/git/gitsubmiteditor.h index 2cacaecc2e..79c4347328 100644 --- a/src/plugins/git/gitsubmiteditor.h +++ b/src/plugins/git/gitsubmiteditor.h @@ -52,6 +52,7 @@ public: explicit GitSubmitEditor(const VcsBase::VcsBaseSubmitEditorParameters *parameters, QWidget *parent); void setCommitData(const CommitData &); + void setAmend(bool amend); GitSubmitEditorPanelData panelData() const; signals: @@ -60,6 +61,7 @@ signals: protected: QByteArray fileContents() const; + void updateFileModel(); private slots: void slotDiffSelected(const QStringList &); @@ -69,6 +71,8 @@ private: VcsBase::SubmitFileModel *m_model; QString m_commitEncoding; + bool m_amend; + QString m_workingDirectory; }; } // namespace Internal |