diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2007-08-13 11:37:39 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2007-08-13 11:37:39 +0000 |
commit | 3757ee589f46a401fdacaa2126e6bf4902eee23d (patch) | |
tree | dd9580bf95c8c9e59c7a025e6a8ac76b0dff98b6 /src/libstore | |
parent | 59afc1a15cfb90c333aa7423e46be32cc0635b12 (diff) |
* Bump the Nix database schema version number; delete the substitutes
table.
Diffstat (limited to 'src/libstore')
-rw-r--r-- | src/libstore/local-store.cc | 32 | ||||
-rw-r--r-- | src/libstore/local-store.hh | 6 |
2 files changed, 33 insertions, 5 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index bffefbaa7..4378f0ba6 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -58,6 +58,7 @@ static TableId dbDerivers = 0; static void upgradeStore07(); static void upgradeStore09(); +static void upgradeStore11(); void checkStoreNotSymlink() @@ -131,6 +132,8 @@ LocalStore::LocalStore(bool reserveSpace) upgradeStore07(); if (curSchema == 2) upgradeStore09(); + if (curSchema == 3) + upgradeStore11(); writeFile(schemaFN, (format("%1%") % nixSchemaVersion).str()); } } @@ -1042,10 +1045,10 @@ static void upgradeStore09() { /* !!! we should disallow concurrent upgrades */ - printMsg(lvlError, "upgrading Nix store to new schema (this may take a while)..."); - if (!pathExists(nixDBPath + "/referers")) return; + printMsg(lvlError, "upgrading Nix store to new schema (this may take a while)..."); + Transaction txn(nixDB); std::cerr << "converting referers to referrers..."; @@ -1082,4 +1085,29 @@ static void upgradeStore09() } +/* Upgrade from schema 3 (Nix 0.10) to schema 4 (Nix >= 0.11). The + only thing to do here is to delete the substitutes table and get + rid of invalid but substitutable references/referrers. */ +static void upgradeStore11() +{ + if (!pathExists(nixDBPath + "/substitutes")) return; + + printMsg(lvlError, "upgrading Nix store to new schema (this may take a while)..."); + + Transaction txn(nixDB); + TableId dbSubstitutes = nixDB.openTable("substitutes"); + + Paths subKeys; + nixDB.enumTable(txn, dbSubstitutes, subKeys); + for (Paths::iterator i = subKeys.begin(); i != subKeys.end(); ++i) { + if (!isValidPathTxn(txn, *i)) + invalidatePath(txn, *i); + } + + txn.commit(); + nixDB.closeTable(dbSubstitutes); + nixDB.deleteTable("substitutes"); +} + + } diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh index ffcef6071..8bd37bc0a 100644 --- a/src/libstore/local-store.hh +++ b/src/libstore/local-store.hh @@ -13,9 +13,9 @@ class Transaction; /* Nix store and database schema version. Version 1 (or 0) was Nix <= - 0.7. Version 2 was Nix 0.8 and 0.9. Version 3 is Nix 0.10 and - up. */ -const int nixSchemaVersion = 3; + 0.7. Version 2 was Nix 0.8 and 0.9. Version 3 is Nix 0.10. + Version 4 is Nix 0.11. */ +const int nixSchemaVersion = 4; extern string drvsLogDir; |