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, | ||||
|     bool includeImpureInfo, bool showClosureSize) | ||||
|     bool includeImpureInfo, bool showClosureSize, AllowInvalidFlag allowInvalid) | ||||
| { | ||||
|     auto jsonList = jsonOut.list(); | ||||
| 
 | ||||
|     for (auto storePath : storePaths) { | ||||
|         auto info = queryPathInfo(storePath); | ||||
|         storePath = info->path; | ||||
| 
 | ||||
|         auto jsonPath = jsonList.object(); | ||||
|         jsonPath | ||||
|             .attr("path", storePath) | ||||
|             .attr("narHash", info->narHash.to_string()) | ||||
|             .attr("narSize", info->narSize); | ||||
|         jsonPath.attr("path", storePath); | ||||
| 
 | ||||
|         { | ||||
|             auto jsonRefs = jsonPath.list("references"); | ||||
|             for (auto & ref : info->references) | ||||
|                 jsonRefs.elem(ref); | ||||
|         } | ||||
|         try { | ||||
|             auto info = queryPathInfo(storePath); | ||||
|             storePath = info->path; | ||||
| 
 | ||||
|         if (info->ca != "") | ||||
|             jsonPath.attr("ca", info->ca); | ||||
|             jsonPath | ||||
|                 .attr("narHash", info->narHash.to_string()) | ||||
|                 .attr("narSize", info->narSize); | ||||
| 
 | ||||
|         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); | ||||
|             { | ||||
|                 auto jsonRefs = jsonPath.list("references"); | ||||
|                 for (auto & ref : info->references) | ||||
|                     jsonRefs.elem(ref); | ||||
|             } | ||||
| 
 | ||||
|             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 CheckSigsFlag : bool { NoCheckSigs = false, CheckSigs = 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. */ | ||||
|  | @ -488,7 +489,8 @@ public: | |||
|        included. If ‘showClosureSize’ is true, the closure size of | ||||
|        each path is included. */ | ||||
|     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,
 | ||||
|        the sum of the size of the NAR serialisation of each path in | ||||
|  |  | |||
|  | @ -69,7 +69,7 @@ struct CmdPathInfo : StorePathsCommand, MixJSON | |||
|             store->pathInfoToJSON(jsonRoot, | ||||
|                 // FIXME: preserve order?
 | ||||
|                 PathSet(storePaths.begin(), storePaths.end()), | ||||
|                 true, showClosureSize); | ||||
|                 true, showClosureSize, AllowInvalid); | ||||
|         } | ||||
| 
 | ||||
|         else { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue