462421d345
This provides a pluggable mechanism for defining new fetchers. It adds
a builtin function 'fetchTree' that generalizes existing fetchers like
'fetchGit', 'fetchMercurial' and 'fetchTarball'. 'fetchTree' takes a
set of attributes, e.g.
fetchTree {
type = "git";
url = "https://example.org/repo.git";
ref = "some-branch";
rev = "abcdef...";
}
The existing fetchers are just wrappers around this. Note that the
input attributes to fetchTree are the same as flake input
specifications and flake lock file entries.
All fetchers share a common cache stored in
~/.cache/nix/fetcher-cache-v1.sqlite. This replaces the ad hoc caching
mechanisms in fetchGit and download.cc (e.g. ~/.cache/nix/{tarballs,git-revs*}).
This also adds support for Git worktrees (c169ea5904
).
28 lines
917 B
C++
28 lines
917 B
C++
#include "eval.hh"
|
|
|
|
#include <tuple>
|
|
#include <vector>
|
|
|
|
namespace nix {
|
|
|
|
struct RegisterPrimOp
|
|
{
|
|
typedef std::vector<std::tuple<std::string, size_t, PrimOpFun>> PrimOps;
|
|
static PrimOps * primOps;
|
|
/* You can register a constant by passing an arity of 0. fun
|
|
will get called during EvalState initialization, so there
|
|
may be primops not yet added and builtins is not yet sorted. */
|
|
RegisterPrimOp(std::string name, size_t arity, PrimOpFun fun);
|
|
};
|
|
|
|
/* These primops are disabled without enableNativeCode, but plugins
|
|
may wish to use them in limited contexts without globally enabling
|
|
them. */
|
|
/* Load a ValueInitializer from a DSO and return whatever it initializes */
|
|
void prim_importNative(EvalState & state, const Pos & pos, Value * * args, Value & v);
|
|
|
|
/* Execute a program and parse its output */
|
|
void prim_exec(EvalState & state, const Pos & pos, Value * * args, Value & v);
|
|
|
|
}
|