diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-07-22T15·15+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-07-22T15·15+0000 |
commit | e877c69d78fe75ae3531b3ed3cb4a4d7b390ccec (patch) | |
tree | 3e283c86e6d6079c84de21dcfe393acf0c5caf12 /src/store.hh | |
parent | df648c4967af7298fe55f75c7616e39e5b5e7d37 (diff) |
* Substitutes now should produce a path with the same id as they are
substituting for (obvious, really). * For greater efficiency, nix-pull/unnar will place the output in a path that is probably the same as what is actually needed, thus preventing a path copy. * Even if a output id is given in a Fix package expression, ensure that the resulting Nix derive expression has a different id. This is because Nix expressions that are semantically equivalent (i.e., build the same result) might be different w.r.t. efficiency or divergence. It is absolutely vital for the substitute mechanism that such expressions are not used interchangeably.
Diffstat (limited to 'src/store.hh')
-rw-r--r-- | src/store.hh | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/store.hh b/src/store.hh index faac760099bf..b2cdc41f166e 100644 --- a/src/store.hh +++ b/src/store.hh @@ -10,6 +10,8 @@ using namespace std; typedef Hash FSId; +typedef set<FSId> FSIdSet; + /* Copy a path recursively. */ void copyPath(string src, string dst); @@ -26,9 +28,14 @@ bool queryPathId(const string & path, FSId & id); /* Return a path whose contents have the given hash. If target is not empty, ensure that such a path is realised in target (if necessary by copying from another location). If prefix is not - empty, only return a path that is an descendent of prefix. */ + empty, only return a path that is an descendent of prefix. + + The list of pending ids are those that already being expanded. + This prevents infinite recursion for ids realised through a + substitute (since when we build the substitute, we would first try + to expand the id... kaboom!). */ string expandId(const FSId & id, const string & target = "", - const string & prefix = "/"); + const string & prefix = "/", FSIdSet pending = FSIdSet()); /* Copy a file to the nixStore directory and register it in dbRefs. Return the hash code of the value. */ |