1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-29 06:21:14 +02:00

If a .drv cannot be parsed, show its path

Otherwise you just get ‘expected string `Derive(['’ which isn't very helpful.
This commit is contained in:
Eelco Dolstra 2014-04-08 19:24:29 +02:00
parent e0a947cde6
commit dfa2f77d2e
7 changed files with 22 additions and 10 deletions

View file

@ -48,7 +48,7 @@ static Path parsePath(std::istream & str)
{
string s = parseString(str);
if (s.size() == 0 || s[0] != '/')
throw Error(format("bad path `%1%' in derivation") % s);
throw FormatError(format("bad path `%1%' in derivation") % s);
return s;
}
@ -62,7 +62,7 @@ static StringSet parseStrings(std::istream & str, bool arePaths)
}
Derivation parseDerivation(const string & s)
static Derivation parseDerivation(const string & s)
{
Derivation drv;
std::istringstream str(s);
@ -112,6 +112,16 @@ Derivation parseDerivation(const string & s)
}
Derivation readDerivation(const Path & drvPath)
{
try {
return parseDerivation(readFile(drvPath));
} catch (FormatError & e) {
throw Error(format("error parsing derivation `%1%': %2%") % drvPath % e.msg());
}
}
static void printString(string & res, const string & s)
{
res += '"';
@ -240,7 +250,7 @@ Hash hashDerivationModulo(StoreAPI & store, Derivation drv)
Hash h = drvHashes[i->first];
if (h.type == htUnknown) {
assert(store.isValidPath(i->first));
Derivation drv2 = parseDerivation(readFile(i->first));
Derivation drv2 = readDerivation(i->first);
h = hashDerivationModulo(store, drv2);
drvHashes[i->first] = h;
}