From 690a545f8e6b7dfe61619bd9174c74b2dff8d80f Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Tue, 10 Mar 2015 12:03:03 +0200 Subject: [PATCH] Git: Enable different reset types for commits in git editors Change-Id: I0eafbd3db04a7da4ea85457ae67a940c71b49e9b Reviewed-by: Tobias Hunger --- src/plugins/git/giteditor.cpp | 16 ++++++++++++---- src/plugins/git/giteditor.h | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp index 3e7268a9b03..cffa993974c 100644 --- a/src/plugins/git/giteditor.cpp +++ b/src/plugins/git/giteditor.cpp @@ -212,12 +212,13 @@ void GitEditorWidget::checkoutChange() sourceWorkingDirectory(), m_currentChange); } -void GitEditorWidget::resetChange() +void GitEditorWidget::resetChange(const QByteArray &resetType) { const QString workingDir = sourceWorkingDirectory(); GitClient *client = GitPlugin::instance()->gitClient(); - if (client->gitStatus(workingDir, StatusMode(NoUntracked | NoSubmodules)) + if (resetType == "hard" + && client->gitStatus(workingDir, StatusMode(NoUntracked | NoSubmodules)) != GitClient::StatusUnchanged) { if (QMessageBox::question( Core::ICore::mainWindow(), tr("Reset"), @@ -227,7 +228,7 @@ void GitEditorWidget::resetChange() return; } } - client->reset(workingDir, QLatin1String("--hard"), m_currentChange); + client->reset(workingDir, QLatin1String("--" + resetType), m_currentChange); } void GitEditorWidget::cherryPickChange() @@ -348,7 +349,14 @@ void GitEditorWidget::addChangeActions(QMenu *menu, const QString &change) menu->addAction(tr("Cherr&y-Pick Change %1").arg(change), this, SLOT(cherryPickChange())); menu->addAction(tr("Re&vert Change %1").arg(change), this, SLOT(revertChange())); menu->addAction(tr("C&heckout Change %1").arg(change), this, SLOT(checkoutChange())); - menu->addAction(tr("Hard &Reset to Change %1").arg(change), this, SLOT(resetChange())); + QMenu *resetMenu = new QMenu(tr("&Reset to Change %1").arg(change), menu); + connect(resetMenu->addAction(tr("&Hard")), &QAction::triggered, + this, [this]() { resetChange("hard"); }); + connect(resetMenu->addAction(tr("&Mixed")), &QAction::triggered, + this, [this]() { resetChange("mixed"); }); + connect(resetMenu->addAction(tr("&Soft")), &QAction::triggered, + this, [this]() { resetChange("soft"); }); + menu->addMenu(resetMenu); } } diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h index 8de4d4ebf17..eb37fd87222 100644 --- a/src/plugins/git/giteditor.h +++ b/src/plugins/git/giteditor.h @@ -56,13 +56,13 @@ public slots: private slots: void checkoutChange(); - void resetChange(); void cherryPickChange(); void revertChange(); void applyDiffChunk(const VcsBase::DiffChunk& chunk, bool revert); private: void init(); + void resetChange(const QByteArray &resetType); void addDiffActions(QMenu *menu, const VcsBase::DiffChunk &chunk); bool open(QString *errorString, const QString &fileName, const QString &realFileName); QSet annotationChanges() const;