diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libstore/build.cc | 3 | ||||
-rw-r--r-- | src/libstore/store.cc | 17 | ||||
-rw-r--r-- | src/libstore/store.hh | 5 | ||||
-rw-r--r-- | src/nix-store/main.cc | 1 |
4 files changed, 19 insertions, 7 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 3785c7da7924..e71201785e1d 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -1502,7 +1502,8 @@ void SubstitutionGoal::finished() Transaction txn; createStoreTransaction(txn); - registerValidPath(txn, storePath, contentHash, references, ""); + registerValidPath(txn, storePath, contentHash, + references, sub.deriver); txn.commit(); outputLock->setDeletion(true); diff --git a/src/libstore/store.cc b/src/libstore/store.cc index 83577e4fb744..5516dc8016c1 100644 --- a/src/libstore/store.cc +++ b/src/libstore/store.cc @@ -391,6 +391,9 @@ Path queryDeriver(const Transaction & txn, const Path & storePath) } +const int substituteVersion = 2; + + static Substitutes readSubstitutes(const Transaction & txn, const Path & srcPath) { @@ -406,13 +409,15 @@ static Substitutes readSubstitutes(const Transaction & txn, break; } Strings ss2 = unpackStrings(*i); - if (ss2.size() == 3) { - /* Another old-style substitute. */ - continue; - } - if (ss2.size() != 2) throw Error("malformed substitute"); + if (ss2.size() == 0) continue; + int version; + if (!string2Int(ss2.front(), version)) continue; + if (version != substituteVersion) continue; + if (ss2.size() != 4) throw Error("malformed substitute"); Strings::iterator j = ss2.begin(); + j++; Substitute sub; + sub.deriver = *j++; sub.program = *j++; sub.args = unpackStrings(*j++); subs.push_back(sub); @@ -431,6 +436,8 @@ static void writeSubstitutes(const Transaction & txn, i != subs.end(); ++i) { Strings ss2; + ss2.push_back((format("%1%") % substituteVersion).str()); + ss2.push_back(i->deriver); ss2.push_back(i->program); ss2.push_back(packStrings(i->args)); ss.push_back(packStrings(ss2)); diff --git a/src/libstore/store.hh b/src/libstore/store.hh index 082fc9de498d..3b18664de646 100644 --- a/src/libstore/store.hh +++ b/src/libstore/store.hh @@ -16,7 +16,10 @@ const int nixSchemaVersion = 2; path (typically by fetching it from somewhere, e.g., from the network). */ struct Substitute -{ +{ + /* The derivation that built this store path (empty if none). */ + Path deriver; + /* Program to be executed to create the store path. Must be in the output path of `storeExpr'. */ Path program; diff --git a/src/nix-store/main.cc b/src/nix-store/main.cc index a124543fb230..fa7960c382dc 100644 --- a/src/nix-store/main.cc +++ b/src/nix-store/main.cc @@ -280,6 +280,7 @@ static void opSubstitute(Strings opFlags, Strings opArgs) PathSet references; getline(cin, srcPath); if (cin.eof()) break; + getline(cin, sub.deriver); getline(cin, sub.program); string s; int n; |