--- a/src/PlainFilesystemCommand.h Tue Jan 21 00:19:56 2020 +0100
+++ b/src/PlainFilesystemCommand.h Fri Jan 24 16:53:31 2020 +0100
@@ -28,9 +28,6 @@
using namespace relpipe::writer;
class PlainFilesystemCommand : public FilesystemCommand {
-private:
- std::map<string_t, std::shared_ptr<AttributeFinder>> attributeFinders = createAttributeFinders();
-
public:
void process(int inputFD, int outputFD, Configuration& configuration) {
@@ -40,18 +37,11 @@
std::ostream output(&outputBuffer);
std::shared_ptr<RelationalWriter> writer(Factory::create(output));
-
- string_t relationName = configuration.relation.empty() ? L"filesystem" : configuration.relation;
+ std::map<string_t, std::shared_ptr < AttributeFinder>> attributeFinders = createAttributeFinders();
- std::vector<AttributeMetadata> attributesMetadata;
- for (RequestedField field : configuration.fields) {
- std::shared_ptr<AttributeFinder> finder = attributeFinders[field.group];
- if (finder) for (AttributeMetadata m : finder->toMetadata(writer.get(), relationName, field)) attributesMetadata.push_back(m);
- else throw RelpipeWriterException(L"Unsupported field group: " + field.group);
- }
-
- writer->startRelation(relationName, attributesMetadata, true);
-
+ string_t relationName = fetchRelationName(&configuration);
+ writeHeader(writer.get(), attributeFinders, relationName, &configuration.fields);
+
for (std::stringstream originalName; readNext(input, originalName); reset(originalName)) {
fs::path file(originalName.str().empty() ? "." : originalName.str()); // interpret empty string as current directory (e.g. result of: find -printf '%P\0')