ewmscp  ..
Public Member Functions | Private Member Functions | Static Private Attributes | List of all members
checksumTestRequestProvider Class Reference

#include <checksumTestRequestProvider.h>

Inheritance diagram for checksumTestRequestProvider:
[legend]
Collaboration diagram for checksumTestRequestProvider:
[legend]

Public Member Functions

 checksumTestRequestProvider (decltype(requests) aRequests, decltype(delayedRequests) aDelayedRequests, decltype(parents) aParents, decltype(InputHandler) aInputHandler, decltype(OutputHandler) aOutputHandler)
 
 ~checksumTestRequestProvider () override=default
 
void prepareMappings (std::vector< std::string > &sources, std::string &destination) override
 
- Public Member Functions inherited from noFollowRequestProvider
 noFollowRequestProvider (decltype(requests) aRequests, decltype(delayedRequests) aDelayedRequests, decltype(parents) aParents, decltype(InputHandler) aInputHandler, decltype(OutputHandler) aOutputHandler)
 
 ~noFollowRequestProvider () override=default
 
bool isFollowMode () const override
 
void processSources (const std::vector< std::string > &sources) override
 
- Public Member Functions inherited from requestProvider
 requestProvider (decltype(requests) aRequests, decltype(delayedRequests) aDelayedRequests, decltype(parents) aParents, decltype(InputHandler) aInputHandler, decltype(OutputHandler) aOutputHandler)
 ! use only the file name part in the destination More...
 
virtual ~requestProvider ()=default
 
virtual void printMappings (std::ostream &stream)
 

Private Member Functions

void processSource (const std::string &source) override
 

Static Private Attributes

static factoryTemplate< checksumTestRequestProviderfactory
 
static options::single< std::string > & escaperOption
 
static options::single< std::string > defaultSum
 
static options::map< std::string, std::map< int, std::string > > lengthMap
 
static options::withAction< options::single< bool > > doCheck
 

Additional Inherited Members

- Static Public Member Functions inherited from requestProvider
static requestProvidernewProvider (const std::string &choice, decltype(requests) aRequests, decltype(delayedRequests) aDelayedRequests, decltype(parents) aParents, decltype(InputHandler) aInputHandler, decltype(OutputHandler) aOutputHandler)
 
static void addAllowedNamesToOption (options::single< std::string > &option)
 
- Protected Member Functions inherited from noFollowRequestProvider
virtual copyRequest::basenewRequest (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)
 
- Protected Member Functions inherited from requestProvider
virtual const singleMapgetDstPath (const std::string &source, std::string &destination, bool baseNameOnly=false)
 get detstination papth for a given source path More...
 
- Static Protected Member Functions inherited from requestProvider
static std::map< std::string, factoryClass * > & getFactoryMap ()
 
- Protected Attributes inherited from requestProvider
copyRequest::simpleQueuerequests
 
copyRequest::timedQueuedelayedRequests
 
bool parents
 
inputHandler::baseInputHandler
 
outputHandler::baseOutputHandler
 
- Static Protected Attributes inherited from noFollowRequestProvider
static options::single< std::string > & sourceDecodeMethod
 
static options::single< bool > ignoreMissing
 
static std::multiset< copyRequest::base *, copyRequest::base::pointerComparerequestSet
 
- Static Protected Attributes inherited from requestProvider
static options::map< std::string, pathMapTypepathMap
 
static singleMap badMapEntry
 

Detailed Description

Definition at line 5 of file checksumTestRequestProvider.h.

Constructor & Destructor Documentation

◆ checksumTestRequestProvider()

checksumTestRequestProvider::checksumTestRequestProvider ( decltype(requests aRequests,
decltype(delayedRequests aDelayedRequests,
decltype(parents aParents,
decltype(InputHandler aInputHandler,
decltype(OutputHandler aOutputHandler 
)
inline

Definition at line 15 of file checksumTestRequestProvider.h.

19  :
20  noFollowRequestProvider(aRequests, aDelayedRequests, aParents,
21  aInputHandler, aOutputHandler) {
22  };

◆ ~checksumTestRequestProvider()

checksumTestRequestProvider::~checksumTestRequestProvider ( )
overridedefault

Member Function Documentation

◆ prepareMappings()

void checksumTestRequestProvider::prepareMappings ( std::vector< std::string > &  sources,
std::string &  destination 
)
overridevirtual

Reimplemented from requestProvider.

Definition at line 145 of file checksumTestRequestProvider.cpp.

146  {
147  if (!destination.empty()) { // last arg (destination) is also a source
148  sources.push_back(destination);
149  destination.clear();
150  }
151 }

◆ processSource()

void checksumTestRequestProvider::processSource ( const std::string &  source)
overrideprivatevirtual

Implements noFollowRequestProvider.

Definition at line 88 of file checksumTestRequestProvider.cpp.

88  {
89  static auto escaper = escapism::newEscaper(escaperOption);
91 
92  std::ifstream srcList(source);
93  while (srcList) {
94  std::string sumType;
95  std::string sumValue;
96 
97  srcList >> sumType;
98  if (sumType.empty()) {
99  continue;
100  }
101  if (sumType.back() == ':') { // we have our own "sumtype: sumvalue filename" line style
102  sumType.pop_back();
103  srcList >> sumValue;
104  } else { // we have the default whateversum "sumvalue filename" line style
105  if (sumType.front() == '\\') { // md5sum(1) uses this to indicate escaped file names
106  sumValue = sumType.substr(1);
107  } else {
108  sumValue = sumType;
109  }
110  if (defaultSum.empty()) {
111  auto item = lengthMap.find(sumValue.size());
112  if (item == lengthMap.end()) {
113  throw std::runtime_error("can't guess checksum type from checksum length " + sumValue);
114  }
115  sumType = item->second;
116  } else {
117  sumType = defaultSum;
118  }
119  }
120  std::string line;
121  std::getline(srcList, line);
122  if (line.empty()) {
123  continue;
124  }
125 
126  std::string src;
127  escaper->deEscape(line.substr(line.find_first_not_of(" \t")), src);
128  auto sourceStat = InputHandler->getStat(src, false); // never follow links
129  if (!sourceStat) {
130  if (ignoreMissing) {
131  continue;
132  } else {
133  throw std::runtime_error("no such file or directory " + src);
134  }
135  }
136  if (sourceStat->isDir()) { // directories are created on the fly, ignore here
137  throw std::runtime_error(src + " is a directory");
138  }
139  auto request = new copyRequest::checksumTest(src, sourceStat, InputHandler);
140  request->addExpectedChecksumResult(sumType, sumValue);
141  requestSet.emplace(request);
142  }
143 }

References defaultSum, escaperOption, pathHandler::getStat(), noFollowRequestProvider::ignoreMissing, requestProvider::InputHandler, lengthMap, escapism::newEscaper(), copyRequest::checksumTest::prepareStatPrint(), and noFollowRequestProvider::requestSet.

Here is the call graph for this function:

Member Data Documentation

◆ defaultSum

options::single<std::string> checksumTestRequestProvider::defaultSum
staticprivate

Definition at line 10 of file checksumTestRequestProvider.h.

Referenced by processSource().

◆ doCheck

options::withAction<options::single<bool> > checksumTestRequestProvider::doCheck
staticprivate

Definition at line 12 of file checksumTestRequestProvider.h.

◆ escaperOption

options::single<std::string>& checksumTestRequestProvider::escaperOption
staticprivate

Definition at line 9 of file checksumTestRequestProvider.h.

Referenced by processSource().

◆ factory

factoryTemplate<checksumTestRequestProvider> checksumTestRequestProvider::factory
staticprivate

Definition at line 7 of file checksumTestRequestProvider.h.

◆ lengthMap

options::map<std::string, std::map<int, std::string> > checksumTestRequestProvider::lengthMap
staticprivate

Definition at line 11 of file checksumTestRequestProvider.h.

Referenced by processSource().


The documentation for this class was generated from the following files:
copyRequest::checksumTest
class for checking if checksums match expectations Extends the copyRequest::base class with new print...
Definition: checksumTestRequestProvider.cpp:31
noFollowRequestProvider::ignoreMissing
static options::single< bool > ignoreMissing
Definition: noFollowRequestProvider.h:11
escapism::newEscaper
static const escapism * newEscaper(const std::string &name)
Definition: escapism.cpp:25
pathHandler::getStat
virtual std::unique_ptr< const genericStat > getStat(const std::string &path, bool followLink=true)=0
copyRequest::checksumTest::prepareStatPrint
static void prepareStatPrint()
setup statPrinter to print the final line for compatibiity mith eg. md5sum
Definition: checksumTestRequestProvider.cpp:69
requestProvider::InputHandler
inputHandler::base * InputHandler
Definition: requestProvider.h:34
noFollowRequestProvider::requestSet
static std::multiset< copyRequest::base *, copyRequest::base::pointerCompare > requestSet
Definition: noFollowRequestProvider.h:13
checksumTestRequestProvider::defaultSum
static options::single< std::string > defaultSum
Definition: checksumTestRequestProvider.h:10
noFollowRequestProvider::noFollowRequestProvider
noFollowRequestProvider(decltype(requests) aRequests, decltype(delayedRequests) aDelayedRequests, decltype(parents) aParents, decltype(InputHandler) aInputHandler, decltype(OutputHandler) aOutputHandler)
Definition: noFollowRequestProvider.h:23
checksumTestRequestProvider::escaperOption
static options::single< std::string > & escaperOption
Definition: checksumTestRequestProvider.h:9
checksumTestRequestProvider::lengthMap
static options::map< std::string, std::map< int, std::string > > lengthMap
Definition: checksumTestRequestProvider.h:11