diff options
author | Shea Levy <shea@shealevy.com> | 2018-03-09 17:21:12 -0500 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2018-03-09 17:21:31 -0500 |
commit | b66d7dc0ce684197181a2a8ec0859470137507aa (patch) | |
tree | 5c2f9e4eb8f750dc7f6611ac8d30fe9da06bdd90 /lib | |
parent | d3570a1e219b6aad2447e5e4eb4830369637ce55 (diff) |
lib.isStorePath: Fix derivation detection
Diffstat (limited to 'lib')
-rw-r--r-- | lib/strings.nix | 9 | ||||
-rw-r--r-- | lib/tests/misc.nix | 2 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/strings.nix b/lib/strings.nix index 9cbd1494a2b50..e6df7d99cb2e1 100644 --- a/lib/strings.nix +++ b/lib/strings.nix @@ -437,6 +437,13 @@ rec { */ fixedWidthNumber = width: n: fixedWidthString width "0" (toString n); + /* Check whether a value can be coerced to a string */ + isCoercibleToString = x: + builtins.elem (builtins.typeOf x) [ "path" "string" "null" "int" "float" "bool" ] || + (builtins.isList x && lib.all isCoercibleToString x) || + x ? outPath || + x ? __toString; + /* Check whether a value is a store path. Example: @@ -450,7 +457,7 @@ rec { => false */ isStorePath = x: - builtins.isString x + isCoercibleToString x && builtins.substring 0 1 (toString x) == "/" && dirOf (builtins.toPath x) == builtins.storeDir; diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index 1657ec33a46ce..e10aea48e48e7 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -93,6 +93,7 @@ runTests { "${builtins.storeDir}/d945ibfx9x185xf04b890y4f9g3cbb63-python-2.7.11"; in { storePath = isStorePath goodPath; + storePathDerivation = isStorePath (import ../.. {}).hello; storePathAppendix = isStorePath "${goodPath}/bin/python"; nonAbsolute = isStorePath (concatStrings (tail (stringToCharacters goodPath))); @@ -106,6 +107,7 @@ runTests { }; expected = { storePath = true; + storePathDerivation = true; storePathAppendix = false; nonAbsolute = false; asPath = true; |