mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-09-21 08:58:04 +03:00
d41e1bed5e
We finally test the status quo of remote build trust in a number of ways. We create a new experimental feature on `nix-daemon` to do so. PR #3921, which improves the situation with trustless remote building, will build upon these changes. This code / tests was pull out of there to make this, so everything is easier to review, and in particular we test before and after so the new behavior in that PR is readily apparent from the testsuite diff alone.
95 lines
2.3 KiB
C++
95 lines
2.3 KiB
C++
#pragma once
|
||
///@file
|
||
|
||
#include "comparator.hh"
|
||
#include "error.hh"
|
||
#include "nlohmann/json_fwd.hpp"
|
||
#include "types.hh"
|
||
|
||
namespace nix {
|
||
|
||
/**
|
||
* The list of available experimental features.
|
||
*
|
||
* If you update this, don’t forget to also change the map defining
|
||
* their string representation and documentation in the corresponding
|
||
* `.cc` file as well.
|
||
*/
|
||
enum struct ExperimentalFeature
|
||
{
|
||
CaDerivations,
|
||
ImpureDerivations,
|
||
Flakes,
|
||
NixCommand,
|
||
RecursiveNix,
|
||
NoUrlLiterals,
|
||
FetchClosure,
|
||
ReplFlake,
|
||
AutoAllocateUids,
|
||
Cgroups,
|
||
DiscardReferences,
|
||
DaemonTrustOverride,
|
||
};
|
||
|
||
/**
|
||
* Just because writing `ExperimentalFeature::CaDerivations` is way too long
|
||
*/
|
||
using Xp = ExperimentalFeature;
|
||
|
||
/**
|
||
* Parse an experimental feature (enum value) from its name. Experimental
|
||
* feature flag names are hyphenated and do not contain spaces.
|
||
*/
|
||
const std::optional<ExperimentalFeature> parseExperimentalFeature(
|
||
const std::string_view & name);
|
||
|
||
/**
|
||
* Show the name of an experimental feature. This is the opposite of
|
||
* parseExperimentalFeature().
|
||
*/
|
||
std::string_view showExperimentalFeature(const ExperimentalFeature);
|
||
|
||
/**
|
||
* Compute the documentation of all experimental features.
|
||
*
|
||
* See `doc/manual` for how this information is used.
|
||
*/
|
||
nlohmann::json documentExperimentalFeatures();
|
||
|
||
/**
|
||
* Shorthand for `str << showExperimentalFeature(feature)`.
|
||
*/
|
||
std::ostream & operator<<(
|
||
std::ostream & str,
|
||
const ExperimentalFeature & feature);
|
||
|
||
/**
|
||
* Parse a set of strings to the corresponding set of experimental
|
||
* features, ignoring (but warning for) any unknown feature.
|
||
*/
|
||
std::set<ExperimentalFeature> parseFeatures(const std::set<std::string> &);
|
||
|
||
/**
|
||
* An experimental feature was required for some (experimental)
|
||
* operation, but was not enabled.
|
||
*/
|
||
class MissingExperimentalFeature : public Error
|
||
{
|
||
public:
|
||
/**
|
||
* The experimental feature that was required but not enabled.
|
||
*/
|
||
ExperimentalFeature missingFeature;
|
||
|
||
MissingExperimentalFeature(ExperimentalFeature missingFeature);
|
||
};
|
||
|
||
/**
|
||
* Semi-magic conversion to and from json.
|
||
* See the nlohmann/json readme for more details.
|
||
*/
|
||
void to_json(nlohmann::json &, const ExperimentalFeature &);
|
||
void from_json(const nlohmann::json &, ExperimentalFeature &);
|
||
|
||
}
|