mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-30 09:36:15 +02:00
Refactor wopAddToStore to make wopAddTextToStore obsolete
This commit is contained in:
parent
e34fe47d0c
commit
c602ebfb34
3 changed files with 53 additions and 42 deletions
|
@ -526,12 +526,8 @@ std::optional<StorePath> RemoteStore::queryPathFromHashPart(const std::string &
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
StorePath RemoteStore::addToStoreFromDump(Source & dump, const string & name,
|
StorePath RemoteStore::addCAToStore(Source & dump, const string & name, ContentAddressMethod caMethod, StorePathSet references)
|
||||||
FileIngestionMethod method, HashType hashType, RepairFlag repair)
|
|
||||||
{
|
{
|
||||||
if (repair) throw Error("repairing is not supported when adding to store through the Nix daemon");
|
|
||||||
StorePathSet references;
|
|
||||||
|
|
||||||
auto conn(getConnection());
|
auto conn(getConnection());
|
||||||
|
|
||||||
if (GET_PROTOCOL_MINOR(conn->daemonVersion) >= 25) {
|
if (GET_PROTOCOL_MINOR(conn->daemonVersion) >= 25) {
|
||||||
|
@ -539,7 +535,7 @@ StorePath RemoteStore::addToStoreFromDump(Source & dump, const string & name,
|
||||||
conn->to
|
conn->to
|
||||||
<< wopAddToStore
|
<< wopAddToStore
|
||||||
<< name
|
<< name
|
||||||
<< renderContentAddressMethod(FixedOutputHashMethod{ .fileIngestionMethod = method, .hashType = hashType });
|
<< renderContentAddressMethod(caMethod);
|
||||||
writeStorePaths(*this, conn->to, references);
|
writeStorePaths(*this, conn->to, references);
|
||||||
|
|
||||||
conn.withFramedSink([&](Sink & sink) {
|
conn.withFramedSink([&](Sink & sink) {
|
||||||
|
@ -552,42 +548,60 @@ StorePath RemoteStore::addToStoreFromDump(Source & dump, const string & name,
|
||||||
else {
|
else {
|
||||||
if (repair) throw Error("repairing is not supported when building through the Nix daemon protocol < 1.25");
|
if (repair) throw Error("repairing is not supported when building through the Nix daemon protocol < 1.25");
|
||||||
|
|
||||||
conn->to
|
std::visit(overloaded {
|
||||||
<< wopAddToStore
|
[&](TextHashMethod thm) -> void {
|
||||||
<< name
|
std::string s = dump.drain();
|
||||||
<< ((hashType == htSHA256 && method == FileIngestionMethod::Recursive) ? 0 : 1) /* backwards compatibility hack */
|
conn->to << wopAddTextToStore << name << s;
|
||||||
<< (method == FileIngestionMethod::Recursive ? 1 : 0)
|
writeStorePaths(*this, conn->to, references);
|
||||||
<< printHashType(hashType);
|
conn.processStderr();
|
||||||
|
},
|
||||||
|
[&](FixedOutputHashMethod fohm) -> void {
|
||||||
|
conn->to
|
||||||
|
<< wopAddToStore
|
||||||
|
<< name
|
||||||
|
<< ((fohm.hashType == htSHA256 && fohm.fileIngestionMethod == FileIngestionMethod::Recursive) ? 0 : 1) /* backwards compatibility hack */
|
||||||
|
<< (fohm.fileIngestionMethod == FileIngestionMethod::Recursive ? 1 : 0)
|
||||||
|
<< printHashType(fohm.hashType);
|
||||||
|
|
||||||
try {
|
|
||||||
conn->to.written = 0;
|
|
||||||
conn->to.warn = true;
|
|
||||||
connections->incCapacity();
|
|
||||||
{
|
|
||||||
Finally cleanup([&]() { connections->decCapacity(); });
|
|
||||||
if (method == FileIngestionMethod::Recursive) {
|
|
||||||
dump.drainInto(conn->to);
|
|
||||||
} else {
|
|
||||||
std::string contents = dump.drain();
|
|
||||||
dumpString(contents, conn->to);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
conn->to.warn = false;
|
|
||||||
conn.processStderr();
|
|
||||||
} catch (SysError & e) {
|
|
||||||
/* Daemon closed while we were sending the path. Probably OOM
|
|
||||||
or I/O error. */
|
|
||||||
if (e.errNo == EPIPE)
|
|
||||||
try {
|
try {
|
||||||
|
conn->to.written = 0;
|
||||||
|
conn->to.warn = true;
|
||||||
|
connections->incCapacity();
|
||||||
|
{
|
||||||
|
Finally cleanup([&]() { connections->decCapacity(); });
|
||||||
|
if (fohm.fileIngestionMethod == FileIngestionMethod::Recursive) {
|
||||||
|
dump.drainInto(conn->to);
|
||||||
|
} else {
|
||||||
|
std::string contents = dump.drain();
|
||||||
|
dumpString(contents, conn->to);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
conn->to.warn = false;
|
||||||
conn.processStderr();
|
conn.processStderr();
|
||||||
} catch (EndOfFile & e) { }
|
} catch (SysError & e) {
|
||||||
throw;
|
/* Daemon closed while we were sending the path. Probably OOM
|
||||||
}
|
or I/O error. */
|
||||||
|
if (e.errNo == EPIPE)
|
||||||
|
try {
|
||||||
|
conn.processStderr();
|
||||||
|
} catch (EndOfFile & e) { }
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}, caMethod);
|
||||||
return parseStorePath(readString(conn->from));
|
return parseStorePath(readString(conn->from));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StorePath RemoteStore::addToStoreFromDump(Source & dump, const string & name,
|
||||||
|
FileIngestionMethod method, HashType hashType, RepairFlag repair)
|
||||||
|
{
|
||||||
|
if (repair) throw Error("repairing is not supported when adding to store through the Nix daemon");
|
||||||
|
StorePathSet references;
|
||||||
|
return addCAToStore(dump, name, FixedOutputHashMethod{ .fileIngestionMethod = method, .hashType = hashType }, references);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void RemoteStore::addToStore(const ValidPathInfo & info, Source & source,
|
void RemoteStore::addToStore(const ValidPathInfo & info, Source & source,
|
||||||
RepairFlag repair, CheckSigsFlag checkSigs)
|
RepairFlag repair, CheckSigsFlag checkSigs)
|
||||||
|
@ -646,13 +660,8 @@ StorePath RemoteStore::addTextToStore(const string & name, const string & s,
|
||||||
const StorePathSet & references, RepairFlag repair)
|
const StorePathSet & references, RepairFlag repair)
|
||||||
{
|
{
|
||||||
if (repair) throw Error("repairing is not supported when building through the Nix daemon");
|
if (repair) throw Error("repairing is not supported when building through the Nix daemon");
|
||||||
|
StringSource source(s);
|
||||||
auto conn(getConnection());
|
return addCAToStore(source, name, TextHashMethod{}, references);
|
||||||
conn->to << wopAddTextToStore << name << s;
|
|
||||||
writeStorePaths(*this, conn->to, references);
|
|
||||||
|
|
||||||
conn.processStderr();
|
|
||||||
return parseStorePath(readString(conn->from));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,8 @@ public:
|
||||||
void querySubstitutablePathInfos(const StorePathCAMap & paths,
|
void querySubstitutablePathInfos(const StorePathCAMap & paths,
|
||||||
SubstitutablePathInfos & infos) override;
|
SubstitutablePathInfos & infos) override;
|
||||||
|
|
||||||
|
StorePath addCAToStore(Source & dump, const string & name, ContentAddressMethod caMethod, StorePathSet references);
|
||||||
|
|
||||||
StorePath addToStoreFromDump(Source & dump, const string & name,
|
StorePath addToStoreFromDump(Source & dump, const string & name,
|
||||||
FileIngestionMethod method = FileIngestionMethod::Recursive, HashType hashAlgo = htSHA256, RepairFlag repair = NoRepair) override;
|
FileIngestionMethod method = FileIngestionMethod::Recursive, HashType hashAlgo = htSHA256, RepairFlag repair = NoRepair) override;
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ typedef enum {
|
||||||
wopQueryReferences = 5, // obsolete
|
wopQueryReferences = 5, // obsolete
|
||||||
wopQueryReferrers = 6,
|
wopQueryReferrers = 6,
|
||||||
wopAddToStore = 7,
|
wopAddToStore = 7,
|
||||||
wopAddTextToStore = 8,
|
wopAddTextToStore = 8, // obsolete since 1.25, Nix 3.0. Use wopAddToStore
|
||||||
wopBuildPaths = 9,
|
wopBuildPaths = 9,
|
||||||
wopEnsurePath = 10,
|
wopEnsurePath = 10,
|
||||||
wopAddTempRoot = 11,
|
wopAddTempRoot = 11,
|
||||||
|
|
Loading…
Reference in a new issue