mirror of
https://github.com/Kitware/CMake.git
synced 2026-11-06 05:16:58 +00:00
Merge topic 'presets-did-you-mean'
ba61d59840presets: Implement closest string for invalid preset2603725cccpresets: Extend ResolvePreset to workflow presets Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !12753
This commit is contained in:
commit
4e789da92d
11 files changed
+85
-59
No files matched your search
@@ -313,9 +313,9 @@ int main(int argc, char const* const* argv)
|
||||
auto resolveResult = presetsGraph.ResolvePreset(
|
||||
presetsArgs.PresetName, presetsGraph.PackagePresets);
|
||||
auto resolveError = cmCMakePresetsGraph::FormatPresetError<
|
||||
cmCMakePresetsGraph::PackagePreset>(resolveResult.StatusCode,
|
||||
resolveResult.ErrorPresetName,
|
||||
workingDirectory);
|
||||
cmCMakePresetsGraph::PackagePreset>(
|
||||
resolveResult.StatusCode, resolveResult.ErrorPresetName,
|
||||
resolveResult.Suggestion, workingDirectory);
|
||||
if (resolveError) {
|
||||
cmCPack_Log(&log, cmCPackLog::LOG_ERROR, *resolveError << "\n");
|
||||
presetsGraph.PrintPackagePresetList(
|
||||
|
||||
@@ -139,7 +139,7 @@ std::unique_ptr<cmCTestGenericHandler> cmCTestBuildCommand::InitializeHandler(
|
||||
presetsGraph.ResolvePreset(effectivePreset, presetsGraph.BuildPresets);
|
||||
auto resolveError = cmCMakePresetsGraph::FormatPresetError<BuildPreset>(
|
||||
resolveResult.StatusCode, resolveResult.ErrorPresetName,
|
||||
sourceDirectory);
|
||||
resolveResult.Suggestion, sourceDirectory);
|
||||
if (resolveError) {
|
||||
status.SetError(*resolveError);
|
||||
return nullptr;
|
||||
|
||||
@@ -75,7 +75,7 @@ bool ConstructConfigureCommand(
|
||||
auto resolveError =
|
||||
cmCMakePresetsGraph::FormatPresetError<ConfigurePreset>(
|
||||
resolveResult.StatusCode, resolveResult.ErrorPresetName,
|
||||
sourceDirectory);
|
||||
resolveResult.Suggestion, sourceDirectory);
|
||||
if (resolveError) {
|
||||
status.SetError(*resolveError);
|
||||
return false;
|
||||
|
||||
@@ -95,7 +95,7 @@ cmCTestTestCommand::ResolveTestPreset(cmMakefile& mf,
|
||||
resolved.EffectivePreset, resolved.PresetsGraph->TestPresets);
|
||||
auto resolveError = cmCMakePresetsGraph::FormatPresetError<TestPreset>(
|
||||
resolveResult.StatusCode, resolveResult.ErrorPresetName,
|
||||
resolved.SourceDirectory);
|
||||
resolveResult.Suggestion, resolved.SourceDirectory);
|
||||
if (resolveError) {
|
||||
status.SetError(*resolveError);
|
||||
return cm::nullopt;
|
||||
|
||||
@@ -426,6 +426,7 @@ public:
|
||||
|
||||
Status StatusCode = Status::Success;
|
||||
std::string ErrorPresetName;
|
||||
std::string Suggestion;
|
||||
T const* Preset = nullptr;
|
||||
};
|
||||
|
||||
@@ -439,7 +440,7 @@ public:
|
||||
template <class T>
|
||||
static cm::optional<std::string> FormatPresetError(
|
||||
PresetResolveStatus status, std::string const& errorPresetName,
|
||||
std::string const& directory);
|
||||
std::string const& suggestion, std::string const& directory);
|
||||
|
||||
template <class T>
|
||||
bool ResolveDependentPresets(std::map<std::string, PresetPair<T>>& presets);
|
||||
@@ -562,22 +563,35 @@ cmCMakePresetsGraph::ResolvePreset(
|
||||
cmCMakePresetsGraph::PresetPair<
|
||||
cmCMakePresetsGraph::PackagePreset>> const&) const;
|
||||
|
||||
extern template cmCMakePresetsGraph::PresetResolveResult<
|
||||
cmCMakePresetsGraph::WorkflowPreset>
|
||||
cmCMakePresetsGraph::ResolvePreset(
|
||||
std::string const&,
|
||||
std::map<std::string,
|
||||
cmCMakePresetsGraph::PresetPair<
|
||||
cmCMakePresetsGraph::WorkflowPreset>> const&) const;
|
||||
|
||||
extern template cm::optional<std::string>
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::ConfigurePreset>(
|
||||
cmCMakePresetsGraph::PresetResolveStatus, std::string const&,
|
||||
std::string const&);
|
||||
std::string const&, std::string const&);
|
||||
|
||||
extern template cm::optional<std::string>
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::BuildPreset>(
|
||||
cmCMakePresetsGraph::PresetResolveStatus, std::string const&,
|
||||
std::string const&);
|
||||
std::string const&, std::string const&);
|
||||
|
||||
extern template cm::optional<std::string>
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::TestPreset>(
|
||||
cmCMakePresetsGraph::PresetResolveStatus, std::string const&,
|
||||
std::string const&);
|
||||
std::string const&, std::string const&);
|
||||
|
||||
extern template cm::optional<std::string>
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::PackagePreset>(
|
||||
cmCMakePresetsGraph::PresetResolveStatus, std::string const&,
|
||||
std::string const&);
|
||||
std::string const&, std::string const&);
|
||||
|
||||
extern template cm::optional<std::string>
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::WorkflowPreset>(
|
||||
cmCMakePresetsGraph::PresetResolveStatus, std::string const&,
|
||||
std::string const&, std::string const&);
|
||||
@@ -2,6 +2,8 @@
|
||||
file LICENSE.rst or https://cmake.org/licensing for details. */
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <cm/optional>
|
||||
|
||||
@@ -21,6 +23,13 @@ cmCMakePresetsGraph::PresetResolveResult<T> cmCMakePresetsGraph::ResolvePreset(
|
||||
if (presetPair == presets.end()) {
|
||||
result.StatusCode = Result::Status::NotFound;
|
||||
result.ErrorPresetName = presetName;
|
||||
std::vector<std::string> candidates;
|
||||
for (auto const& pair : presets) {
|
||||
if (!pair.second.Unexpanded.Hidden) {
|
||||
candidates.push_back(pair.first);
|
||||
}
|
||||
}
|
||||
result.Suggestion = cmFindClosestString(presetName, candidates);
|
||||
return result;
|
||||
}
|
||||
if (presetPair->second.Unexpanded.Hidden) {
|
||||
@@ -72,16 +81,29 @@ cmCMakePresetsGraph::ResolvePreset(
|
||||
std::map<std::string, PresetPair<cmCMakePresetsGraph::PackagePreset>> const&)
|
||||
const;
|
||||
|
||||
template cmCMakePresetsGraph::PresetResolveResult<
|
||||
cmCMakePresetsGraph::WorkflowPreset>
|
||||
cmCMakePresetsGraph::ResolvePreset(
|
||||
std::string const&,
|
||||
std::map<std::string,
|
||||
PresetPair<cmCMakePresetsGraph::WorkflowPreset>> const&) const;
|
||||
|
||||
template <class T>
|
||||
cm::optional<std::string> cmCMakePresetsGraph::FormatPresetError(
|
||||
PresetResolveStatus status, std::string const& errorPresetName,
|
||||
std::string const& directory)
|
||||
std::string const& suggestion, std::string const& directory)
|
||||
{
|
||||
using Status = PresetResolveStatus;
|
||||
switch (status) {
|
||||
case Status::NotFound:
|
||||
return cmStrCat("No such ", T::kind(), " preset in ", directory, ": \"",
|
||||
errorPresetName, '"');
|
||||
case Status::NotFound: {
|
||||
std::string error = cmStrCat("No such ", T::kind(), " preset in ",
|
||||
directory, ": \"", errorPresetName, '"');
|
||||
if (!suggestion.empty()) {
|
||||
error =
|
||||
cmStrCat(std::move(error), ". Did you mean: \"", suggestion, "\"?");
|
||||
}
|
||||
return error;
|
||||
}
|
||||
case Status::Hidden:
|
||||
return cmStrCat("Cannot use hidden ", T::kind(), " preset in ",
|
||||
directory, ": \"", errorPresetName, '"');
|
||||
@@ -101,16 +123,21 @@ cm::optional<std::string> cmCMakePresetsGraph::FormatPresetError(
|
||||
// Explicit template instantiations for FormatPresetError
|
||||
template cm::optional<std::string>
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::ConfigurePreset>(
|
||||
PresetResolveStatus, std::string const&, std::string const&);
|
||||
PresetResolveStatus, std::string const&, std::string const&,
|
||||
std::string const&);
|
||||
|
||||
template cm::optional<std::string>
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::BuildPreset>(
|
||||
PresetResolveStatus, std::string const&, std::string const&);
|
||||
template cm::optional<std::string> cmCMakePresetsGraph::FormatPresetError<
|
||||
cmCMakePresetsGraph::BuildPreset>(PresetResolveStatus, std::string const&,
|
||||
std::string const&, std::string const&);
|
||||
|
||||
template cm::optional<std::string>
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::TestPreset>(
|
||||
PresetResolveStatus, std::string const&, std::string const&);
|
||||
template cm::optional<std::string> cmCMakePresetsGraph::FormatPresetError<
|
||||
cmCMakePresetsGraph::TestPreset>(PresetResolveStatus, std::string const&,
|
||||
std::string const&, std::string const&);
|
||||
|
||||
template cm::optional<std::string>
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::PackagePreset>(
|
||||
PresetResolveStatus, std::string const&, std::string const&);
|
||||
template cm::optional<std::string> cmCMakePresetsGraph::FormatPresetError<
|
||||
cmCMakePresetsGraph::PackagePreset>(PresetResolveStatus, std::string const&,
|
||||
std::string const&, std::string const&);
|
||||
|
||||
template cm::optional<std::string> cmCMakePresetsGraph::FormatPresetError<
|
||||
cmCMakePresetsGraph::WorkflowPreset>(PresetResolveStatus, std::string const&,
|
||||
std::string const&, std::string const&);
|
||||
+2
-2
@@ -833,7 +833,7 @@ int cmCTest::ProcessSteps()
|
||||
cmCMakePresetsGraph::FormatPresetError<
|
||||
cmCMakePresetsGraph::ConfigurePreset>(
|
||||
resolveResult.StatusCode, resolveResult.ErrorPresetName,
|
||||
sourceDir);
|
||||
resolveResult.Suggestion, sourceDir);
|
||||
if (resolveError) {
|
||||
cmCTestLog(this, ERROR_MESSAGE, *resolveError, '\n');
|
||||
return 12;
|
||||
@@ -1660,7 +1660,7 @@ bool cmCTest::SetArgsFromPreset(cmCMakePresetsArgs const& args)
|
||||
auto resolveError =
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::TestPreset>(
|
||||
resolveResult.StatusCode, resolveResult.ErrorPresetName,
|
||||
workingDirectory);
|
||||
resolveResult.Suggestion, workingDirectory);
|
||||
if (resolveError) {
|
||||
cmSystemTools::Error(*resolveError);
|
||||
cmake cm(cmState::Role::CTest);
|
||||
|
||||
+11
-32
@@ -2121,7 +2121,7 @@ bool cmake::SetArgsFromPreset(cmCMakePresetsConfigureArgs const& args,
|
||||
using S = cmCMakePresetsGraph::PresetResolveStatus;
|
||||
auto resolveError = cmCMakePresetsGraph::FormatPresetError<ConfigurePreset>(
|
||||
resolveResult.StatusCode, resolveResult.ErrorPresetName,
|
||||
this->GetHomeDirectory());
|
||||
resolveResult.Suggestion, this->GetHomeDirectory());
|
||||
if (resolveError) {
|
||||
cmSystemTools::Error(*resolveError);
|
||||
if (resolveResult.StatusCode == S::NotFound ||
|
||||
@@ -4081,7 +4081,7 @@ int cmake::Build(cmBuildArgs buildArgs, std::vector<std::string> targets,
|
||||
auto resolveError =
|
||||
cmCMakePresetsGraph::FormatPresetError<cmCMakePresetsGraph::BuildPreset>(
|
||||
resolveResult.StatusCode, resolveResult.ErrorPresetName,
|
||||
this->GetHomeDirectory());
|
||||
resolveResult.Suggestion, this->GetHomeDirectory());
|
||||
if (resolveError) {
|
||||
cmSystemTools::Error(*resolveError);
|
||||
settingsFile.PrintBuildPresetList();
|
||||
@@ -4462,39 +4462,18 @@ int cmake::Workflow(cmCMakePresetsWorkflowArgs const& args)
|
||||
return 0;
|
||||
}
|
||||
|
||||
auto presetPair = settingsFile.WorkflowPresets.find(args.PresetName);
|
||||
if (presetPair == settingsFile.WorkflowPresets.end()) {
|
||||
cmSystemTools::Error(cmStrCat("No such workflow preset in ",
|
||||
this->GetHomeDirectory(), ": \"",
|
||||
args.PresetName, '"'));
|
||||
settingsFile.PrintWorkflowPresetList();
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (presetPair->second.Unexpanded.Hidden) {
|
||||
cmSystemTools::Error(cmStrCat("Cannot use hidden workflow preset in ",
|
||||
this->GetHomeDirectory(), ": \"",
|
||||
args.PresetName, '"'));
|
||||
settingsFile.PrintWorkflowPresetList();
|
||||
return 1;
|
||||
}
|
||||
|
||||
auto const& expandedPreset = presetPair->second.Expanded;
|
||||
if (!expandedPreset) {
|
||||
cmSystemTools::Error(cmStrCat("Could not evaluate workflow preset \"",
|
||||
args.PresetName,
|
||||
"\": Invalid macro expansion"));
|
||||
settingsFile.PrintWorkflowPresetList();
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!expandedPreset->ConditionResult) {
|
||||
cmSystemTools::Error(cmStrCat("Cannot use disabled workflow preset in ",
|
||||
this->GetHomeDirectory(), ": \"",
|
||||
args.PresetName, '"'));
|
||||
auto resolveResult =
|
||||
settingsFile.ResolvePreset(args.PresetName, settingsFile.WorkflowPresets);
|
||||
auto resolveError = cmCMakePresetsGraph::FormatPresetError<
|
||||
cmCMakePresetsGraph::WorkflowPreset>(
|
||||
resolveResult.StatusCode, resolveResult.ErrorPresetName,
|
||||
resolveResult.Suggestion, this->GetHomeDirectory());
|
||||
if (resolveError) {
|
||||
cmSystemTools::Error(*resolveError);
|
||||
settingsFile.PrintWorkflowPresetList();
|
||||
return 1;
|
||||
}
|
||||
auto const* expandedPreset = resolveResult.Preset;
|
||||
|
||||
struct CalculatedStep
|
||||
{
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,2 @@
|
||||
^CMake Error: No such configure preset in [^
|
||||
]*/Tests/RunCMake/CMakePresets/NoSuchPresetDidYouMean: "GoodNoArg"\. Did you mean: "GoodNoArgs"\?$
|
||||
@@ -350,6 +350,9 @@ endif()
|
||||
|
||||
# Test bad command line arguments
|
||||
run_cmake_presets(NoSuchPreset)
|
||||
set(CMakePresets_NO_PRESET 1)
|
||||
run_cmake_presets(NoSuchPresetDidYouMean --preset=GoodNoArg)
|
||||
unset(CMakePresets_NO_PRESET)
|
||||
run_cmake_presets(NoPresetArgument --preset)
|
||||
run_cmake_presets(NoPresetArgumentEq --preset= -DA=B)
|
||||
run_cmake_presets(UseHiddenPreset)
|
||||
|
||||
Reference in new issue
Block a user