forked from lix-project/lix
Add a ‘verifyStore’ RPC
Hello! The patch below adds a ‘verifyStore’ RPC with the same signature as the current LocalStore::verifyStore method. Thanks, Ludo’. >From aef46c03ca77eb6344f4892672eb6d9d06432041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org> Date: Mon, 1 Jun 2015 23:17:10 +0200 Subject: [PATCH] Add a 'verifyStore' remote procedure call.
This commit is contained in:
parent
53dd97bb9d
commit
b755752f76
|
@ -587,6 +587,16 @@ void RemoteStore::optimiseStore()
|
|||
readInt(from);
|
||||
}
|
||||
|
||||
bool RemoteStore::verifyStore(bool checkContents, bool repair)
|
||||
{
|
||||
openConnection();
|
||||
writeInt(wopVerifyStore, to);
|
||||
writeInt(checkContents, to);
|
||||
writeInt(repair, to);
|
||||
processStderr();
|
||||
return readInt(from) != 0;
|
||||
}
|
||||
|
||||
void RemoteStore::processStderr(Sink * sink, Source * source)
|
||||
{
|
||||
to.flush();
|
||||
|
|
|
@ -85,6 +85,7 @@ public:
|
|||
|
||||
void optimiseStore();
|
||||
|
||||
bool verifyStore(bool checkContents, bool repair);
|
||||
private:
|
||||
AutoCloseFD fdSocket;
|
||||
FdSink to;
|
||||
|
|
|
@ -254,6 +254,10 @@ public:
|
|||
/* Optimise the disk space usage of the Nix store by hard-linking files
|
||||
with the same contents. */
|
||||
virtual void optimiseStore() = 0;
|
||||
|
||||
/* Check the integrity of the Nix store. Returns true if errors
|
||||
remain. */
|
||||
virtual bool verifyStore(bool checkContents, bool repair) = 0;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -42,7 +42,8 @@ typedef enum {
|
|||
wopQueryValidPaths = 31,
|
||||
wopQuerySubstitutablePaths = 32,
|
||||
wopQueryValidDerivers = 33,
|
||||
wopOptimiseStore = 34
|
||||
wopOptimiseStore = 34,
|
||||
wopVerifyStore = 35
|
||||
} WorkerOp;
|
||||
|
||||
|
||||
|
|
|
@ -519,6 +519,16 @@ static void performOp(bool trusted, unsigned int clientVersion,
|
|||
writeInt(1, to);
|
||||
break;
|
||||
|
||||
case wopVerifyStore: {
|
||||
bool checkContents = readInt(from) != 0;
|
||||
bool repair = readInt(from) != 0;
|
||||
startWork();
|
||||
bool errors = store->verifyStore(checkContents, repair);
|
||||
stopWork();
|
||||
writeInt(errors, to);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
throw Error(format("invalid operation %1%") % op);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue