Flake alias -> id
This commit is contained in:
parent
68e0f23edc
commit
5961c94097
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue