forked from lix-project/lix
Expose the export magic value and move LocalStore::queryReferences to Store
This commit is contained in:
parent
e03d6e0998
commit
c8f4d89a34
|
@ -953,14 +953,6 @@ PathSet LocalStore::queryAllValidPaths()
|
|||
}
|
||||
|
||||
|
||||
void LocalStore::queryReferences(const Path & path,
|
||||
PathSet & references)
|
||||
{
|
||||
ValidPathInfo info = queryPathInfo(path);
|
||||
references.insert(info.references.begin(), info.references.end());
|
||||
}
|
||||
|
||||
|
||||
void LocalStore::queryReferrers_(const Path & path, PathSet & referrers)
|
||||
{
|
||||
SQLiteStmtUse use(stmtQueryReferrers);
|
||||
|
@ -1493,9 +1485,6 @@ struct HashAndWriteSink : Sink
|
|||
};
|
||||
|
||||
|
||||
#define EXPORT_MAGIC 0x4558494e
|
||||
|
||||
|
||||
static void checkSecrecy(const Path & path)
|
||||
{
|
||||
struct stat st;
|
||||
|
@ -1532,7 +1521,7 @@ void LocalStore::exportPath(const Path & path, bool sign,
|
|||
PathSet references;
|
||||
queryReferences(path, references);
|
||||
|
||||
hashAndWriteSink << EXPORT_MAGIC << path << references << queryDeriver(path);
|
||||
hashAndWriteSink << exportMagic << path << references << queryDeriver(path);
|
||||
|
||||
if (sign) {
|
||||
Hash hash = hashAndWriteSink.currentHash();
|
||||
|
@ -1608,8 +1597,8 @@ Path LocalStore::importPath(bool requireSignature, Source & source)
|
|||
|
||||
restorePath(unpacked, hashAndReadSource);
|
||||
|
||||
unsigned int magic = readInt(hashAndReadSource);
|
||||
if (magic != EXPORT_MAGIC)
|
||||
uint32_t magic = readInt(hashAndReadSource);
|
||||
if (magic != exportMagic)
|
||||
throw Error("Nix archive cannot be imported; wrong format");
|
||||
|
||||
Path dstPath = readStorePath(hashAndReadSource);
|
||||
|
|
|
@ -108,8 +108,6 @@ public:
|
|||
|
||||
Hash queryPathHash(const Path & path) override;
|
||||
|
||||
void queryReferences(const Path & path, PathSet & references) override;
|
||||
|
||||
void queryReferrers(const Path & path, PathSet & referrers) override;
|
||||
|
||||
Path queryDeriver(const Path & path) override;
|
||||
|
|
|
@ -224,6 +224,13 @@ Path computeStorePathForText(const string & name, const string & s,
|
|||
}
|
||||
|
||||
|
||||
void Store::queryReferences(const Path & path, PathSet & references)
|
||||
{
|
||||
ValidPathInfo info = queryPathInfo(path);
|
||||
references.insert(info.references.begin(), info.references.end());
|
||||
}
|
||||
|
||||
|
||||
/* Return a string accepted by decodeValidPathInfo() that
|
||||
registers the specified paths as valid. Note: it's the
|
||||
responsibility of the caller to provide a closure. */
|
||||
|
|
|
@ -12,6 +12,13 @@
|
|||
namespace nix {
|
||||
|
||||
|
||||
/* Size of the hash part of store paths, in base-32 characters. */
|
||||
const size_t storePathHashLen = 32; // i.e. 160 bits
|
||||
|
||||
/* Magic header of exportPath() output. */
|
||||
const uint32_t exportMagic = 0x4558494e;
|
||||
|
||||
|
||||
typedef std::map<Path, Path> Roots;
|
||||
|
||||
|
||||
|
@ -158,8 +165,7 @@ public:
|
|||
|
||||
/* Query the set of outgoing FS references for a store path. The
|
||||
result is not cleared. */
|
||||
virtual void queryReferences(const Path & path,
|
||||
PathSet & references) = 0;
|
||||
virtual void queryReferences(const Path & path, PathSet & references);
|
||||
|
||||
/* Queries the set of incoming FS references for a store path.
|
||||
The result is not cleared. */
|
||||
|
@ -339,9 +345,6 @@ public:
|
|||
};
|
||||
|
||||
|
||||
const size_t storePathHashLen = 32; // base-32 characters, i.e. 160 bits
|
||||
|
||||
|
||||
/* !!! These should be part of the store API, I guess. */
|
||||
|
||||
/* Throw an exception if `path' is not directly in the Nix store. */
|
||||
|
|
Loading…
Reference in a new issue