Support SCP-like URLs in builtins.fetchGit attrs

This extends https://github.com/NixOS/nix/pull/4978 with
supporting the SCP-like urls in expressions like

```nix
builtins.fetchGit {
  url = "git@github.com:NixOS/nix.git";
  ref = "master";
}
```
This commit is contained in:
Viktor Kronvall 2021-07-29 01:44:19 +09:00
parent 48e35585a6
commit 7cdaae6b9c

View file

@ -76,10 +76,24 @@ std::string fixURIForGit(std::string uri, EvalState & state)
return fixURI(uri, state); return fixURI(uri, state);
} }
void addURI(EvalState &state, fetchers::Attrs &attrs, Symbol name, std::string v) void addURI(
{ EvalState &state,
fetchers::Attrs &attrs,
Symbol name,
std::string v,
const std::optional<std::string> type
) {
string n(name); string n(name);
attrs.emplace(name, n == "url" ? fixURI(v, state) : v); if (n == "url") {
if (type == "git") {
attrs.emplace("type", "git");
attrs.emplace(name, fixURIForGit(v, state));
} else {
attrs.emplace(name, fixURI(v, state));
}
} else {
attrs.emplace(name, v);
}
} }
struct FetchTreeParams { struct FetchTreeParams {
@ -112,10 +126,9 @@ static void fetchTree(
state, state,
attrs, attrs,
attr.name, attr.name,
state.coerceToString(*attr.pos, *attr.value, context, false, false) state.coerceToString(*attr.pos, *attr.value, context, false, false),
type
); );
else if (attr.value->type() == nString)
addURI(state, attrs, attr.name, attr.value->string.s);
else if (attr.value->type() == nBool) else if (attr.value->type() == nBool)
attrs.emplace(attr.name, Explicit<bool>{attr.value->boolean}); attrs.emplace(attr.name, Explicit<bool>{attr.value->boolean});
else if (attr.value->type() == nInt) else if (attr.value->type() == nInt)