about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-02-15T11·49+0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-02-15T14·01+0100
commitd0893725651a7657eab21ec4aad97146d2294c98 (patch)
tree4ec1213f2f8b7892bbd2c10f83ec0366afef16ec
parent74f954ee6253ce1f934327d6c050fdbdeca8fac2 (diff)
Add function to extract hash part of a store path
-rw-r--r--src/libstore/local-store.cc2
-rw-r--r--src/libstore/store-api.cc9
-rw-r--r--src/libstore/store-api.hh6
3 files changed, 15 insertions, 2 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index 13179459f1c1..7c5945b2aa7e 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -1064,7 +1064,7 @@ StringSet LocalStore::queryDerivationOutputNames(const Path & path)
 
 Path LocalStore::queryPathFromHashPart(const string & hashPart)
 {
-    if (hashPart.size() != 32) throw Error("invalid hash part");
+    if (hashPart.size() != storePathHashLen) throw Error("invalid hash part");
 
     Path prefix = settings.nixStore + "/" + hashPart;
 
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index 039d07e29b3e..2f44401827f0 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -61,7 +61,14 @@ Path followLinksToStorePath(const Path & path)
 string storePathToName(const Path & path)
 {
     assertStorePath(path);
-    return string(path, settings.nixStore.size() + 34);
+    return string(path, settings.nixStore.size() + storePathHashLen + 2);
+}
+
+
+string storePathToHash(const Path & path)
+{
+    assertStorePath(path);
+    return string(path, settings.nixStore.size() + 1, storePathHashLen);
 }
 
 
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index 888ef3e2a083..f6fb6c8347a4 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -339,6 +339,9 @@ public:
 };
 
 
+const size_t storePathHashLen = 32; // base-32 characters, i.e. 160 bits
+
+
 /* !!! These should be part of the store API, I guess. */
 
 /* Throw an exception if `path' is not directly in the Nix store. */
@@ -350,6 +353,9 @@ bool isStorePath(const Path & path);
 /* Extract the name part of the given store path. */
 string storePathToName(const Path & path);
 
+/* Extract the hash part of the given store path. */
+string storePathToHash(const Path & path);
+
 void checkStoreName(const string & name);