ewmscp  ..
listingRequestProvider.cpp
Go to the documentation of this file.
2 #include "throwcall.h"
3 #include "escapism.h"
4 #include "ewmscp.h"
5 #include "timer.h"
6 
8 
9 
10 
11 namespace copyRequest {
17  class listingRequest: public base {
18  protected:
22 
23  void printModeBits(std::ostream& stream, mode_t bits) {
24  stream << (bits & 4 ? "r" : "-") << (bits & 2 ? "w" : "-") << (bits & 1 ? "x" : "-");
25  }
26  void printMode(std::ostream& stream, mode_t bits) {
27  switch (bits & S_IFMT) {
28  case S_IFSOCK:
29  stream << "s";
30  break;
31  case S_IFLNK:
32  stream << "l";
33  break;
34  case S_IFREG:
35  stream << "-";
36  break;
37  case S_IFBLK:
38  stream << "b";
39  break;
40  case S_IFDIR:
41  stream << "d";
42  break;
43  case S_IFCHR:
44  stream << "c";
45  break;
46  case S_IFIFO:
47  stream << "f";
48  break;
49  }
50  printModeBits(stream, bits >> 6);
51  printModeBits(stream, bits >> 3);
52  printModeBits(stream, bits >> 0);
53  stream << " ";
54  }
56  public:
57  listingRequest(const std::string& aSource,
58  std::unique_ptr<const genericStat>& aStat,
59  inputHandler::base* aInputHandler):
60  base(aInputHandler, aSource, "", aStat, dummyMapEntry, false, copyRequest::clock_type::now()) {}
61  void process(perThreadData& /*threadData*/) override {
62  }
63  bool compare(const base& rhs) const override {
64  if (sortByTime) {
65  return (readInitialStat->mTime > rhs.getInitialStat().mTime) ^ reverse;
66  } else if (sortBySize) {
67  return (readInitialStat->size > rhs.getInitialStat().size) ^ reverse;
68  } else {
69  return (source < rhs.getSource()) ^ reverse;
70  }
71  }
72 
73  void printResults(std::ostream& /*hashStream*/,
74  std::ostream& logStream) override {
75  static auto escaper = escapism::newEscaper("C");
76  timerInst(print);
77  std::string name;
78  escaper->escape(source, name);
79  printMode(logStream, readInitialStat->mode);
80  logStream << std::setw(6) << readInitialStat->ownerUid << " ";
81  logStream << std::setw(10) << readInitialStat->ownerGid << " ";
82  logStream << std::setw(13) << readInitialStat->size << " ";
83  std::string time;
84  readInitialStat->getMtime(time);
85  logStream << time << " ";
86  logStream << name << "\n";
87  timerInst(nix);
88  }
89  static void printFinalLine(std::ostream& /*stream*/) {
90  }
92  static void prepareStatPrint() {
94  }
95  };
96  defineStatic(listingRequest::reverse, 'r', "reverse", "sort listing in reverse order");
97  defineStatic(listingRequest::sortByTime, 't', "sortByMtime", "sort listing by mTime");
98  defineStatic(listingRequest::sortBySize, 'S', "sortBySize", "sort listing by size");
99  defineStatic(listingRequest::dummyMapEntry, {"dummy", "entry"});
100 } // end namespace copyRequest
101 
102 
103 
104 
105 
106 
108  const std::string& aSource,
109  const std::string& /*aDestination*/,
110  std::unique_ptr<const genericStat>& aStat,
111  const singleMap& /*aMapEntry*/,
112  bool /*remove*/,
113  copyRequest::clock_type::time_point /*timestamp*/) {
114  return new copyRequest::listingRequest(aSource, aStat, aInputHandler);
115 }
116 
117 
118 
119 
120 void listingRequestProvider::prepareMappings(std::vector<std::string>& sources,
121  std::string& destination) {
122  if (!destination.empty()) { // last arg (destination) is also a source
123  sources.push_back(destination);
124  destination.clear();
125  }
126  singleDestination = "/dev/null";
127 }
copyRequest::listingRequest::sortByTime
static options::single< bool > sortByTime
Definition: listingRequestProvider.cpp:20
copyRequest::listingRequest::printModeBits
void printModeBits(std::ostream &stream, mode_t bits)
Definition: listingRequestProvider.cpp:23
listingRequestProvider::factory
static factoryTemplate< listingRequestProvider > factory
Definition: listingRequestProvider.h:7
copyRequest::listingRequest::compare
bool compare(const base &rhs) const override
Definition: listingRequestProvider.cpp:63
listingRequestProvider.h
options::single< bool >
class specialisation for options of type bool
Definition: Options.h:595
genericStat::mTime
clock_type::time_point mTime
Definition: genericStat.h:20
copyRequest::base
class for copy requests.
Definition: copyRequest.h:99
copyRequest::listingRequest::printFinalLine
static void printFinalLine(std::ostream &)
Definition: listingRequestProvider.cpp:89
listingRequestProvider::newRequest
copyRequest::base * newRequest(inputHandler::base *InputHandler, const std::string &aSource, const std::string &aDestination, std::unique_ptr< const genericStat > &aStat, const singleMap &aMapEntry, bool remove, copyRequest::clock_type::time_point timestamp) override
Definition: listingRequestProvider.cpp:107
copyRequest::clock_type
std::chrono::system_clock clock_type
type for time measurements
Definition: copyRequestTypes.h:46
copyRequest::listingRequest::printMode
void printMode(std::ostream &stream, mode_t bits)
Definition: listingRequestProvider.cpp:26
copyRequest::listingRequest
class for checking if checksums match expectations Extends the copyRequest::base class with new print...
Definition: listingRequestProvider.cpp:17
genericStat::size
size_t size
Definition: genericStat.h:16
copyRequest::listingRequest::sortBySize
static options::single< bool > sortBySize
Definition: listingRequestProvider.cpp:21
escapism.h
timer.h
throwcall.h
copyRequest::base::readInitialStat
std::unique_ptr< const genericStat > readInitialStat
Definition: copyRequest.h:271
copyRequest::base::getInitialStat
const genericStat & getInitialStat() const
Definition: copyRequest.h:273
copyRequest::listingRequest::dummyMapEntry
static singleMap dummyMapEntry
Definition: listingRequestProvider.cpp:55
copyRequest::listingRequest::listingRequest
listingRequest(const std::string &aSource, std::unique_ptr< const genericStat > &aStat, inputHandler::base *aInputHandler)
Definition: listingRequestProvider.cpp:57
copyRequest::perThreadData
class for thread-specific data
Definition: copyRequest.h:67
escapism::newEscaper
static const escapism * newEscaper(const std::string &name)
Definition: escapism.cpp:25
inputHandler::base
class for handling input This is the (abstract) base class for handling input, both reading a file vi...
Definition: inputHandler.h:35
listingRequestProvider::prepareMappings
void prepareMappings(std::vector< std::string > &sources, std::string &destination) override
Definition: listingRequestProvider.cpp:120
timerInst
#define timerInst(subfunc)
Definition: timer.h:157
singleMap
std::pair< std::string, std::string > singleMap
Definition: copyRequest.h:52
copyRequest::base::source
const std::string source
Definition: copyRequest.h:284
copyRequest::listingRequest::prepareStatPrint
static void prepareStatPrint()
setup statPrinter to print the final line for compatibiity mith eg. md5sum
Definition: listingRequestProvider.cpp:92
copyRequest::listingRequest::reverse
static options::single< bool > reverse
Definition: listingRequestProvider.cpp:19
copyRequest::listingRequest::process
void process(perThreadData &) override
Definition: listingRequestProvider.cpp:61
copyRequest::base::statPrinter
static std::function< void(std::ostream &)> statPrinter
Definition: copyRequest.h:330
copyRequest::listingRequest::printResults
void printResults(std::ostream &, std::ostream &logStream) override
Definition: listingRequestProvider.cpp:73
copyRequest
Definition: checksumTestRequestProvider.cpp:25
copyRequest::base::getSource
const std::string & getSource() const
Definition: copyRequest.h:292
cmdLineRequestProvider::singleDestination
static std::string singleDestination
Definition: cmdLineRequestProvider.h:15
ewmscp.h
defineStatic
#define defineStatic(var,...)
defines a static variable and instatitates the constructor with the variable number of arguments.
Definition: ewmscp.h:42