diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-06-20 19:17:54 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-06-20 19:17:54 +0000 |
commit | 112ee89501a936ad9c492780be6b63f53b2eb9ca (patch) | |
tree | 2070bc757fa986b062b7964619ad927b272fd1de /src/libstore/store.hh | |
parent | bafb2357d1ab5f7aef8ce4495f5ab8b835359f63 (diff) |
* Re-enable support for substitutes in the normaliser.
* A better substitute mechanism.
Instead of generating a store expression for each store path for
which we have a substitute, we can have a single store expression
that builds a generic program that is invoked to build the desired
store path, which is passed as an argument.
This means that operations like `nix-pull' only produce O(1) files
instead of O(N) files in the store when registering N substitutes.
(It consumes O(N) database storage, of course, but that's not a
performance problem).
* Added a test for the substitute mechanism.
* `nix-store --substitute' reads the substitutes from standard input,
instead of from the command line. This prevents us from running
into the kernel's limit on command line length.
Diffstat (limited to 'src/libstore/store.hh')
-rw-r--r-- | src/libstore/store.hh | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/libstore/store.hh b/src/libstore/store.hh index 571d498c3..e09a4a94b 100644 --- a/src/libstore/store.hh +++ b/src/libstore/store.hh @@ -9,6 +9,29 @@ using namespace std; +/* A substitute is a program invocation that constructs some store + path (typically by fetching it from somewhere, e.g., from the + network). */ +struct Substitute +{ + /* Store expression to be normalised and realised in order to + obtain `program'. */ + Path storeExpr; + + /* Program to be executed to create the store path. Must be in + the output path of `storeExpr'. */ + Path program; + + /* Extra arguments to be passed to the program (the first argument + is the store path to be substituted). */ + Strings args; + + bool operator == (const Substitute & sub); +}; + +typedef list<Substitute> Substitutes; + + /* Open the database environment. */ void openDB(); @@ -40,10 +63,11 @@ bool querySuccessor(const Path & srcPath, Path & sucPath); Paths queryPredecessors(const Path & sucPath); /* Register a substitute. */ -void registerSubstitute(const Path & srcPath, const Path & subPath); +void registerSubstitute(const Path & srcPath, + const Substitute & sub); /* Return the substitutes expression for the given path. */ -Paths querySubstitutes(const Path & srcPath); +Substitutes querySubstitutes(const Path & srcPath); /* Register the validity of a path. */ void registerValidPath(const Transaction & txn, const Path & path); |