* Some more diagnostics changes.
This commit is contained in:
		
							parent
							
								
									d051cd40e1
								
							
						
					
					
						commit
						05a5362d63
					
				
					 2 changed files with 41 additions and 25 deletions
				
			
		|  | @ -172,7 +172,7 @@ void Goal::waiteeDone() | ||||||
| 
 | 
 | ||||||
| void Goal::amDone() | void Goal::amDone() | ||||||
| { | { | ||||||
|     debug("done"); |     printMsg(lvlVomit, "done"); | ||||||
|     for (Goals::iterator i = waiters.begin(); i != waiters.end(); ++i) |     for (Goals::iterator i = waiters.begin(); i != waiters.end(); ++i) | ||||||
|         (*i)->waiteeDone(); |         (*i)->waiteeDone(); | ||||||
|     worker.removeGoal(shared_from_this()); |     worker.removeGoal(shared_from_this()); | ||||||
|  | @ -1099,6 +1099,8 @@ public: | ||||||
|     void init(); |     void init(); | ||||||
|     void haveStoreExpr(); |     void haveStoreExpr(); | ||||||
|     void elemFinished(); |     void elemFinished(); | ||||||
|  | 
 | ||||||
|  |     void trace(const format & f); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -1123,7 +1125,7 @@ void RealisationGoal::work() | ||||||
| 
 | 
 | ||||||
| void RealisationGoal::init() | void RealisationGoal::init() | ||||||
| { | { | ||||||
|     debug(format("init of realisation `%1%'") % nePath); |     trace("init"); | ||||||
| 
 | 
 | ||||||
|     /* The first thing to do is to make sure that the store expression
 |     /* The first thing to do is to make sure that the store expression
 | ||||||
|        exists.  If it doesn't, it may be created through a |        exists.  If it doesn't, it may be created through a | ||||||
|  | @ -1137,7 +1139,7 @@ void RealisationGoal::init() | ||||||
| 
 | 
 | ||||||
| void RealisationGoal::haveStoreExpr() | void RealisationGoal::haveStoreExpr() | ||||||
| { | { | ||||||
|     debug(format("loading store expr `%1%'") % nePath); |     trace("loading store expression"); | ||||||
| 
 | 
 | ||||||
|     assert(isValidPath(nePath)); |     assert(isValidPath(nePath)); | ||||||
| 
 | 
 | ||||||
|  | @ -1162,12 +1164,18 @@ void RealisationGoal::haveStoreExpr() | ||||||
| 
 | 
 | ||||||
| void RealisationGoal::elemFinished() | void RealisationGoal::elemFinished() | ||||||
| { | { | ||||||
|     debug(format("all closure elements finished of `%1%'") % nePath); |     trace("all closure elements present"); | ||||||
| 
 | 
 | ||||||
|     amDone(); |     amDone(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | void RealisationGoal::trace(const format & f) | ||||||
|  | { | ||||||
|  |     debug(format("realisation of `%1%': %2%") % nePath % f); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| //////////////////////////////////////////////////////////////////////
 | //////////////////////////////////////////////////////////////////////
 | ||||||
| 
 | 
 | ||||||
|  | @ -1211,6 +1219,8 @@ public: | ||||||
|     void exprRealised(); |     void exprRealised(); | ||||||
|     void tryToRun(); |     void tryToRun(); | ||||||
|     void finished(); |     void finished(); | ||||||
|  | 
 | ||||||
|  |     void trace(const format & f); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -1230,7 +1240,7 @@ void SubstitutionGoal::work() | ||||||
| 
 | 
 | ||||||
| void SubstitutionGoal::init() | void SubstitutionGoal::init() | ||||||
| { | { | ||||||
|     debug(format("init of subst `%1%'") % storePath); |     trace("init"); | ||||||
| 
 | 
 | ||||||
|     /* If the path already exists we're done. */ |     /* If the path already exists we're done. */ | ||||||
|     if (isValidPath(storePath)) { |     if (isValidPath(storePath)) { | ||||||
|  | @ -1248,7 +1258,7 @@ void SubstitutionGoal::init() | ||||||
| 
 | 
 | ||||||
| void SubstitutionGoal::tryNext() | void SubstitutionGoal::tryNext() | ||||||
| { | { | ||||||
|     debug(format("trying next substitute of `%1%'") % storePath); |     trace("trying next substitute"); | ||||||
| 
 | 
 | ||||||
|     if (subs.size() == 0) throw Error( |     if (subs.size() == 0) throw Error( | ||||||
|         format("path `%1%' is required, but it has no (remaining) substitutes") |         format("path `%1%' is required, but it has no (remaining) substitutes") | ||||||
|  | @ -1266,7 +1276,7 @@ void SubstitutionGoal::tryNext() | ||||||
| 
 | 
 | ||||||
| void SubstitutionGoal::exprNormalised() | void SubstitutionGoal::exprNormalised() | ||||||
| { | { | ||||||
|     debug(format("store expr normalised of `%1%'") % storePath); |     trace("substitute store expression normalised"); | ||||||
| 
 | 
 | ||||||
|     /* Realise the substitute store expression. */ |     /* Realise the substitute store expression. */ | ||||||
|     if (!querySuccessor(sub.storeExpr, nfSub)) |     if (!querySuccessor(sub.storeExpr, nfSub)) | ||||||
|  | @ -1280,7 +1290,7 @@ void SubstitutionGoal::exprNormalised() | ||||||
| 
 | 
 | ||||||
| void SubstitutionGoal::exprRealised() | void SubstitutionGoal::exprRealised() | ||||||
| { | { | ||||||
|     debug(format("store expr realised of `%1%'") % storePath); |     trace("substitute store expression realised"); | ||||||
| 
 | 
 | ||||||
|     state = &SubstitutionGoal::tryToRun; |     state = &SubstitutionGoal::tryToRun; | ||||||
|     worker.waitForBuildSlot(shared_from_this()); |     worker.waitForBuildSlot(shared_from_this()); | ||||||
|  | @ -1289,23 +1299,14 @@ void SubstitutionGoal::exprRealised() | ||||||
| 
 | 
 | ||||||
| void SubstitutionGoal::tryToRun() | void SubstitutionGoal::tryToRun() | ||||||
| { | { | ||||||
|  |     trace("trying to run"); | ||||||
|  | 
 | ||||||
|     /* Make sure that we are allowed to start a build. */ |     /* Make sure that we are allowed to start a build. */ | ||||||
|     if (!worker.canBuildMore()) { |     if (!worker.canBuildMore()) { | ||||||
|         worker.waitForBuildSlot(shared_from_this()); |         worker.waitForBuildSlot(shared_from_this()); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /* What's the substitute program? */ |  | ||||||
|     StoreExpr expr = storeExprFromPath(nfSub); |  | ||||||
|     assert(expr.type == StoreExpr::neClosure); |  | ||||||
|     assert(!expr.closure.roots.empty()); |  | ||||||
|     Path program = |  | ||||||
|         canonPath(*expr.closure.roots.begin() + "/" + sub.program); |  | ||||||
| 
 |  | ||||||
|     printMsg(lvlChatty, format("executing substitute `%1%'") % program); |  | ||||||
| 
 |  | ||||||
|     logPipe.create(); |  | ||||||
| 
 |  | ||||||
|     /* Acquire a lock on the output path. */ |     /* Acquire a lock on the output path. */ | ||||||
|     PathSet lockPath; |     PathSet lockPath; | ||||||
|     lockPath.insert(storePath); |     lockPath.insert(storePath); | ||||||
|  | @ -1319,13 +1320,22 @@ void SubstitutionGoal::tryToRun() | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     startNest(nest, lvlInfo, | ||||||
|  |         format("substituting path `%1%'") % storePath); | ||||||
|  |      | ||||||
|  |     /* What's the substitute program? */ | ||||||
|  |     StoreExpr expr = storeExprFromPath(nfSub); | ||||||
|  |     assert(expr.type == StoreExpr::neClosure); | ||||||
|  |     assert(!expr.closure.roots.empty()); | ||||||
|  |     Path program = | ||||||
|  |         canonPath(*expr.closure.roots.begin() + "/" + sub.program); | ||||||
|  | 
 | ||||||
|  |     logPipe.create(); | ||||||
|  | 
 | ||||||
|     /* Remove the (stale) output path if it exists. */ |     /* Remove the (stale) output path if it exists. */ | ||||||
|     if (pathExists(storePath)) |     if (pathExists(storePath)) | ||||||
|         deletePath(storePath); |         deletePath(storePath); | ||||||
| 
 | 
 | ||||||
|     startNest(nest, lvlInfo, |  | ||||||
|         format("substituting path `%1%'") % storePath); |  | ||||||
|      |  | ||||||
|     /* Fork the substitute program. */ |     /* Fork the substitute program. */ | ||||||
|     pid = fork(); |     pid = fork(); | ||||||
|     switch (pid) { |     switch (pid) { | ||||||
|  | @ -1370,7 +1380,7 @@ void SubstitutionGoal::tryToRun() | ||||||
| 
 | 
 | ||||||
| void SubstitutionGoal::finished() | void SubstitutionGoal::finished() | ||||||
| { | { | ||||||
|     debug(format("substitute finished of `%1%'") % storePath); |     trace("substitute finished"); | ||||||
| 
 | 
 | ||||||
|     /* Since we got an EOF on the logger pipe, the substitute is
 |     /* Since we got an EOF on the logger pipe, the substitute is
 | ||||||
|        presumed to have terminated.  */ |        presumed to have terminated.  */ | ||||||
|  | @ -1405,6 +1415,12 @@ void SubstitutionGoal::finished() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | void SubstitutionGoal::trace(const format & f) | ||||||
|  | { | ||||||
|  |     debug(format("substitution of `%1%': %2%") % nePath % f); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| //////////////////////////////////////////////////////////////////////
 | //////////////////////////////////////////////////////////////////////
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -604,9 +604,9 @@ string statusToString(int status) | ||||||
| { | { | ||||||
|     if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { |     if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { | ||||||
|         if (WIFEXITED(status)) |         if (WIFEXITED(status)) | ||||||
|             return (format("failed with exit code %2%") % WEXITSTATUS(status)).str(); |             return (format("failed with exit code %1%") % WEXITSTATUS(status)).str(); | ||||||
|         else if (WIFSIGNALED(status)) |         else if (WIFSIGNALED(status)) | ||||||
|             return (format("failed due to signal %2%") % WTERMSIG(status)).str(); |             return (format("failed due to signal %1%") % WTERMSIG(status)).str(); | ||||||
|         else |         else | ||||||
|             return "died abnormally"; |             return "died abnormally"; | ||||||
|     } else return "succeeded"; |     } else return "succeeded"; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue