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:
parent
e0a947cde6
commit
dfa2f77d2e
7 changed files with 22 additions and 10 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue