diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-04-26 12:56:42 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-04-26 12:56:42 +0000 |
commit | 6199f9b93ee234139906792c8c1b4908a35df146 (patch) | |
tree | f5ce654e0c5b309e5d81b42f75cb5fa51c10ef6e /src/libstore/local-store.cc | |
parent | 2398af13c53217b5de5821bac0f0c44e9081c23d (diff) | |
download | guix-6199f9b93ee234139906792c8c1b4908a35df146.tar.gz |
* Added a command `nix-store --clear-failed-paths <PATHS>' to clear
the "failed" status of the given store paths. The special value `*' clears all failed paths.
Diffstat (limited to 'src/libstore/local-store.cc')
-rw-r--r-- | src/libstore/local-store.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index f93ba36395..633b3599eb 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -329,6 +329,8 @@ void LocalStore::openDB(bool create) "select time from FailedPaths where path = ?;"); stmtQueryFailedPaths.create(db, "select path from FailedPaths;"); + stmtClearFailedPath.create(db, + "delete from FailedPaths where ?1 = '*' or path = ?1;"); stmtAddDerivationOutput.create(db, "insert or replace into DerivationOutputs (drv, id, path) values (?, ?, ?);"); stmtQueryValidDerivers.create(db, @@ -529,6 +531,21 @@ PathSet LocalStore::queryFailedPaths() } +void LocalStore::clearFailedPaths(const PathSet & paths) +{ + SQLiteTxn txn(db); + + foreach (PathSet::const_iterator, i, paths) { + SQLiteStmtUse use(stmtClearFailedPath); + stmtClearFailedPath.bind(*i); + if (sqlite3_step(stmtClearFailedPath) != SQLITE_DONE) + throw SQLiteError(db, format("clearing failed path `%1%' in database") % *i); + } + + txn.commit(); +} + + Hash parseHashField(const Path & path, const string & s) { string::size_type colon = s.find(':'); |