* `nix-store -q --hash' to quickly query the hash of the contents of a
store path (which is stored in the database).
This commit is contained in:
		
							parent
							
								
									9e50e648a4
								
							
						
					
					
						commit
						07b4399fb6
					
				
					 3 changed files with 28 additions and 6 deletions
				
			
		|  | @ -509,6 +509,14 @@ static Hash queryHash(const Transaction & txn, const Path & storePath) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| Hash queryPathHash(const Path & path) | ||||
| { | ||||
|     if (!isValidPath(path)) | ||||
|         throw Error(format("path `%1%' is not valid") % path); | ||||
|     return queryHash(noTxn, path); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void registerValidPath(const Transaction & txn, | ||||
|     const Path & _path, const Hash & hash, const PathSet & references, | ||||
|     const Path & deriver) | ||||
|  |  | |||
|  | @ -89,6 +89,9 @@ void canonicalisePathMetaData(const Path & path); | |||
| /* Checks whether a path is valid. */  | ||||
| bool isValidPath(const Path & path); | ||||
| 
 | ||||
| /* Queries the hash of a valid path. */  | ||||
| Hash queryPathHash(const Path & path); | ||||
| 
 | ||||
| /* Sets the set of outgoing FS references for a store path.  Use with
 | ||||
|    care! */ | ||||
| void setReferences(const Transaction & txn, const Path & storePath, | ||||
|  |  | |||
|  | @ -228,8 +228,9 @@ static void printDrvTree(const Path & drvPath, | |||
| /* Perform various sorts of queries. */ | ||||
| static void opQuery(Strings opFlags, Strings opArgs) | ||||
| { | ||||
|     enum { qOutputs, qRequisites, qReferences, qReferers, | ||||
|            qReferersClosure, qDeriver, qBinding, qTree, qGraph } query = qOutputs; | ||||
|     enum { qOutputs, qRequisites, qReferences, qReferers | ||||
|          , qReferersClosure, qDeriver, qBinding, qHash | ||||
|          , qTree, qGraph } query = qOutputs; | ||||
|     bool useOutput = false; | ||||
|     bool includeOutputs = false; | ||||
|     bool forceRealise = false; | ||||
|  | @ -250,6 +251,7 @@ static void opQuery(Strings opFlags, Strings opArgs) | |||
|             opArgs.pop_front(); | ||||
|             query = qBinding; | ||||
|         } | ||||
|         else if (*i == "--hash") query = qHash; | ||||
|         else if (*i == "--tree") query = qTree; | ||||
|         else if (*i == "--graph") query = qGraph; | ||||
|         else if (*i == "--use-output" || *i == "-u") useOutput = true; | ||||
|  | @ -279,8 +281,7 @@ static void opQuery(Strings opFlags, Strings opArgs) | |||
|             for (Strings::iterator i = opArgs.begin(); | ||||
|                  i != opArgs.end(); i++) | ||||
|             { | ||||
|                 *i = fixPath(*i); | ||||
|                 Path path = maybeUseOutput(*i, useOutput, forceRealise); | ||||
|                 Path path = maybeUseOutput(fixPath(*i), useOutput, forceRealise); | ||||
|                 if (query == qRequisites) | ||||
|                     storePathRequisites(path, includeOutputs, paths); | ||||
|                 else if (query == qReferences) queryReferences(noTxn, path, paths); | ||||
|  | @ -295,8 +296,7 @@ static void opQuery(Strings opFlags, Strings opArgs) | |||
|             for (Strings::iterator i = opArgs.begin(); | ||||
|                  i != opArgs.end(); i++) | ||||
|             { | ||||
|                 *i = fixPath(*i); | ||||
|                 Path deriver = queryDeriver(noTxn, *i); | ||||
|                 Path deriver = queryDeriver(noTxn, fixPath(*i)); | ||||
|                 cout << format("%1%\n") % | ||||
|                     (deriver == "" ? "unknown-deriver" : deriver); | ||||
|             } | ||||
|  | @ -316,6 +316,17 @@ static void opQuery(Strings opFlags, Strings opArgs) | |||
|             } | ||||
|             break; | ||||
| 
 | ||||
|         case qHash: | ||||
|             for (Strings::iterator i = opArgs.begin(); | ||||
|                  i != opArgs.end(); i++) | ||||
|             { | ||||
|                 Path path = maybeUseOutput(fixPath(*i), useOutput, forceRealise); | ||||
|                 Hash hash = queryPathHash(path); | ||||
|                 assert(hash.type == htSHA256); | ||||
|                 cout << format("sha256:%1%\n") % printHash32(hash); | ||||
|             } | ||||
|             break; | ||||
| 
 | ||||
|         case qTree: { | ||||
|             PathSet done; | ||||
|             for (Strings::iterator i = opArgs.begin(); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue