mirror of
https://github.com/NixOS/nix.git
synced 2025-11-26 04:00:59 +01:00
This commit is contained in:
parent
e80c7bda4c
commit
315cd18337
5 changed files with 31 additions and 6 deletions
|
|
@ -340,7 +340,7 @@ static Hash hashDerivationModulo(EvalState & state, Derivation drv)
|
|||
* If this drv doesnt have runtime paramters: The state indentifier and thus statepath may change, and thus the componentPath changes since it is build with another identifier
|
||||
* In both cases: Other runtime state parameters like stateDirs, synchronisation and shareState never change the out or statepath so always need to be out of the hash
|
||||
*/
|
||||
if(drv.stateOutputs.size() != 0){
|
||||
if(isStateDrv(drv)){
|
||||
|
||||
if(drv.stateOutputs.size() != 1)
|
||||
throw EvalError(format("There are more then one stateOutputs in the derviation....."));
|
||||
|
|
@ -655,7 +655,14 @@ static Expr prim_derivationStrict(EvalState & state, const ATermVector & args)
|
|||
ATermMap outAttrs(2);
|
||||
outAttrs.set(toATerm("outPath"), makeAttrRHS(makeStr(outPath, singleton<PathSet>(drvPath)), makeNoPos()));
|
||||
outAttrs.set(toATerm("drvPath"), makeAttrRHS(makeStr(drvPath, singleton<PathSet>(drvPath)), makeNoPos()));
|
||||
if(enableState && !disableState)
|
||||
|
||||
/* TODO !!!!!!!!!!!!!!!!!!!! Recheck this !!!!!!!!!!!!!!!!!!!!
|
||||
* We now always set the statePath since someone might 'convert' and old non-state expression into a state expression like this:
|
||||
* let oldDrv = import ../../applications/networking/mailreaders/thunderbird-2.x;
|
||||
* newDrv = stdenv.mkDerivation( oldDrv { ... } // { name = "x-state-v"; stateDirs = [ ... ]; } );
|
||||
* in newDrv
|
||||
*/
|
||||
//if(enableState && !disableState)
|
||||
outAttrs.set(toATerm("statePath"), makeAttrRHS(makeStr(stateOutPath, singleton<PathSet>(drvPath)), makeNoPos()));
|
||||
|
||||
return makeAttrs(outAttrs);
|
||||
|
|
|
|||
|
|
@ -728,8 +728,10 @@ PathSet mergeNewDerivationIntoListTxn(const Transaction & txn, const Path & stor
|
|||
void addStateDeriver(const Transaction & txn, const Path & storePath, const Path & deriver)
|
||||
{
|
||||
assertStorePath(storePath);
|
||||
if (deriver == "") return;
|
||||
if (deriver == "")
|
||||
return;
|
||||
assertStorePath(deriver);
|
||||
|
||||
if (!isRealisablePath(txn, storePath))
|
||||
throw Error(format("path `%1%' is not valid") % storePath);
|
||||
|
||||
|
|
|
|||
|
|
@ -143,6 +143,12 @@ void checkStatePath(const Derivation & drv)
|
|||
string componentHash = drv.stateOutputs.find("state")->second.componentHash;
|
||||
string suffix = drv.env.find("name")->second;
|
||||
string stateIdentifier = drv.stateOutputs.find("state")->second.stateIdentifier;
|
||||
|
||||
|
||||
//TODO Name check
|
||||
|
||||
|
||||
|
||||
Path calculatedPath = makeStatePath(componentHash, suffix, stateIdentifier); //TODO INCLUDE USER !!!!!!!!!!!!
|
||||
|
||||
//TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! calculatedPath IS NOT CORRECT ANYMORE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ typedef enum {
|
|||
wopQueryStateReferrers,
|
||||
wopAddToStore,
|
||||
wopAddTextToStore,
|
||||
wopBuildDerivations, //TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HANGS SOMETIMES !!!!!
|
||||
wopBuildDerivations, //14 TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HANGS SOMETIMES !!!!!
|
||||
wopEnsurePath,
|
||||
wopAddTempRoot,
|
||||
wopAddIndirectRoot,
|
||||
|
|
|
|||
|
|
@ -564,10 +564,15 @@ static void installDerivations(Globals & globals,
|
|||
|
||||
//if it doesnt need to share state with some other component
|
||||
//&& the identifiers are equal
|
||||
|
||||
//TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
//TODO && (the users are equal || OR SHARED BETWEEN USERS)
|
||||
//TODO
|
||||
if( newSharedState == ""
|
||||
&&
|
||||
(oldStateIdentifier == newStateIdentifier
|
||||
|| (oldStateIdentifier == "__EMTPY__" && newStateIdentifier == ""))
|
||||
|
||||
){
|
||||
|
||||
string oldStatePath;
|
||||
|
|
@ -604,9 +609,13 @@ static void installDerivations(Globals & globals,
|
|||
return;
|
||||
}
|
||||
|
||||
printMsg(lvlError, format("DONE!!!!!!!!"));
|
||||
|
||||
createUserEnv(globals.state, allElems,
|
||||
profile, globals.keepDerivations);
|
||||
|
||||
printMsg(lvlError, format("DONE!!!!!!!!"));
|
||||
|
||||
//After all components have been built succesfully, share their state paths with the old ones
|
||||
for (StringPairs::iterator i = toBeShared.begin(); i != toBeShared.end(); ++i){
|
||||
|
||||
|
|
@ -619,6 +628,7 @@ static void installDerivations(Globals & globals,
|
|||
store->setSharedState(i->first, i->second);
|
||||
}
|
||||
|
||||
|
||||
//Let the stateDirs in /nix/state point to the solidStateDependencies
|
||||
for (StringPairs::iterator i = externalStates.begin(); i != externalStates.end(); ++i){
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue