* Put building in the store API.
This commit is contained in:
		
							parent
							
								
									e2ef5e07fd
								
							
						
					
					
						commit
						6ecb840fd1
					
				
					 11 changed files with 31 additions and 48 deletions
				
			
		|  | @ -1,4 +1,3 @@ | ||||||
| #include "build.hh" |  | ||||||
| #include "misc.hh" | #include "misc.hh" | ||||||
| #include "eval.hh" | #include "eval.hh" | ||||||
| #include "globals.hh" | #include "globals.hh" | ||||||
|  | @ -50,7 +49,7 @@ static Expr primImport(EvalState & state, const ATermVector & args) | ||||||
|             throw EvalError(format("cannot import `%1%', since path `%2%' is not valid") |             throw EvalError(format("cannot import `%1%', since path `%2%' is not valid") | ||||||
|                 % path % *i); |                 % path % *i); | ||||||
|         if (isDerivation(*i)) |         if (isDerivation(*i)) | ||||||
|             buildDerivations(singleton<PathSet>(*i)); |             store->buildDerivations(singleton<PathSet>(*i)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return evalFile(state, path); |     return evalFile(state, path); | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ libstore_la_SOURCES = \ | ||||||
|  db.cc references.cc pathlocks.cc gc.cc  |  db.cc references.cc pathlocks.cc gc.cc  | ||||||
| 
 | 
 | ||||||
| pkginclude_HEADERS = \ | pkginclude_HEADERS = \ | ||||||
|  store-api.hh local-store.cc derivations.hh build.hh misc.hh globals.hh \ |  store-api.hh local-store.cc derivations.hh misc.hh globals.hh \ | ||||||
|  db.hh references.hh pathlocks.hh gc.hh  |  db.hh references.hh pathlocks.hh gc.hh  | ||||||
| 
 | 
 | ||||||
| libstore_la_LIBADD = ../libutil/libutil.la ../boost/format/libformat.la | libstore_la_LIBADD = ../libutil/libutil.la ../boost/format/libformat.la | ||||||
|  |  | ||||||
|  | @ -1,4 +1,3 @@ | ||||||
| #include "build.hh" |  | ||||||
| #include "references.hh" | #include "references.hh" | ||||||
| #include "pathlocks.hh" | #include "pathlocks.hh" | ||||||
| #include "misc.hh" | #include "misc.hh" | ||||||
|  | @ -2195,7 +2194,7 @@ void Worker::waitForInput() | ||||||
| //////////////////////////////////////////////////////////////////////
 | //////////////////////////////////////////////////////////////////////
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| void buildDerivations(const PathSet & drvPaths) | void LocalStore::buildDerivations(const PathSet & drvPaths) | ||||||
| { | { | ||||||
|     startNest(nest, lvlDebug, |     startNest(nest, lvlDebug, | ||||||
|         format("building %1%") % showPaths(drvPaths)); |         format("building %1%") % showPaths(drvPaths)); | ||||||
|  | @ -2222,7 +2221,7 @@ void buildDerivations(const PathSet & drvPaths) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| void ensurePath(const Path & path) | void LocalStore::ensurePath(const Path & path) | ||||||
| { | { | ||||||
|     /* If the path is already valid, we're done. */ |     /* If the path is already valid, we're done. */ | ||||||
|     if (store->isValidPath(path)) return; |     if (store->isValidPath(path)) return; | ||||||
|  |  | ||||||
|  | @ -1,30 +0,0 @@ | ||||||
| #ifndef __BUILD_H |  | ||||||
| #define __BUILD_H |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #include "types.hh" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| namespace nix { |  | ||||||
| 
 |  | ||||||
|      |  | ||||||
| extern string drvsLogDir; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* Ensure that the output paths of the derivation are valid.  If they
 |  | ||||||
|    are already valid, this is a no-op.  Otherwise, validity can |  | ||||||
|    be reached in two ways.  First, if the output paths have |  | ||||||
|    substitutes, then those can be used.  Second, the output paths can |  | ||||||
|    be created by running the builder, after recursively building any |  | ||||||
|    sub-derivations. */ |  | ||||||
| void buildDerivations(const PathSet & drvPaths); |  | ||||||
| 
 |  | ||||||
| /* Ensure that a path is valid.  If it is not currently valid, it may
 |  | ||||||
|    be made valid by running a substitute (if defined for the path). */ |  | ||||||
| void ensurePath(const Path & storePath); |  | ||||||
| 
 |  | ||||||
|      |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #endif /* !__BUILD_H */ |  | ||||||
|  | @ -33,7 +33,6 @@ extern string nixConfDir; | ||||||
| extern string nixLibexecDir; | extern string nixLibexecDir; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| /* Misc. global flags. */ | /* Misc. global flags. */ | ||||||
| 
 | 
 | ||||||
| /* Whether to keep temporary directories of failed builds. */ | /* Whether to keep temporary directories of failed builds. */ | ||||||
|  |  | ||||||
|  | @ -18,6 +18,9 @@ class Transaction; | ||||||
| const int nixSchemaVersion = 3; | const int nixSchemaVersion = 3; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | extern string drvsLogDir; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class LocalStore : public StoreAPI | class LocalStore : public StoreAPI | ||||||
| { | { | ||||||
| public: | public: | ||||||
|  | @ -56,6 +59,10 @@ public: | ||||||
|     Path addTextToStore(const string & suffix, const string & s, |     Path addTextToStore(const string & suffix, const string & s, | ||||||
|         const PathSet & references); |         const PathSet & references); | ||||||
| 
 | 
 | ||||||
|  |     void buildDerivations(const PathSet & drvPaths); | ||||||
|  | 
 | ||||||
|  |     void ensurePath(const Path & storePath); | ||||||
|  | 
 | ||||||
| private: | private: | ||||||
|     Path _addToStore(bool fixed, bool recursive, |     Path _addToStore(bool fixed, bool recursive, | ||||||
|         string hashAlgo, const Path & _srcPath); |         string hashAlgo, const Path & _srcPath); | ||||||
|  |  | ||||||
|  | @ -1,6 +1,5 @@ | ||||||
| #include "misc.hh" | #include "misc.hh" | ||||||
| #include "store-api.hh" | #include "store-api.hh" | ||||||
| #include "build.hh" |  | ||||||
| #include "db.hh" | #include "db.hh" | ||||||
| 
 | 
 | ||||||
| #include <aterm2.h> | #include <aterm2.h> | ||||||
|  | @ -12,7 +11,7 @@ namespace nix { | ||||||
| Derivation derivationFromPath(const Path & drvPath) | Derivation derivationFromPath(const Path & drvPath) | ||||||
| { | { | ||||||
|     assertStorePath(drvPath); |     assertStorePath(drvPath); | ||||||
|     ensurePath(drvPath); |     store->ensurePath(drvPath); | ||||||
|     ATerm t = ATreadFromNamedFile(drvPath.c_str()); |     ATerm t = ATreadFromNamedFile(drvPath.c_str()); | ||||||
|     if (!t) throw Error(format("cannot read aterm from `%1%'") % drvPath); |     if (!t) throw Error(format("cannot read aterm from `%1%'") % drvPath); | ||||||
|     return parseDerivation(t); |     return parseDerivation(t); | ||||||
|  |  | ||||||
|  | @ -72,6 +72,19 @@ public: | ||||||
|        a regular file containing the given string. */ |        a regular file containing the given string. */ | ||||||
|     virtual Path addTextToStore(const string & suffix, const string & s, |     virtual Path addTextToStore(const string & suffix, const string & s, | ||||||
|         const PathSet & references) = 0; |         const PathSet & references) = 0; | ||||||
|  | 
 | ||||||
|  |     /* Ensure that the output paths of the derivation are valid.  If
 | ||||||
|  |        they are already valid, this is a no-op.  Otherwise, validity | ||||||
|  |        can be reached in two ways.  First, if the output paths have | ||||||
|  |        substitutes, then those can be used.  Second, the output paths | ||||||
|  |        can be created by running the builder, after recursively | ||||||
|  |        building any sub-derivations. */ | ||||||
|  |     virtual void buildDerivations(const PathSet & drvPaths) = 0; | ||||||
|  | 
 | ||||||
|  |     /* Ensure that a path is valid.  If it is not currently valid, it
 | ||||||
|  |        may be made valid by running a substitute (if defined for the | ||||||
|  |        path). */ | ||||||
|  |     virtual void ensurePath(const Path & storePath) = 0; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,6 @@ | ||||||
| #include "profiles.hh" | #include "profiles.hh" | ||||||
| #include "names.hh" | #include "names.hh" | ||||||
| #include "globals.hh" | #include "globals.hh" | ||||||
| #include "build.hh" |  | ||||||
| #include "misc.hh" | #include "misc.hh" | ||||||
| #include "gc.hh" | #include "gc.hh" | ||||||
| #include "shared.hh" | #include "shared.hh" | ||||||
|  | @ -152,7 +151,7 @@ static void createUserEnv(EvalState & state, const DrvInfos & elems, | ||||||
|             drvsToBuild.insert(i->queryDrvPath(state)); |             drvsToBuild.insert(i->queryDrvPath(state)); | ||||||
| 
 | 
 | ||||||
|     debug(format("building user environment dependencies")); |     debug(format("building user environment dependencies")); | ||||||
|     buildDerivations(drvsToBuild); |     store->buildDerivations(drvsToBuild); | ||||||
| 
 | 
 | ||||||
|     /* Get the environment builder expression. */ |     /* Get the environment builder expression. */ | ||||||
|     Expr envBuilder = parseExprFromFile(state, |     Expr envBuilder = parseExprFromFile(state, | ||||||
|  | @ -184,7 +183,7 @@ static void createUserEnv(EvalState & state, const DrvInfos & elems, | ||||||
|         /* This is only necessary when installing store paths, e.g.,
 |         /* This is only necessary when installing store paths, e.g.,
 | ||||||
|            `nix-env -i /nix/store/abcd...-foo'. */ |            `nix-env -i /nix/store/abcd...-foo'. */ | ||||||
|         addTempRoot(i->queryOutPath(state)); |         addTempRoot(i->queryOutPath(state)); | ||||||
|         ensurePath(i->queryOutPath(state)); |         store->ensurePath(i->queryOutPath(state)); | ||||||
|          |          | ||||||
|         references.insert(i->queryOutPath(state)); |         references.insert(i->queryOutPath(state)); | ||||||
|         if (drvPath != "") references.insert(drvPath); |         if (drvPath != "") references.insert(drvPath); | ||||||
|  | @ -212,7 +211,7 @@ static void createUserEnv(EvalState & state, const DrvInfos & elems, | ||||||
|      |      | ||||||
|     /* Realise the resulting store expression. */ |     /* Realise the resulting store expression. */ | ||||||
|     debug(format("building user environment")); |     debug(format("building user environment")); | ||||||
|     buildDerivations(singleton<PathSet>(topLevelDrv.queryDrvPath(state))); |     store->buildDerivations(singleton<PathSet>(topLevelDrv.queryDrvPath(state))); | ||||||
| 
 | 
 | ||||||
|     /* Switch the current user environment to the output path. */ |     /* Switch the current user environment to the output path. */ | ||||||
|     debug(format("switching to new user environment")); |     debug(format("switching to new user environment")); | ||||||
|  |  | ||||||
|  | @ -2,7 +2,6 @@ | ||||||
| #include <iostream> | #include <iostream> | ||||||
| 
 | 
 | ||||||
| #include "globals.hh" | #include "globals.hh" | ||||||
| #include "build.hh" |  | ||||||
| #include "gc.hh" | #include "gc.hh" | ||||||
| #include "shared.hh" | #include "shared.hh" | ||||||
| #include "eval.hh" | #include "eval.hh" | ||||||
|  |  | ||||||
|  | @ -2,7 +2,6 @@ | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| 
 | 
 | ||||||
| #include "globals.hh" | #include "globals.hh" | ||||||
| #include "build.hh" |  | ||||||
| #include "misc.hh" | #include "misc.hh" | ||||||
| #include "gc.hh" | #include "gc.hh" | ||||||
| #include "archive.hh" | #include "archive.hh" | ||||||
|  | @ -64,7 +63,7 @@ static Path realisePath(const Path & path) | ||||||
|     if (isDerivation(path)) { |     if (isDerivation(path)) { | ||||||
|         PathSet paths; |         PathSet paths; | ||||||
|         paths.insert(path); |         paths.insert(path); | ||||||
|         buildDerivations(paths); |         store->buildDerivations(paths); | ||||||
|         Path outPath = findOutput(derivationFromPath(path), "out"); |         Path outPath = findOutput(derivationFromPath(path), "out"); | ||||||
|          |          | ||||||
|         if (gcRoot == "") |         if (gcRoot == "") | ||||||
|  | @ -76,7 +75,7 @@ static Path realisePath(const Path & path) | ||||||
|          |          | ||||||
|         return outPath; |         return outPath; | ||||||
|     } else { |     } else { | ||||||
|         ensurePath(path); |         store->ensurePath(path); | ||||||
|         return path; |         return path; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -97,7 +96,7 @@ static void opRealise(Strings opFlags, Strings opArgs) | ||||||
|              i != opArgs.end(); ++i) |              i != opArgs.end(); ++i) | ||||||
|             if (isDerivation(*i)) |             if (isDerivation(*i)) | ||||||
|                 drvPaths.insert(*i); |                 drvPaths.insert(*i); | ||||||
|         buildDerivations(drvPaths); |         store->buildDerivations(drvPaths); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     for (Strings::iterator i = opArgs.begin(); |     for (Strings::iterator i = opArgs.begin(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue