diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index da61f23b1cf6877e5ef373c74ce04019c3f20554..7eabc65001eabd7bbc14c04833904eba3fb975f6 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -783,7 +783,8 @@ bool GitClient::addAndCommit(const QString &repositoryDirectory, const GitSubmitEditorPanelData &data, const QString &messageFile, const QStringList &checkedFiles, - const QStringList &origCommitFiles) + const QStringList &origCommitFiles, + const QStringList &origDeletedFiles) { if (Git::Constants::debug) qDebug() << "GitClient::addAndCommit:" << repositoryDirectory << checkedFiles << origCommitFiles; @@ -795,9 +796,12 @@ bool GitClient::addAndCommit(const QString &repositoryDirectory, if (!synchronousReset(repositoryDirectory, resetFiles.toList())) return false; - // Re-add all to make sure we have the latest changes - if (!synchronousAdd(repositoryDirectory, checkedFiles)) - return false; + // Re-add all to make sure we have the latest changes, but only add those that aren't marked + // for deletion + QStringList addFiles = checkedFiles.toSet().subtract(origDeletedFiles.toSet()).toList(); + if (!addFiles.isEmpty()) + if (!synchronousAdd(repositoryDirectory, addFiles)) + return false; // Do the final commit QStringList args; diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 8807218da30f2154e14e0c6175a4f0f45caa83f1..5ac85f41dc77a759dcd31a2a7a96ecd3085c5a56 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -123,7 +123,8 @@ public: const GitSubmitEditorPanelData &data, const QString &messageFile, const QStringList &checkedFiles, - const QStringList &origCommitFiles); + const QStringList &origCommitFiles, + const QStringList &origDeletedFiles); enum StatusResult { StatusChanged, StatusUnchanged, StatusFailed }; StatusResult gitStatus(const QString &workingDirectory, diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index ac3cfb2d2d8ad91b9923ddfde6b38935ee7e623a..ef327da7c34e9506095b1f3177a30c33b652c0cd 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -614,6 +614,7 @@ void GitPlugin::startCommit() // files to be able to unstage files the user unchecks m_submitRepository = data.panelInfo.repository; m_submitOrigCommitFiles = data.stagedFileNames(); + m_submitOrigDeleteFiles = data.stagedFileNames("deleted"); if (Git::Constants::debug) qDebug() << Q_FUNC_INFO << data << commitTemplate; @@ -709,7 +710,8 @@ bool GitPlugin::editorAboutToClose(Core::IEditor *iEditor) editor->panelData(), m_changeTmpFile->fileName(), fileList, - m_submitOrigCommitFiles); + m_submitOrigCommitFiles, + m_submitOrigDeleteFiles); } if (closeEditor) cleanChangeTmpFile(); diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h index da5af49bb7412ab365cbc7690951b90bd512a76f..a218052c37be8314c7643cf47066c94410dd4a6c 100644 --- a/src/plugins/git/gitplugin.h +++ b/src/plugins/git/gitplugin.h @@ -173,6 +173,7 @@ private: Core::IVersionControl *m_versionControl; QString m_submitRepository; QStringList m_submitOrigCommitFiles; + QStringList m_submitOrigDeleteFiles; QTemporaryFile *m_changeTmpFile; bool m_submitActionTriggered; }; diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp index 4de97513fd37ba7a62a28db7cb782d3be4c97cc5..272222cd4e2ad53c2ac73f58fe21bcd98b8f5424 100644 --- a/src/plugins/git/gitsubmiteditor.cpp +++ b/src/plugins/git/gitsubmiteditor.cpp @@ -63,11 +63,10 @@ GitSubmitEditorWidget *GitSubmitEditor::submitEditorWidget() // Utility to add a list of state/file pairs to the model // setting a file type. -static void addStateFileListToModel(const QList<CommitData::StateFilePair> &l, +static void addStateFileListToModel(const QList<CommitData::StateFilePair> &l, bool checked, FileType ft, VCSBase::SubmitFileModel *model) { - typedef QList<CommitData::StateFilePair>::const_iterator ConstIterator; if (!l.empty()) { const ConstIterator cend = l.constEnd();