nix path-info: Don't barf on invalid paths
Now you get
  [
    {
      "path": "/nix/store/fzvliz4j5xzvnd0w5zgw2l0ksqh578yk-bla",
      "valid": false
    }
  ]
			
			
This commit is contained in:
		
							parent
							
								
									6438ba22af
								
							
						
					
					
						commit
						3908d3929c
					
				
					 3 changed files with 43 additions and 35 deletions
				
			
		|  | @ -455,49 +455,55 @@ string Store::makeValidityRegistration(const PathSet & paths, | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| void Store::pathInfoToJSON(JSONPlaceholder & jsonOut, const PathSet & storePaths, | void Store::pathInfoToJSON(JSONPlaceholder & jsonOut, const PathSet & storePaths, | ||||||
|     bool includeImpureInfo, bool showClosureSize) |     bool includeImpureInfo, bool showClosureSize, AllowInvalidFlag allowInvalid) | ||||||
| { | { | ||||||
|     auto jsonList = jsonOut.list(); |     auto jsonList = jsonOut.list(); | ||||||
| 
 | 
 | ||||||
|     for (auto storePath : storePaths) { |     for (auto storePath : storePaths) { | ||||||
|         auto info = queryPathInfo(storePath); |  | ||||||
|         storePath = info->path; |  | ||||||
| 
 |  | ||||||
|         auto jsonPath = jsonList.object(); |         auto jsonPath = jsonList.object(); | ||||||
|         jsonPath |         jsonPath.attr("path", storePath); | ||||||
|             .attr("path", storePath) |  | ||||||
|             .attr("narHash", info->narHash.to_string()) |  | ||||||
|             .attr("narSize", info->narSize); |  | ||||||
| 
 | 
 | ||||||
|         { |         try { | ||||||
|             auto jsonRefs = jsonPath.list("references"); |             auto info = queryPathInfo(storePath); | ||||||
|             for (auto & ref : info->references) |             storePath = info->path; | ||||||
|                 jsonRefs.elem(ref); |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         if (info->ca != "") |             jsonPath | ||||||
|             jsonPath.attr("ca", info->ca); |                 .attr("narHash", info->narHash.to_string()) | ||||||
|  |                 .attr("narSize", info->narSize); | ||||||
| 
 | 
 | ||||||
|         if (showClosureSize) |             { | ||||||
|             jsonPath.attr("closureSize", getClosureSize(storePath)); |                 auto jsonRefs = jsonPath.list("references"); | ||||||
| 
 |                 for (auto & ref : info->references) | ||||||
|         if (includeImpureInfo) { |                     jsonRefs.elem(ref); | ||||||
| 
 |  | ||||||
|             if (info->deriver != "") |  | ||||||
|                 jsonPath.attr("deriver", info->deriver); |  | ||||||
| 
 |  | ||||||
|             if (info->registrationTime) |  | ||||||
|                 jsonPath.attr("registrationTime", info->registrationTime); |  | ||||||
| 
 |  | ||||||
|             if (info->ultimate) |  | ||||||
|                 jsonPath.attr("ultimate", info->ultimate); |  | ||||||
| 
 |  | ||||||
|             if (!info->sigs.empty()) { |  | ||||||
|                 auto jsonSigs = jsonPath.list("signatures"); |  | ||||||
|                 for (auto & sig : info->sigs) |  | ||||||
|                     jsonSigs.elem(sig); |  | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             if (info->ca != "") | ||||||
|  |                 jsonPath.attr("ca", info->ca); | ||||||
|  | 
 | ||||||
|  |             if (showClosureSize) | ||||||
|  |                 jsonPath.attr("closureSize", getClosureSize(storePath)); | ||||||
|  | 
 | ||||||
|  |             if (includeImpureInfo) { | ||||||
|  | 
 | ||||||
|  |                 if (info->deriver != "") | ||||||
|  |                     jsonPath.attr("deriver", info->deriver); | ||||||
|  | 
 | ||||||
|  |                 if (info->registrationTime) | ||||||
|  |                     jsonPath.attr("registrationTime", info->registrationTime); | ||||||
|  | 
 | ||||||
|  |                 if (info->ultimate) | ||||||
|  |                     jsonPath.attr("ultimate", info->ultimate); | ||||||
|  | 
 | ||||||
|  |                 if (!info->sigs.empty()) { | ||||||
|  |                     auto jsonSigs = jsonPath.list("signatures"); | ||||||
|  |                     for (auto & sig : info->sigs) | ||||||
|  |                         jsonSigs.elem(sig); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |         } catch (InvalidPath &) { | ||||||
|  |             jsonPath.attr("valid", false); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -35,6 +35,7 @@ class JSONPlaceholder; | ||||||
| enum RepairFlag : bool { NoRepair = false, Repair = true }; | enum RepairFlag : bool { NoRepair = false, Repair = true }; | ||||||
| enum CheckSigsFlag : bool { NoCheckSigs = false, CheckSigs = true }; | enum CheckSigsFlag : bool { NoCheckSigs = false, CheckSigs = true }; | ||||||
| enum SubstituteFlag : bool { NoSubstitute = false, Substitute = true }; | enum SubstituteFlag : bool { NoSubstitute = false, Substitute = true }; | ||||||
|  | enum AllowInvalidFlag : bool { DisallowInvalid = false, AllowInvalid = true }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Size of the hash part of store paths, in base-32 characters. */ | /* Size of the hash part of store paths, in base-32 characters. */ | ||||||
|  | @ -488,7 +489,8 @@ public: | ||||||
|        included. If ‘showClosureSize’ is true, the closure size of |        included. If ‘showClosureSize’ is true, the closure size of | ||||||
|        each path is included. */ |        each path is included. */ | ||||||
|     void pathInfoToJSON(JSONPlaceholder & jsonOut, const PathSet & storePaths, |     void pathInfoToJSON(JSONPlaceholder & jsonOut, const PathSet & storePaths, | ||||||
|         bool includeImpureInfo, bool showClosureSize); |         bool includeImpureInfo, bool showClosureSize, | ||||||
|  |         AllowInvalidFlag allowInvalid = DisallowInvalid); | ||||||
| 
 | 
 | ||||||
|     /* Return the size of the closure of the specified path, that is,
 |     /* Return the size of the closure of the specified path, that is,
 | ||||||
|        the sum of the size of the NAR serialisation of each path in |        the sum of the size of the NAR serialisation of each path in | ||||||
|  |  | ||||||
|  | @ -69,7 +69,7 @@ struct CmdPathInfo : StorePathsCommand, MixJSON | ||||||
|             store->pathInfoToJSON(jsonRoot, |             store->pathInfoToJSON(jsonRoot, | ||||||
|                 // FIXME: preserve order?
 |                 // FIXME: preserve order?
 | ||||||
|                 PathSet(storePaths.begin(), storePaths.end()), |                 PathSet(storePaths.begin(), storePaths.end()), | ||||||
|                 true, showClosureSize); |                 true, showClosureSize, AllowInvalid); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         else { |         else { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue