At the moment an Error is thrown that only holds an error message regarding `nix-env` and `nix profile`. These tools make use of builtins.buildEnv, but buildEnv is also used in other places. These places are unrelated to Nix profiles, so the error shouldn't mention these tools. This generic error is now BuildEnvFileConflictError, which holds more contextual information about the files that were conflicting while building the environment.
48 lines
939 B
C++
48 lines
939 B
C++
#pragma once
|
|
|
|
#include "derivations.hh"
|
|
#include "store-api.hh"
|
|
|
|
namespace nix {
|
|
|
|
struct Package {
|
|
Path path;
|
|
bool active;
|
|
int priority;
|
|
Package(const Path & path, bool active, int priority) : path{path}, active{active}, priority{priority} {}
|
|
};
|
|
|
|
class BuildEnvFileConflictError : public Error
|
|
{
|
|
public:
|
|
const Path fileA;
|
|
const Path fileB;
|
|
int priority;
|
|
|
|
BuildEnvFileConflictError(
|
|
const Path fileA,
|
|
const Path fileB,
|
|
int priority
|
|
)
|
|
: Error(
|
|
"Unable to build profile. There is a conflict for the following files:\n"
|
|
"\n"
|
|
" %1%\n"
|
|
" %2%",
|
|
fileA,
|
|
fileB
|
|
)
|
|
, fileA(fileA)
|
|
, fileB(fileB)
|
|
, priority(priority)
|
|
{}
|
|
};
|
|
|
|
typedef std::vector<Package> Packages;
|
|
|
|
void buildProfile(const Path & out, Packages && pkgs);
|
|
|
|
void builtinBuildenv(const BasicDerivation & drv);
|
|
|
|
}
|