From 8ee39f5b530df0d9e1b56e7d2499f096d56b569b Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 11 Jul 2025 14:10:12 +0200 Subject: Git: Make reset() fully asynchronous Use async status, if needed. Change-Id: I2c6390c3b3ab0b648d603932069740c138635672 Reviewed-by: Orgad Shaneh --- src/plugins/git/gitclient.cpp | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 004702f04ef..6689b306c42 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -23,6 +23,8 @@ #include +#include + #include #include @@ -1451,19 +1453,33 @@ void GitClient::reset(const FilePath &workingDirectory, const QString &argument, arguments << commit; RunFlags flags = RunFlags::ShowStdOut | RunFlags::ShowSuccessMessage; - if (argument == "--hard") { - if (gitStatus(workingDirectory, StatusMode(NoUntracked | NoSubmodules)) != StatusResult::Unchanged) { - if (QMessageBox::question( - Core::ICore::dialogParent(), Tr::tr("Reset"), - Tr::tr("All changes in working directory will be discarded. Are you sure?"), - QMessageBox::Yes | QMessageBox::No, - QMessageBox::No) == QMessageBox::No) { - return; - } - } + if (argument == "--hard") flags |= RunFlags::ExpectRepoChanges; - } - enqueueCommand({workingDirectory, arguments, flags}); + + const auto isHard = [argument] { return argument == "--hard"; }; + + const Storage statusResultStorage; + + const auto onStatusDone = [statusResultStorage] { + if (statusResultStorage->result == StatusResult::Unchanged) + return true; + + return QMessageBox::question( + Core::ICore::dialogParent(), Tr::tr("Reset"), + Tr::tr("All changes in working directory will be discarded. Are you sure?"), + QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes; + }; + + const Group recipe { + If (isHard) >> Then { + statusResultStorage, + statusTask(workingDirectory, StatusMode(NoUntracked | NoSubmodules), statusResultStorage), + onGroupDone(onStatusDone, CallDoneIf::Success) + }, + commandTask({workingDirectory, arguments, flags}) + }; + + enqueueTask(recipe); } void GitClient::removeStaleRemoteBranches(const FilePath &workingDirectory, const QString &remote) -- cgit v1.2.3