mirror of
https://github.com/NixOS/nix
synced 2025-06-28 17:51:15 +02:00
Merge remote-tracking branch 'tweag/flake-add' into flakes
This commit is contained in:
commit
42be60c6af
6 changed files with 136 additions and 15 deletions
|
@ -12,9 +12,14 @@
|
|||
|
||||
namespace nix {
|
||||
|
||||
Path getUserRegistryPath()
|
||||
{
|
||||
return getHome() + "/.config/nix/registry.json";
|
||||
}
|
||||
|
||||
/* Read the registry or a lock file. (Currently they have an identical
|
||||
format. */
|
||||
static std::unique_ptr<FlakeRegistry> readRegistry(const Path & path)
|
||||
std::unique_ptr<FlakeRegistry> readRegistry(const Path & path)
|
||||
{
|
||||
auto registry = std::make_unique<FlakeRegistry>();
|
||||
|
||||
|
@ -40,7 +45,7 @@ void writeRegistry(FlakeRegistry registry, Path path)
|
|||
json["version"] = 1;
|
||||
json["flakes"] = {};
|
||||
for (auto elem : registry.entries) {
|
||||
json["flakes"][elem.first] = elem.second.ref.to_string();
|
||||
json["flakes"][elem.first] = { {"uri", elem.second.ref.to_string()} };
|
||||
}
|
||||
writeFile(path, json.dump(4)); // The '4' is the number of spaces used in the indentation in the json file.
|
||||
}
|
||||
|
@ -183,8 +188,8 @@ Flake getFlake(EvalState & state, const FlakeRef & flakeRef)
|
|||
if (std::get_if<FlakeRef::IsGitHub>(&newFlakeRef.data)) {
|
||||
FlakeSourceInfo srcInfo = fetchFlake(state, newFlakeRef);
|
||||
if (srcInfo.rev) {
|
||||
std::string uri = flakeRef.to_string();
|
||||
newFlakeRef = FlakeRef(uri + "/" + srcInfo.rev->to_string());
|
||||
std::string uri = flakeRef.baseRef().to_string();
|
||||
newFlakeRef = FlakeRef(uri + "/" + srcInfo.rev->to_string(Base16, false));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,14 +14,19 @@ struct FlakeRegistry
|
|||
{
|
||||
FlakeRef ref;
|
||||
Entry(const FlakeRef & flakeRef) : ref(flakeRef) {};
|
||||
Entry operator=(const Entry & entry) { return Entry(entry.ref); }
|
||||
};
|
||||
std::map<FlakeId, Entry> entries;
|
||||
};
|
||||
|
||||
Path getUserRegistryPath();
|
||||
|
||||
Value * makeFlakeRegistryValue(EvalState & state);
|
||||
|
||||
Value * makeFlakeValue(EvalState & state, std::string flakeUri, Value & v);
|
||||
|
||||
std::unique_ptr<FlakeRegistry> readRegistry(const Path &);
|
||||
|
||||
void writeRegistry(FlakeRegistry, Path);
|
||||
|
||||
struct Flake
|
||||
|
|
|
@ -152,4 +152,19 @@ bool FlakeRef::isImmutable() const
|
|||
else abort();
|
||||
}
|
||||
|
||||
FlakeRef FlakeRef::baseRef() const // Removes the ref and rev from a FlakeRef.
|
||||
{
|
||||
FlakeRef result(*this);
|
||||
if (auto refData = std::get_if<FlakeRef::IsGitHub>(&result.data)) {
|
||||
refData->ref = std::nullopt;
|
||||
refData->rev = std::nullopt;
|
||||
} else if (auto refData = std::get_if<FlakeRef::IsGit>(&result.data)) {
|
||||
refData->ref = std::nullopt;
|
||||
refData->rev = std::nullopt;
|
||||
} else if (auto refData = std::get_if<FlakeRef::IsGit>(&result.data)) {
|
||||
refData->ref = std::nullopt;
|
||||
refData->rev = std::nullopt;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -153,6 +153,7 @@ struct FlakeRef
|
|||
/* Check whether this is an "immutable" flake reference, that is,
|
||||
one that contains a commit hash or content hash. */
|
||||
bool isImmutable() const;
|
||||
};
|
||||
|
||||
FlakeRef baseRef() const;
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue