From 8414685c0f0c0d744c70d438894e4ecd7a078808 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 31 Jan 2020 19:16:40 +0100 Subject: Change lock file format to use an attribute representation of flake refs rather than URLs --- src/libexpr/flake/flakeref.cc | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src/libexpr/flake/flakeref.cc') diff --git a/src/libexpr/flake/flakeref.cc b/src/libexpr/flake/flakeref.cc index 7b840bce5..194332674 100644 --- a/src/libexpr/flake/flakeref.cc +++ b/src/libexpr/flake/flakeref.cc @@ -14,12 +14,19 @@ const static std::string subDirElemRegex = "(?:[a-zA-Z0-9_-]+[a-zA-Z0-9._-]*)"; const static std::string subDirRegex = subDirElemRegex + "(?:/" + subDirElemRegex + ")*"; #endif - std::string FlakeRef::to_string() const { return input->to_string(); } +fetchers::Input::Attrs FlakeRef::toAttrs() const +{ + auto attrs = input->toAttrs(); + if (subdir != "") + attrs.emplace("subdir", subdir); + return attrs; +} + bool FlakeRef::isDirect() const { return input->isDirect(); @@ -36,7 +43,7 @@ std::ostream & operator << (std::ostream & str, const FlakeRef & flakeRef) return str; } -bool FlakeRef::operator==(const FlakeRef & other) const +bool FlakeRef::operator ==(const FlakeRef & other) const { return *input == *other.input && subdir == other.subdir; } @@ -166,4 +173,13 @@ std::optional> maybeParseFlakeRefWithFragment( } } +FlakeRef FlakeRef::fromAttrs(const fetchers::Input::Attrs & attrs) +{ + auto attrs2(attrs); + attrs2.erase("subdir"); + return FlakeRef( + fetchers::inputFromAttrs(attrs2), + fetchers::maybeGetStrAttr(attrs, "subdir").value_or("")); +} + } -- cgit v1.2.3