summaryrefslogtreecommitdiff
path: root/src/plugins/git
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2012-12-25 18:27:38 +0200
committerOrgad Shaneh <orgad.shaneh@audiocodes.com>2012-12-30 21:47:35 +0100
commitcecfffc7a3b858c75ccd3bb1c7a745ebdec1d509 (patch)
treee338aa86ad0f7a2c161e3631f71cba5e3c56da0d /src/plugins/git
parent6c4c45ba0ee32c359b9012beb223390d80abee71 (diff)
downloadqt-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.cpp3
-rw-r--r--src/plugins/git/gitsubmiteditor.cpp52
-rw-r--r--src/plugins/git/gitsubmiteditor.h4
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