forked from lix-project/lix
* Outline of the new scheme for derivate distribution.
This commit is contained in:
parent
2b95a9dc05
commit
6011bd0da2
|
@ -250,6 +250,10 @@ static FState realise(FState fs, StringSet & paths)
|
||||||
/* Register the normal form. */
|
/* Register the normal form. */
|
||||||
nf = storeSuccessor(fs, nf, paths);
|
nf = storeSuccessor(fs, nf, paths);
|
||||||
|
|
||||||
|
/* Expand the hash into the target path. */
|
||||||
|
expandHash(hash, path);
|
||||||
|
|
||||||
|
#if 0
|
||||||
/* Perhaps the path already exists and has the right hash? */
|
/* Perhaps the path already exists and has the right hash? */
|
||||||
if (pathExists(path)) {
|
if (pathExists(path)) {
|
||||||
|
|
||||||
|
@ -267,6 +271,7 @@ static FState realise(FState fs, StringSet & paths)
|
||||||
copyPath(path2, path);
|
copyPath(path2, path);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return nf;
|
return nf;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,21 @@ extern string dbHash2Paths;
|
||||||
*/
|
*/
|
||||||
extern string dbSuccessors;
|
extern string dbSuccessors;
|
||||||
|
|
||||||
|
/* dbSubstitutes :: Hash -> [Hash]
|
||||||
|
|
||||||
|
Each pair $(h, [hs])$ tells Nix that it can realise any of the
|
||||||
|
fstate expressions referenced by the hashes in $hs$ to obtain a Nix
|
||||||
|
archive that, when unpacked, will produce a path with hash $h$.
|
||||||
|
|
||||||
|
The main purpose of this is for distributed caching of derivates.
|
||||||
|
One system can compute a derivate with hash $h$ and put it on a
|
||||||
|
website (as a Nix archive), for instance, and then another system
|
||||||
|
can register a substitute for that derivate. The substitute in
|
||||||
|
this case might be an fstate expression that fetches the Nix
|
||||||
|
archive.
|
||||||
|
*/
|
||||||
|
extern string dbSubstitutes;
|
||||||
|
|
||||||
|
|
||||||
/* Path names. */
|
/* Path names. */
|
||||||
|
|
||||||
|
|
|
@ -158,6 +158,9 @@ static string queryPathByHashPrefix(Hash hash, const string & prefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string expandHash(const Hash & hash, const string & outPath = "")
|
||||||
|
{
|
||||||
|
|
||||||
string queryPathByHash(Hash hash)
|
string queryPathByHash(Hash hash)
|
||||||
{
|
{
|
||||||
return queryPathByHashPrefix(hash, "/");
|
return queryPathByHashPrefix(hash, "/");
|
||||||
|
@ -187,8 +190,8 @@ void addToStore(string srcPath, string & dstPath, Hash & hash)
|
||||||
|
|
||||||
void deleteFromStore(const string & path)
|
void deleteFromStore(const string & path)
|
||||||
{
|
{
|
||||||
string prefix = nixStore + "/";
|
string prefix = + "/";
|
||||||
if (string(path, 0, prefix.size()) != prefix)
|
if (!isInPrefix(path, nixStore))
|
||||||
throw Error(format("path %1% is not in the store") % path);
|
throw Error(format("path %1% is not in the store") % path);
|
||||||
|
|
||||||
unregisterPath(path);
|
unregisterPath(path);
|
||||||
|
|
12
src/store.hh
12
src/store.hh
|
@ -13,8 +13,16 @@ void copyPath(string src, string dst);
|
||||||
/* Register a path keyed on its hash. */
|
/* Register a path keyed on its hash. */
|
||||||
Hash registerPath(const string & path, Hash hash = Hash());
|
Hash registerPath(const string & path, Hash hash = Hash());
|
||||||
|
|
||||||
/* Query a path (any path) through its hash. */
|
/* Return a path whose contents have the given hash. If outPath is
|
||||||
string queryPathByHash(Hash hash);
|
not empty, ensure that such a path is realised in outPath (if
|
||||||
|
necessary by copying from another location). If prefix is not
|
||||||
|
empty, only return a path that is an descendent of prefix.
|
||||||
|
|
||||||
|
If no path with the given hash is known to exist in the file
|
||||||
|
system, ...
|
||||||
|
*/
|
||||||
|
string expandHash(const Hash & hash, const string & outPath = "",
|
||||||
|
const string & prefix = "/");
|
||||||
|
|
||||||
/* Copy a file to the nixStore directory and register it in dbRefs.
|
/* Copy a file to the nixStore directory and register it in dbRefs.
|
||||||
Return the hash code of the value. */
|
Return the hash code of the value. */
|
||||||
|
|
Loading…
Reference in a new issue