From cce63aca270c51fb3ce9790438e3c23864de0a87 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Wed, 23 Dec 2015 21:43:51 +0100 Subject: Implement file change tracking using `diff` The newly introduced `ChangeTracker` class is now keeping track of all tracked file in addition to spawning and managing a corresponding `diff` instance that enables printing pretty _patch-style_ change summaries to the logging target. This commit introduces `boost-process` and `diff` as dependencies of this library. --- src/utility.h | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'src/utility.h') diff --git a/src/utility.h b/src/utility.h index 96ee15c..1dc44ed 100644 --- a/src/utility.h +++ b/src/utility.h @@ -3,6 +3,8 @@ #include +#include + #include namespace utility { @@ -10,16 +12,30 @@ namespace utility { class Logger { public: Logger(const int target_fd): - buffer(target_fd, std::ios::out), - stream(&this->buffer) { } + buffer_(target_fd, std::ios::out), + stream_(&this->buffer) { } void append(const std::string& msg) { - this->stream << msg << std::endl; + this->stream_ << msg << std::endl; + } + + // Forward the contents of a given standard output stream to the log target + // + // While `this->stream_ << stream.rdbuf()` would be more effective it sadly + // does not work with `boost::process::pistream` due to a broken pipe error + // in conjunction with the required `boost::process::capture_stream` context + // flag. + // + void forward(boost::process::pistream& stream) { + this->stream << std::string( + (std::istreambuf_iterator(stream)), + (std::istreambuf_iterator()) + ); } private: - __gnu_cxx::stdio_filebuf buffer; - std::ostream stream; + __gnu_cxx::stdio_filebuf buffer_; + std::ostream stream_; }; -- cgit v1.2.3