Flake alias -> id

This commit is contained in:
Eelco Dolstra 2019-09-20 14:46:37 +02:00
parent 68e0f23edc
commit 5961c94097
2 changed files with 12 additions and 13 deletions

View file

@ -20,7 +20,7 @@ const static std::string revOrRefRegex = "(?:(" + revRegexS + ")|(" + refRegex +
// "master/e72daba8250068216d79d2aeef40d4d95aff6666"). // "master/e72daba8250068216d79d2aeef40d4d95aff6666").
const static std::string refAndOrRevRegex = "(?:(" + revRegexS + ")|(?:(" + refRegex + ")(?:/(" + revRegexS + "))?))"; const static std::string refAndOrRevRegex = "(?:(" + revRegexS + ")|(?:(" + refRegex + ")(?:/(" + revRegexS + "))?))";
const static std::string flakeAlias = "[a-zA-Z][a-zA-Z0-9_-]*"; const static std::string flakeId = "[a-zA-Z][a-zA-Z0-9_-]*";
// GitHub references. // GitHub references.
const static std::string ownerRegex = "[a-zA-Z][a-zA-Z0-9_-]*"; const static std::string ownerRegex = "[a-zA-Z][a-zA-Z0-9_-]*";
@ -43,7 +43,7 @@ FlakeRef::FlakeRef(const std::string & uri_, bool allowRelative)
// FIXME: could combine this into one regex. // FIXME: could combine this into one regex.
static std::regex flakeRegex( static std::regex flakeRegex(
"(?:flake:)?(" + flakeAlias + ")(?:/(?:" + refAndOrRevRegex + "))?", "(?:flake:)?(" + flakeId + ")(?:/(?:" + refAndOrRevRegex + "))?",
std::regex::ECMAScript); std::regex::ECMAScript);
static std::regex githubRegex( static std::regex githubRegex(
@ -90,8 +90,8 @@ FlakeRef::FlakeRef(const std::string & uri_, bool allowRelative)
std::cmatch match; std::cmatch match;
if (std::regex_match(uri.c_str(), match, flakeRegex)) { if (std::regex_match(uri.c_str(), match, flakeRegex)) {
IsAlias d; IsId d;
d.alias = match[1]; d.id = match[1];
if (match[2].matched) if (match[2].matched)
rev = Hash(match[2], htSHA1); rev = Hash(match[2], htSHA1);
else if (match[3].matched) { else if (match[3].matched) {
@ -195,8 +195,8 @@ std::string FlakeRef::to_string() const
string += value; // FIXME: escaping string += value; // FIXME: escaping
}; };
if (auto refData = std::get_if<FlakeRef::IsAlias>(&data)) { if (auto refData = std::get_if<FlakeRef::IsId>(&data)) {
string = refData->alias; string = refData->id;
if (ref) string += '/' + *ref; if (ref) string += '/' + *ref;
if (rev) string += '/' + rev->gitRev(); if (rev) string += '/' + rev->gitRev();
} }

View file

@ -101,16 +101,15 @@ namespace nix {
*/ */
typedef std::string FlakeId; typedef std::string FlakeId;
typedef std::string FlakeAlias;
typedef std::string FlakeUri; typedef std::string FlakeUri;
struct FlakeRef struct FlakeRef
{ {
struct IsAlias struct IsId
{ {
FlakeAlias alias; FlakeId id;
bool operator<(const IsAlias & b) const { return alias < b.alias; }; bool operator<(const IsId & b) const { return id < b.id; };
bool operator==(const IsAlias & b) const { return alias == b.alias; }; bool operator==(const IsId & b) const { return id == b.id; };
}; };
struct IsGitHub { struct IsGitHub {
@ -140,7 +139,7 @@ struct FlakeRef
// Git, Tarball // Git, Tarball
std::variant<IsAlias, IsGitHub, IsGit, IsPath> data; std::variant<IsId, IsGitHub, IsGit, IsPath> data;
std::optional<std::string> ref; std::optional<std::string> ref;
std::optional<Hash> rev; std::optional<Hash> rev;
@ -168,7 +167,7 @@ struct FlakeRef
a flake ID, which requires a lookup in the flake registry. */ a flake ID, which requires a lookup in the flake registry. */
bool isDirect() const bool isDirect() const
{ {
return !std::get_if<FlakeRef::IsAlias>(&data); return !std::get_if<FlakeRef::IsId>(&data);
} }
/* Check whether this is an "immutable" flake reference, that is, /* Check whether this is an "immutable" flake reference, that is,