Compare commits
1 Commits
fetchFinal
...
dead-code-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e8ce8e21f |
@@ -14,45 +14,6 @@
|
|||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
void copyRecursive(SourceAccessor & accessor, const CanonPath & from, FileSystemObjectSink & sink, const CanonPath & to)
|
|
||||||
{
|
|
||||||
auto stat = accessor.lstat(from);
|
|
||||||
|
|
||||||
switch (stat.type) {
|
|
||||||
case SourceAccessor::tSymlink: {
|
|
||||||
sink.createSymlink(to, accessor.readLink(from));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SourceAccessor::tRegular: {
|
|
||||||
sink.createRegularFile(to, [&](CreateRegularFileSink & crf) {
|
|
||||||
if (stat.isExecutable)
|
|
||||||
crf.isExecutable();
|
|
||||||
accessor.readFile(from, crf, [&](uint64_t size) { crf.preallocateContents(size); });
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SourceAccessor::tDirectory: {
|
|
||||||
sink.createDirectory(to, [&](FileSystemObjectSink & dirSink, const CanonPath & relDirPath) {
|
|
||||||
for (auto & [name, _] : accessor.readDirectory(from)) {
|
|
||||||
copyRecursive(accessor, from / name, dirSink, relDirPath / name);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SourceAccessor::tChar:
|
|
||||||
case SourceAccessor::tBlock:
|
|
||||||
case SourceAccessor::tSocket:
|
|
||||||
case SourceAccessor::tFifo:
|
|
||||||
case SourceAccessor::tUnknown:
|
|
||||||
default:
|
|
||||||
throw Error("file '%1%' has an unsupported type of %2%", from, stat.typeString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct RestoreSinkSettings : Config
|
struct RestoreSinkSettings : Config
|
||||||
{
|
{
|
||||||
Setting<bool> preallocateContents{
|
Setting<bool> preallocateContents{
|
||||||
|
|||||||
@@ -217,29 +217,6 @@ std::optional<Mode> convertMode(SourceAccessor::Type type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void restore(FileSystemObjectSink & sink, Source & source, HashAlgorithm hashAlgo, std::function<RestoreHook> hook)
|
|
||||||
{
|
|
||||||
parse(sink, CanonPath::root, source, BlobMode::Regular, hashAlgo, [&](CanonPath name, TreeEntry entry) {
|
|
||||||
auto [accessor, from] = hook(entry.hash);
|
|
||||||
auto stat = accessor->lstat(from);
|
|
||||||
auto gotOpt = convertMode(stat.type);
|
|
||||||
if (!gotOpt)
|
|
||||||
throw Error(
|
|
||||||
"file '%s' (git hash %s) has an unsupported type",
|
|
||||||
from,
|
|
||||||
entry.hash.to_string(HashFormat::Base16, false));
|
|
||||||
auto & got = *gotOpt;
|
|
||||||
if (got != entry.mode)
|
|
||||||
throw Error(
|
|
||||||
"git mode of file '%s' (git hash %s) is %o but expected %o",
|
|
||||||
from,
|
|
||||||
entry.hash.to_string(HashFormat::Base16, false),
|
|
||||||
(RawMode) got,
|
|
||||||
(RawMode) entry.mode);
|
|
||||||
copyRecursive(*accessor, from, sink, name);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void dumpBlobPrefix(uint64_t size, Sink & sink, const ExperimentalFeatureSettings & xpSettings)
|
void dumpBlobPrefix(uint64_t size, Sink & sink, const ExperimentalFeatureSettings & xpSettings)
|
||||||
{
|
{
|
||||||
xpSettings.require(Xp::GitHashing);
|
xpSettings.require(Xp::GitHashing);
|
||||||
|
|||||||
@@ -136,13 +136,6 @@ std::optional<Mode> convertMode(SourceAccessor::Type type);
|
|||||||
*/
|
*/
|
||||||
using RestoreHook = SourcePath(Hash);
|
using RestoreHook = SourcePath(Hash);
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper around `parse` and `RestoreSink`
|
|
||||||
*
|
|
||||||
* @param hashAlgo must be `HashAlgo::SHA1` or `HashAlgo::SHA256` for now.
|
|
||||||
*/
|
|
||||||
void restore(FileSystemObjectSink & sink, Source & source, HashAlgorithm hashAlgo, std::function<RestoreHook> hook);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dumps a single file to a sink
|
* Dumps a single file to a sink
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user