forked from lix-project/lix
1aa19b24b2
The flag ‘--check’ to ‘nix-store -r’ or ‘nix-build’ will cause Nix to redo the build of a derivation whose output paths are already valid. If the new output differs from the original output, an error is printed. This makes it easier to test if a build is deterministic. (Obviously this cannot catch all sources of non-determinism, but it catches the most common one, namely the current time.) For example: $ nix-build '<nixpkgs>' -A patchelf ... $ nix-build '<nixpkgs>' -A patchelf --check error: derivation `/nix/store/1ipvxsdnbhl1rw6siz6x92s7sc8nwkkb-patchelf-0.6' may not be deterministic: hash mismatch in output `/nix/store/4pc1dmw5xkwmc6q3gdc9i5nbjl4dkjpp-patchelf-0.6.drv' The --check build fails if not all outputs are valid. Thus the first call to nix-build is necessary to ensure that all outputs are valid. The current outputs are left untouched: the new outputs are either put in a chroot or diverted to a different location in the store using hash rewriting.
105 lines
2.2 KiB
C++
105 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
|
|
#include "store-api.hh"
|
|
|
|
|
|
namespace nix {
|
|
|
|
|
|
class Pipe;
|
|
class Pid;
|
|
struct FdSink;
|
|
struct FdSource;
|
|
|
|
|
|
class RemoteStore : public StoreAPI
|
|
{
|
|
public:
|
|
|
|
RemoteStore();
|
|
|
|
~RemoteStore();
|
|
|
|
/* Implementations of abstract store API methods. */
|
|
|
|
bool isValidPath(const Path & path);
|
|
|
|
PathSet queryValidPaths(const PathSet & paths);
|
|
|
|
PathSet queryAllValidPaths();
|
|
|
|
ValidPathInfo queryPathInfo(const Path & path);
|
|
|
|
Hash queryPathHash(const Path & path);
|
|
|
|
void queryReferences(const Path & path, PathSet & references);
|
|
|
|
void queryReferrers(const Path & path, PathSet & referrers);
|
|
|
|
Path queryDeriver(const Path & path);
|
|
|
|
PathSet queryValidDerivers(const Path & path);
|
|
|
|
PathSet queryDerivationOutputs(const Path & path);
|
|
|
|
StringSet queryDerivationOutputNames(const Path & path);
|
|
|
|
Path queryPathFromHashPart(const string & hashPart);
|
|
|
|
PathSet querySubstitutablePaths(const PathSet & paths);
|
|
|
|
void querySubstitutablePathInfos(const PathSet & paths,
|
|
SubstitutablePathInfos & infos);
|
|
|
|
Path addToStore(const Path & srcPath,
|
|
bool recursive = true, HashType hashAlgo = htSHA256,
|
|
PathFilter & filter = defaultPathFilter, bool repair = false);
|
|
|
|
Path addTextToStore(const string & name, const string & s,
|
|
const PathSet & references, bool repair = false);
|
|
|
|
void exportPath(const Path & path, bool sign,
|
|
Sink & sink);
|
|
|
|
Paths importPaths(bool requireSignature, Source & source);
|
|
|
|
void buildPaths(const PathSet & paths, BuildMode buildMode);
|
|
|
|
void ensurePath(const Path & path);
|
|
|
|
void addTempRoot(const Path & path);
|
|
|
|
void addIndirectRoot(const Path & path);
|
|
|
|
void syncWithGC();
|
|
|
|
Roots findRoots();
|
|
|
|
void collectGarbage(const GCOptions & options, GCResults & results);
|
|
|
|
PathSet queryFailedPaths();
|
|
|
|
void clearFailedPaths(const PathSet & paths);
|
|
|
|
private:
|
|
AutoCloseFD fdSocket;
|
|
FdSink to;
|
|
FdSource from;
|
|
Pid child;
|
|
unsigned int daemonVersion;
|
|
bool initialised;
|
|
|
|
void openConnection(bool reserveSpace = true);
|
|
|
|
void processStderr(Sink * sink = 0, Source * source = 0);
|
|
|
|
void connectToDaemon();
|
|
|
|
void setOptions();
|
|
};
|
|
|
|
|
|
}
|