mirror of
https://github.com/NixOS/nix.git
synced 2025-11-25 11:49:35 +01:00
* Substitute fixes.
This commit is contained in:
parent
b9ecadee6e
commit
9d56ca219f
8 changed files with 86 additions and 36 deletions
27
src/store.cc
27
src/store.cc
|
|
@ -86,6 +86,7 @@ void copyPath(string src, string dst)
|
|||
|
||||
void registerSubstitute(const FSId & srcId, const FSId & subId)
|
||||
{
|
||||
#if 0
|
||||
Strings subs;
|
||||
queryListDB(nixDB, dbSubstitutes, srcId, subs); /* non-existence = ok */
|
||||
|
||||
|
|
@ -94,6 +95,12 @@ void registerSubstitute(const FSId & srcId, const FSId & subId)
|
|||
|
||||
subs.push_back(subId);
|
||||
|
||||
setListDB(nixDB, dbSubstitutes, srcId, subs);
|
||||
#endif
|
||||
|
||||
/* For now, accept only one substitute per id. */
|
||||
Strings subs;
|
||||
subs.push_back(subId);
|
||||
setListDB(nixDB, dbSubstitutes, srcId, subs);
|
||||
}
|
||||
|
||||
|
|
@ -126,6 +133,8 @@ void unregisterPath(const string & _path)
|
|||
return;
|
||||
FSId id(parseHash(_id));
|
||||
|
||||
delDB(nixDB, dbPath2Id, path);
|
||||
|
||||
/* begin transaction */
|
||||
|
||||
Strings paths, paths2;
|
||||
|
|
@ -140,6 +149,7 @@ void unregisterPath(const string & _path)
|
|||
setListDB(nixDB, dbId2Paths, id, paths2);
|
||||
|
||||
/* end transaction */
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -189,32 +199,31 @@ string expandId(const FSId & id, const string & target,
|
|||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* Try to realise the substitutes. */
|
||||
|
||||
Strings subs;
|
||||
queryListDB(nixDB, dbSubstitutes, id, subs); /* non-existence = ok */
|
||||
|
||||
for (Strings::iterator it = subs.begin(); it != subs.end(); it++) {
|
||||
realiseSlice(normaliseFState(*it));
|
||||
FSId subId = parseHash(*it);
|
||||
Slice slice = normaliseFState(subId);
|
||||
realiseSlice(slice);
|
||||
|
||||
FState nf = realiseFState(hash2fstate(parseHash(*it)), dummy);
|
||||
string path = fstatePath(nf);
|
||||
|
||||
if (hashPath(path) != hash)
|
||||
throw Error(format("bad substitute in `%1%'") % (string) path);
|
||||
Strings paths = fstatePaths(subId, true);
|
||||
if (paths.size() != 1)
|
||||
throw Error("substitute created more than 1 path");
|
||||
string path = *(paths.begin());
|
||||
|
||||
if (target.empty())
|
||||
return path; /* !!! prefix */
|
||||
else {
|
||||
if (path != target) {
|
||||
copyPath(path, target);
|
||||
registerPath(target, hash);
|
||||
registerPath(target, id);
|
||||
}
|
||||
return target;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
throw Error(format("cannot expand id `%1%'") % (string) id);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue