Git: Pass rows instead of files for diffSelectedFiles

Useful when the same file can appear more than once
(e.g. staged + modified)

Task-number: QTCREATORBUG-5347
Change-Id: I3ce716c22840c149490e00e6948612607ae57159
Reviewed-by: Petar Perisin <petar.perisin@gmail.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Orgad Shaneh
2013-01-11 10:45:00 +02:00
committed by Tobias Hunger
parent 39e9c5ef20
commit 76f6729892
13 changed files with 52 additions and 47 deletions

View File

@@ -175,7 +175,8 @@ static const VcsBase::VcsBaseSubmitEditorParameters submitParameters = {
Git::Constants::SUBMIT_MIMETYPE,
Git::Constants::GITSUBMITEDITOR_ID,
Git::Constants::GITSUBMITEDITOR_DISPLAY_NAME,
Git::Constants::C_GITSUBMITEDITOR
Git::Constants::C_GITSUBMITEDITOR,
VcsBase::VcsBaseSubmitEditorParameters::DiffRows
};
// Create a parameter action

View File

@@ -85,7 +85,7 @@ GitSubmitEditor::GitSubmitEditor(const VcsBase::VcsBaseSubmitEditorParameters *p
m_model(0),
m_amend(false)
{
connect(this, SIGNAL(diffSelectedFiles(QStringList)), this, SLOT(slotDiffSelected(QStringList)));
connect(this, SIGNAL(diffSelectedFiles(QList<int>)), this, SLOT(slotDiffSelected(QList<int>)));
}
GitSubmitEditorWidget *GitSubmitEditor::submitEditorWidget()
@@ -131,24 +131,21 @@ void GitSubmitEditor::setAmend(bool amend)
setEmptyFileListEnabled(amend); // Allow for just correcting the message
}
void GitSubmitEditor::slotDiffSelected(const QStringList &files)
void GitSubmitEditor::slotDiffSelected(const QList<int> &rows)
{
// Sort it apart into unmerged/staged/unstaged files
QStringList unmergedFiles;
QStringList unstagedFiles;
QStringList stagedFiles;
const int rowCount = m_model->rowCount();
for (int r = 0; r < rowCount; r++) {
const QString fileName = m_model->file(r);
if (files.contains(fileName)) {
const FileStates state = static_cast<FileStates>(m_model->extraData(r).toInt());
if (state & UnmergedFile)
unmergedFiles.push_back(fileName);
else if (state & StagedFile)
stagedFiles.push_back(fileName);
else if (state != UntrackedFile)
unstagedFiles.push_back(fileName);
}
foreach (int row, rows) {
const QString fileName = m_model->file(row);
const FileStates state = static_cast<FileStates>(m_model->extraData(row).toInt());
if (state & UnmergedFile)
unmergedFiles.push_back(fileName);
else if (state & StagedFile)
stagedFiles.push_back(fileName);
else if (state != UntrackedFile)
unstagedFiles.push_back(fileName);
}
if (!unstagedFiles.empty() || !stagedFiles.empty())
emit diff(unstagedFiles, stagedFiles);

View File

@@ -64,7 +64,7 @@ protected:
void updateFileModel();
private slots:
void slotDiffSelected(const QStringList &);
void slotDiffSelected(const QList<int> &rows);
private:
inline GitSubmitEditorWidget *submitEditorWidget();