forked from qt-creator/qt-creator
Make it possible to continue with "Build All Projects" after errors
The user might still want to get the second project built after the first one failed. Fixes: QTCREATORBUG-22140 Change-Id: I644e64ae2267b25e9804cb4a614edd5a3340a2e7 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -80,6 +80,7 @@ public:
|
||||
bool m_skipDisabled = false;
|
||||
bool m_canceling = false;
|
||||
bool m_lastStepSucceeded = true;
|
||||
bool m_allStepsSucceeded = true;
|
||||
BuildStep *m_currentBuildStep = nullptr;
|
||||
QString m_currentConfiguration;
|
||||
// used to decide if we are building a project to decide when to emit buildStateChanged(Project *)
|
||||
@@ -305,6 +306,7 @@ void BuildManager::startBuildQueue()
|
||||
d->m_progressFutureInterface->setProgressRange(0, d->m_maxProgress * 100);
|
||||
|
||||
d->m_running = true;
|
||||
d->m_allStepsSucceeded = true;
|
||||
d->m_progressFutureInterface->reportStarted();
|
||||
nextStep();
|
||||
} else {
|
||||
@@ -372,6 +374,7 @@ void BuildManager::nextBuildQueue()
|
||||
nextStep();
|
||||
} else {
|
||||
// Build Failure
|
||||
d->m_allStepsSucceeded = false;
|
||||
Target *t = d->m_currentBuildStep->target();
|
||||
const QString projectName = d->m_currentBuildStep->project()->displayName();
|
||||
const QString targetName = t->displayName();
|
||||
@@ -382,10 +385,28 @@ void BuildManager::nextBuildQueue()
|
||||
.arg(targetName), BuildStep::OutputFormat::Stderr);
|
||||
}
|
||||
addToOutputWindow(tr("When executing step \"%1\"").arg(d->m_currentBuildStep->displayName()), BuildStep::OutputFormat::Stderr);
|
||||
// NBS TODO fix in qtconcurrent
|
||||
d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, tr("Error while building/deploying project %1 (kit: %2)").arg(projectName, targetName));
|
||||
|
||||
clearBuildQueue();
|
||||
bool abort = ProjectExplorerPlugin::projectExplorerSettings().abortBuildAllOnError;
|
||||
if (!abort) {
|
||||
while (!d->m_buildQueue.isEmpty()
|
||||
&& d->m_buildQueue.front()->target() == t) {
|
||||
BuildStep * const nextStepForFailedTarget = d->m_buildQueue.takeFirst();
|
||||
disconnectOutput(nextStepForFailedTarget);
|
||||
decrementActiveBuildSteps(nextStepForFailedTarget);
|
||||
}
|
||||
if (d->m_buildQueue.isEmpty())
|
||||
abort = true;
|
||||
}
|
||||
|
||||
if (abort) {
|
||||
// NBS TODO fix in qtconcurrent
|
||||
d->m_progressFutureInterface->setProgressValueAndText(d->m_progress * 100,
|
||||
tr("Error while building/deploying project %1 (kit: %2)")
|
||||
.arg(projectName, targetName));
|
||||
clearBuildQueue();
|
||||
} else {
|
||||
nextStep();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -438,7 +459,7 @@ void BuildManager::nextStep()
|
||||
delete d->m_progressFutureInterface;
|
||||
d->m_progressFutureInterface = nullptr;
|
||||
d->m_maxProgress = 0;
|
||||
emit m_instance->buildQueueFinished(true);
|
||||
emit m_instance->buildQueueFinished(d->m_allStepsSucceeded);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -253,6 +253,8 @@ const char TERMINAL_MODE_SETTINGS_KEY[] = "ProjectExplorer/Settings/TerminalMode
|
||||
const char CLOSE_FILES_WITH_PROJECT_SETTINGS_KEY[]
|
||||
= "ProjectExplorer/Settings/CloseFilesWithProject";
|
||||
const char CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY[] = "ProjectExplorer/Settings/ClearIssuesOnRebuild";
|
||||
const char ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY[]
|
||||
= "ProjectExplorer/Settings/AbortBuildAllOnError";
|
||||
|
||||
} // namespace Constants
|
||||
|
||||
@@ -1379,6 +1381,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
||||
= s->value(Constants::CLOSE_FILES_WITH_PROJECT_SETTINGS_KEY, true).toBool();
|
||||
dd->m_projectExplorerSettings.clearIssuesOnRebuild
|
||||
= s->value(Constants::CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY, true).toBool();
|
||||
dd->m_projectExplorerSettings.abortBuildAllOnError
|
||||
= s->value(Constants::ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY, true).toBool();
|
||||
dd->m_projectExplorerSettings.buildDirectoryTemplate
|
||||
= s->value(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY).toString();
|
||||
if (dd->m_projectExplorerSettings.buildDirectoryTemplate.isEmpty())
|
||||
@@ -1987,6 +1991,8 @@ void ProjectExplorerPluginPrivate::savePersistentSettings()
|
||||
dd->m_projectExplorerSettings.closeSourceFilesWithProject);
|
||||
s->setValue(Constants::CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY,
|
||||
dd->m_projectExplorerSettings.clearIssuesOnRebuild);
|
||||
s->setValue(Constants::ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY,
|
||||
dd->m_projectExplorerSettings.abortBuildAllOnError);
|
||||
s->setValue(QLatin1String("ProjectExplorer/Settings/AutomaticallyCreateRunConfigurations"),
|
||||
dd->m_projectExplorerSettings.automaticallyCreateRunConfigurations);
|
||||
s->setValue(QLatin1String("ProjectExplorer/Settings/EnvironmentId"), dd->m_projectExplorerSettings.environmentId.toByteArray());
|
||||
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
bool addLibraryPathsToRunEnv = true;
|
||||
bool closeSourceFilesWithProject = true;
|
||||
bool clearIssuesOnRebuild = true;
|
||||
bool abortBuildAllOnError = true;
|
||||
StopBeforeBuild stopBeforeBuild = StopBeforeBuild::StopNone;
|
||||
TerminalMode terminalMode = TerminalMode::Smart;
|
||||
QString buildDirectoryTemplate;
|
||||
@@ -75,6 +76,7 @@ inline bool operator==(const ProjectExplorerSettings &p1, const ProjectExplorerS
|
||||
&& p1.terminalMode == p2.terminalMode
|
||||
&& p1.closeSourceFilesWithProject == p2.closeSourceFilesWithProject
|
||||
&& p1.clearIssuesOnRebuild == p2.clearIssuesOnRebuild
|
||||
&& p1.abortBuildAllOnError == p2.abortBuildAllOnError
|
||||
&& p1.buildDirectoryTemplate == p2.buildDirectoryTemplate;
|
||||
}
|
||||
|
||||
|
||||
@@ -108,6 +108,7 @@ ProjectExplorerSettings ProjectExplorerSettingsWidget::settings() const
|
||||
m_settings.terminalMode = static_cast<TerminalMode>(m_ui.terminalModeComboBox->currentIndex());
|
||||
m_settings.closeSourceFilesWithProject = m_ui.closeSourceFilesCheckBox->isChecked();
|
||||
m_settings.clearIssuesOnRebuild = m_ui.clearIssuesCheckBox->isChecked();
|
||||
m_settings.abortBuildAllOnError = m_ui.abortBuildAllOnErrorCheckBox->isChecked();
|
||||
m_settings.buildDirectoryTemplate = buildDirectoryTemplate();
|
||||
return m_settings;
|
||||
}
|
||||
@@ -126,6 +127,7 @@ void ProjectExplorerSettingsWidget::setSettings(const ProjectExplorerSettings &
|
||||
m_ui.terminalModeComboBox->setCurrentIndex(static_cast<int>(m_settings.terminalMode));
|
||||
m_ui.closeSourceFilesCheckBox->setChecked(m_settings.closeSourceFilesWithProject);
|
||||
m_ui.clearIssuesCheckBox->setChecked(m_settings.clearIssuesOnRebuild);
|
||||
m_ui.abortBuildAllOnErrorCheckBox->setChecked(m_settings.abortBuildAllOnError);
|
||||
setBuildDirectoryTemplate(pes.buildDirectoryTemplate);
|
||||
}
|
||||
|
||||
|
||||
@@ -141,6 +141,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="abortBuildAllOnErrorCheckBox">
|
||||
<property name="text">
|
||||
<string>Abort on error when building all projects</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<item row="0" column="0">
|
||||
@@ -302,6 +309,7 @@
|
||||
<zorder>promptToStopRunControlCheckBox</zorder>
|
||||
<zorder>addLibraryPathsToRunEnvCheckBox</zorder>
|
||||
<zorder>clearIssuesCheckBox</zorder>
|
||||
<zorder>abortBuildAllOnErrorCheckBox</zorder>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
||||
Reference in New Issue
Block a user