diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2021-07-09 00:32:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-09 00:32:13 +0200 |
commit | d2b8b23ae9dfa3be25fba1cf407090c2fb10c5e6 (patch) | |
tree | f70821a0f4edecf98c453ca0bdd0563055451355 /src | |
parent | 8648143120c60c9e104e5b2fd3beee2cfd2268d2 (diff) | |
parent | a654c1d81c63f13a49591436d6638d7c42222b99 (diff) |
Merge pull request #4995 from NixOS/fetchgit-name-attribute
Fix the `name` attribute in builtins.fetchGit
Diffstat (limited to 'src')
-rw-r--r-- | src/libexpr/primops/fetchTree.cc | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/libexpr/primops/fetchTree.cc b/src/libexpr/primops/fetchTree.cc index 5603b6036..730db84ed 100644 --- a/src/libexpr/primops/fetchTree.cc +++ b/src/libexpr/primops/fetchTree.cc @@ -82,13 +82,18 @@ void addURI(EvalState &state, fetchers::Attrs &attrs, Symbol name, std::string v attrs.emplace(name, n == "url" ? fixURI(v, state) : v); } +struct FetchTreeParams { + bool emptyRevFallback = false; + bool allowNameArgument = false; +}; + static void fetchTree( EvalState &state, const Pos &pos, Value **args, Value &v, const std::optional<std::string> type, - bool emptyRevFallback = false + const FetchTreeParams & params = FetchTreeParams{} ) { fetchers::Input input; PathSet context; @@ -129,11 +134,12 @@ static void fetchTree( .errPos = pos }); - if (auto nameIter = attrs.find("name"); nameIter != attrs.end()) - throw Error({ - .msg = hintfmt("attribute 'name' isn’t supported in call to 'fetchTree'"), - .errPos = pos - }); + if (!params.allowNameArgument) + if (auto nameIter = attrs.find("name"); nameIter != attrs.end()) + throw Error({ + .msg = hintfmt("attribute 'name' isn’t supported in call to 'fetchTree'"), + .errPos = pos + }); input = fetchers::Input::fromAttrs(std::move(attrs)); @@ -161,13 +167,13 @@ static void fetchTree( if (state.allowedPaths) state.allowedPaths->insert(tree.actualPath); - emitTreeAttrs(state, tree, input2, v, emptyRevFallback); + emitTreeAttrs(state, tree, input2, v, params.emptyRevFallback); } static void prim_fetchTree(EvalState & state, const Pos & pos, Value * * args, Value & v) { settings.requireExperimentalFeature("flakes"); - fetchTree(state, pos, args, v, std::nullopt); + fetchTree(state, pos, args, v, std::nullopt, FetchTreeParams { .allowNameArgument = false }); } // FIXME: document @@ -309,7 +315,7 @@ static RegisterPrimOp primop_fetchTarball({ static void prim_fetchGit(EvalState &state, const Pos &pos, Value **args, Value &v) { - fetchTree(state, pos, args, v, "git", true); + fetchTree(state, pos, args, v, "git", FetchTreeParams { .emptyRevFallback = true, .allowNameArgument = true }); } static RegisterPrimOp primop_fetchGit({ |