diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-02-15 12:49:01 +0100 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-02-15 15:01:26 +0100 |
commit | d0893725651a7657eab21ec4aad97146d2294c98 (patch) | |
tree | 4ec1213f2f8b7892bbd2c10f83ec0366afef16ec /src | |
parent | 74f954ee6253ce1f934327d6c050fdbdeca8fac2 (diff) |
Add function to extract hash part of a store path
Diffstat (limited to 'src')
-rw-r--r-- | src/libstore/local-store.cc | 2 | ||||
-rw-r--r-- | src/libstore/store-api.cc | 9 | ||||
-rw-r--r-- | src/libstore/store-api.hh | 6 |
3 files changed, 15 insertions, 2 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 13179459f..7c5945b2a 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 039d07e29..2f4440182 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 888ef3e2a..f6fb6c834 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); |