forked from qt-creator/qt-creator
CMake: Check parseGuard.guardsProject()
... before overwriting the current guard, retaining the state of the current guard in the error case. Change-Id: I45ec43d48a9a13b9b59a5bbe6415a457b974b654 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io> Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -204,7 +204,7 @@ CMakeBuildSystem::CMakeBuildSystem(CMakeBuildConfiguration *bc)
|
|||||||
});
|
});
|
||||||
|
|
||||||
connect(project(), &Project::projectFileIsDirty, this, [this]() {
|
connect(project(), &Project::projectFileIsDirty, this, [this]() {
|
||||||
if (m_buildConfiguration->isActive()) {
|
if (m_buildConfiguration->isActive() && !isParsing()) {
|
||||||
const auto cmake = CMakeKitAspect::cmakeTool(m_buildConfiguration->target()->kit());
|
const auto cmake = CMakeKitAspect::cmakeTool(m_buildConfiguration->target()->kit());
|
||||||
if (cmake && cmake->isAutoRun()) {
|
if (cmake && cmake->isAutoRun()) {
|
||||||
qCDebug(cmakeBuildSystemLog) << "Requesting parse due to dirty project file";
|
qCDebug(cmakeBuildSystemLog) << "Requesting parse due to dirty project file";
|
||||||
@@ -235,9 +235,20 @@ CMakeBuildSystem::~CMakeBuildSystem()
|
|||||||
void CMakeBuildSystem::triggerParsing()
|
void CMakeBuildSystem::triggerParsing()
|
||||||
{
|
{
|
||||||
qCDebug(cmakeBuildSystemLog) << "Parsing has been triggered";
|
qCDebug(cmakeBuildSystemLog) << "Parsing has been triggered";
|
||||||
m_currentGuard = guardParsingRun();
|
|
||||||
|
|
||||||
QTC_ASSERT(m_currentGuard.guardsProject(), return );
|
auto guard = guardParsingRun();
|
||||||
|
|
||||||
|
if (!guard.guardsProject()) {
|
||||||
|
// This can legitimately trigger if e.g. Build->Run CMake
|
||||||
|
// is selected while this here is already running.
|
||||||
|
|
||||||
|
// FIXME: Instead of aborting the second run here we could try to
|
||||||
|
// cancel the first one in the Build->Run CMake handler and then
|
||||||
|
// continue to here normally. This here could then be an Assert.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_currentGuard = std::move(guard);
|
||||||
|
|
||||||
if (m_allFiles.isEmpty())
|
if (m_allFiles.isEmpty())
|
||||||
m_buildDirManager.requestFilesystemScan();
|
m_buildDirManager.requestFilesystemScan();
|
||||||
|
|||||||
Reference in New Issue
Block a user