Merge pull request #2305 from lheckemann/copy-keep-going
copyPathsToStore: honour keep-going
This commit is contained in:
		
						commit
						f602ff264b
					
				
					 1 changed files with 12 additions and 2 deletions
				
			
		|  | @ -629,11 +629,12 @@ void copyPaths(ref<Store> srcStore, ref<Store> dstStore, const PathSet & storePa | ||||||
|     Activity act(*logger, lvlInfo, actCopyPaths, fmt("copying %d paths", missing.size())); |     Activity act(*logger, lvlInfo, actCopyPaths, fmt("copying %d paths", missing.size())); | ||||||
| 
 | 
 | ||||||
|     std::atomic<size_t> nrDone{0}; |     std::atomic<size_t> nrDone{0}; | ||||||
|  |     std::atomic<size_t> nrFailed{0}; | ||||||
|     std::atomic<uint64_t> bytesExpected{0}; |     std::atomic<uint64_t> bytesExpected{0}; | ||||||
|     std::atomic<uint64_t> nrRunning{0}; |     std::atomic<uint64_t> nrRunning{0}; | ||||||
| 
 | 
 | ||||||
|     auto showProgress = [&]() { |     auto showProgress = [&]() { | ||||||
|         act.progress(nrDone, missing.size(), nrRunning); |         act.progress(nrDone, missing.size(), nrRunning, nrFailed); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     ThreadPool pool; |     ThreadPool pool; | ||||||
|  | @ -662,7 +663,16 @@ void copyPaths(ref<Store> srcStore, ref<Store> dstStore, const PathSet & storePa | ||||||
|             if (!dstStore->isValidPath(storePath)) { |             if (!dstStore->isValidPath(storePath)) { | ||||||
|                 MaintainCount<decltype(nrRunning)> mc(nrRunning); |                 MaintainCount<decltype(nrRunning)> mc(nrRunning); | ||||||
|                 showProgress(); |                 showProgress(); | ||||||
|  |                 try { | ||||||
|                     copyStorePath(srcStore, dstStore, storePath, repair, checkSigs); |                     copyStorePath(srcStore, dstStore, storePath, repair, checkSigs); | ||||||
|  |                 } catch (Error &e) { | ||||||
|  |                     nrFailed++; | ||||||
|  |                     if (!settings.keepGoing) | ||||||
|  |                         throw e; | ||||||
|  |                     logger->log(lvlError, format("could not copy %s: %s") % storePath % e.what()); | ||||||
|  |                     showProgress(); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             nrDone++; |             nrDone++; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue