mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-25 15:26:17 +02:00
test-support: Add TracingFileSystemObjectSink
This commit is contained in:
parent
efd4bf6533
commit
992912f3b4
3 changed files with 75 additions and 1 deletions
|
@ -45,7 +45,7 @@ struct FileSystemObjectSink
|
||||||
* An extension of `FileSystemObjectSink` that supports file types
|
* An extension of `FileSystemObjectSink` that supports file types
|
||||||
* that are not supported by Nix's FSO model.
|
* that are not supported by Nix's FSO model.
|
||||||
*/
|
*/
|
||||||
struct ExtendedFileSystemObjectSink : FileSystemObjectSink
|
struct ExtendedFileSystemObjectSink : virtual FileSystemObjectSink
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Create a hard link. The target must be the path of a previously
|
* Create a hard link. The target must be the path of a previously
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include "tracing-file-system-object-sink.hh"
|
||||||
|
|
||||||
|
namespace nix::test {
|
||||||
|
|
||||||
|
void TracingFileSystemObjectSink::createDirectory(const Path & path)
|
||||||
|
{
|
||||||
|
std::cerr << "createDirectory(" << path << ")\n";
|
||||||
|
sink.createDirectory(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TracingFileSystemObjectSink::createRegularFile(const Path & path, std::function<void(CreateRegularFileSink &)> fn)
|
||||||
|
{
|
||||||
|
std::cerr << "createRegularFile(" << path << ")\n";
|
||||||
|
sink.createRegularFile(path, [&](CreateRegularFileSink & crf) {
|
||||||
|
// We could wrap this and trace about the chunks of data and such
|
||||||
|
fn(crf);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void TracingFileSystemObjectSink::createSymlink(const Path & path, const std::string & target)
|
||||||
|
{
|
||||||
|
std::cerr << "createSymlink(" << path << ", target: " << target << ")\n";
|
||||||
|
sink.createSymlink(path, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TracingExtendedFileSystemObjectSink::createHardlink(const Path & path, const CanonPath & target)
|
||||||
|
{
|
||||||
|
std::cerr << "createHardlink(" << path << ", target: " << target << ")\n";
|
||||||
|
sink.createHardlink(path, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace nix::test
|
|
@ -0,0 +1,41 @@
|
||||||
|
#pragma once
|
||||||
|
#include "fs-sink.hh"
|
||||||
|
|
||||||
|
namespace nix::test {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A `FileSystemObjectSink` that traces calls, writing to stderr.
|
||||||
|
*/
|
||||||
|
class TracingFileSystemObjectSink : public virtual FileSystemObjectSink
|
||||||
|
{
|
||||||
|
FileSystemObjectSink & sink;
|
||||||
|
public:
|
||||||
|
TracingFileSystemObjectSink(FileSystemObjectSink & sink)
|
||||||
|
: sink(sink)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void createDirectory(const Path & path) override;
|
||||||
|
|
||||||
|
void createRegularFile(const Path & path, std::function<void(CreateRegularFileSink &)> fn);
|
||||||
|
|
||||||
|
void createSymlink(const Path & path, const std::string & target);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A `ExtendedFileSystemObjectSink` that traces calls, writing to stderr.
|
||||||
|
*/
|
||||||
|
class TracingExtendedFileSystemObjectSink : public TracingFileSystemObjectSink, public ExtendedFileSystemObjectSink
|
||||||
|
{
|
||||||
|
ExtendedFileSystemObjectSink & sink;
|
||||||
|
public:
|
||||||
|
TracingExtendedFileSystemObjectSink(ExtendedFileSystemObjectSink & sink)
|
||||||
|
: TracingFileSystemObjectSink(sink)
|
||||||
|
, sink(sink)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void createHardlink(const Path & path, const CanonPath & target);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue