aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraham Christensen <graham@grahamc.com>2019-06-27 14:21:22 -0400
committerGraham Christensen <graham@grahamc.com>2019-07-02 08:41:53 -0400
commit17d3ec3405eb114f89dc42d065afa887161f6149 (patch)
tree733c08fd098e457488895ca8dc0a5383ad5256ea
parent324a5dc92f8e50e6b637c5e67dea48c80be10837 (diff)
checkStoreName: give more precise/verbose error information
$ sudo ./inst/bin/nix-instantiate -E '"${./.git}"' error: The path name '.git' is invalid: it is illegal to start the name with a period. Path names are alphanumeric and can include the symbols +-._?= and must not begin with a period. Note: If '.git' is a source file and you cannot rename it on disk, builtins.path { name = ... } can be used to give it an alternative name.
-rw-r--r--src/libstore/store-api.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index 28ad7c019..92f01fd2e 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -86,18 +86,25 @@ string storePathToHash(const Path & path)
void checkStoreName(const string & name)
{
string validChars = "+-._?=";
+
+ auto baseError = format("The path name '%2%' is invalid: %3%. "
+ "Path names are alphanumeric and can include the symbols %1% "
+ "and must not begin with a period. "
+ "Note: If '%2%' is a source file and you cannot rename it on "
+ "disk, builtins.path { name = ... } can be used to give it an "
+ "alternative name.") % validChars % name;
+
/* Disallow names starting with a dot for possible security
reasons (e.g., "." and ".."). */
if (string(name, 0, 1) == ".")
- throw Error(format("illegal name: '%1%'") % name);
+ throw Error(baseError % "it is illegal to start the name with a period");
for (auto & i : name)
if (!((i >= 'A' && i <= 'Z') ||
(i >= 'a' && i <= 'z') ||
(i >= '0' && i <= '9') ||
validChars.find(i) != string::npos))
{
- throw Error(format("invalid character '%1%' in name '%2%'")
- % i % name);
+ throw Error(baseError % (format("the '%1%' character is invalid") % i));
}
}