diff --git a/src/libfetchers/fetchers.cc b/src/libfetchers/fetchers.cc index 19e089aa8..c2513e076 100644 --- a/src/libfetchers/fetchers.cc +++ b/src/libfetchers/fetchers.cc @@ -220,6 +220,16 @@ std::pair Input::fetch(ref store) const return {std::move(storePath), input}; } +std::pair, Input> Input::getAccessor(ref store) const +{ + try { + return scheme->getAccessor(store, *this); + } catch (Error & e) { + e.addTrace({}, "while fetching the input '%s'", to_string()); + throw; + } +} + Input Input::applyOverrides( std::optional ref, std::optional rev) const diff --git a/src/libfetchers/fetchers.hh b/src/libfetchers/fetchers.hh index 6db1615f2..ce5aa4c69 100644 --- a/src/libfetchers/fetchers.hh +++ b/src/libfetchers/fetchers.hh @@ -83,6 +83,8 @@ public: */ std::pair fetch(ref store) const; + std::pair, Input> getAccessor(ref store) const; + Input applyOverrides( std::optional ref, std::optional rev) const; diff --git a/src/libfetchers/git.cc b/src/libfetchers/git.cc index 90c6ad531..71ae74dde 100644 --- a/src/libfetchers/git.cc +++ b/src/libfetchers/git.cc @@ -605,7 +605,7 @@ struct GitInputScheme : InputScheme attrs.insert_or_assign("rev", submoduleRev.gitRev()); auto submoduleInput = fetchers::Input::fromAttrs(std::move(attrs)); auto [submoduleAccessor, submoduleInput2] = - submoduleInput.scheme->getAccessor(store, submoduleInput); + submoduleInput.getAccessor(store); mounts.insert_or_assign(submodule.path, submoduleAccessor); } @@ -649,7 +649,7 @@ struct GitInputScheme : InputScheme attrs.insert_or_assign("url", submodulePath.abs()); auto submoduleInput = fetchers::Input::fromAttrs(std::move(attrs)); auto [submoduleAccessor, submoduleInput2] = - submoduleInput.scheme->getAccessor(store, submoduleInput); + submoduleInput.getAccessor(store); /* If the submodule is dirty, mark this repo dirty as well. */