CernVM-FS  2.12.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
swissknife_graft.h
Go to the documentation of this file.
1 
7 #ifndef CVMFS_SWISSKNIFE_GRAFT_H_
8 #define CVMFS_SWISSKNIFE_GRAFT_H_
9 
10 #include <string>
11 #include <vector>
12 
13 #include "compression.h"
14 #include "crypto/hash.h"
15 #include "swissknife.h"
16 #include "util/string.h"
17 
18 namespace swissknife {
19 
20 class CommandGraft : public Command {
21  public:
22  static const unsigned kDefaultChunkSize = 24;
23 
25  virtual std::string GetName() const { return "graft"; }
26  virtual std::string GetDescription() const {
27  return "Creates a graft file for publishing in CVMFS.";
28  }
29  virtual ParameterList GetParams() const {
30  ParameterList r;
31  r.push_back(Parameter::Mandatory('i', "Input file to process "
32  "('-' for reading from stdin)"));
33  r.push_back(Parameter::Optional('o', "Output location for graft file"));
34  r.push_back(Parameter::Switch('v', "Verbose output"));
35  r.push_back(Parameter::Optional('Z', "Compression algorithm "
36  "(default: none)"));
37  r.push_back(Parameter::Optional('c', "Chunk size (in MB; default: " +
39  r.push_back(Parameter::Optional('a', "hash algorithm (default: SHA-1)"));
40  r.push_back(Parameter::Switch('b', "Generate bulk hash for chunked file"));
41  return r;
42  }
43 
44  int Main(const ArgumentList &args);
45 
46  private:
47  int Publish(const std::string &input_file, const std::string &output_file,
48  bool output_file_is_dir, bool input_file_is_stdin);
49  int Recurse(const std::string &input_file, const std::string &output_file);
50 
51  void FileCallback(const std::string &relative_path,
52  const std::string &file_name);
53  bool DirCallback(const std::string &relative_path,
54  const std::string &dir_name);
55 
56  bool ChecksumFdWithChunks(int fd,
57  zlib::Compressor *compressor,
58  uint64_t *file_size,
59  shash::Any *file_hash,
60  std::vector<uint64_t> *chunk_offsets,
61  std::vector<shash::Any> *chunk_checksums);
62 
63  std::string output_file_;
64  std::string input_file_;
65  bool verbose_;
68  uint64_t chunk_size_;
70 };
71 
72 } // namespace swissknife
73 
74 #endif // CVMFS_SWISSKNIFE_GRAFT_H_
static Parameter Optional(const char key, const std::string &desc)
Definition: swissknife.h:41
int Main(const ArgumentList &args)
static const unsigned kDefaultChunkSize
static Parameter Switch(const char key, const std::string &desc)
Definition: swissknife.h:44
virtual std::string GetName() const
std::vector< Parameter > ParameterList
Definition: swissknife.h:71
int Publish(const std::string &input_file, const std::string &output_file, bool output_file_is_dir, bool input_file_is_stdin)
std::string StringifyUint(const uint64_t value)
Definition: string.cc:84
virtual std::string GetDescription() const
bool DirCallback(const std::string &relative_path, const std::string &dir_name)
Algorithms
Definition: hash.h:41
Algorithms
Definition: compression.h:44
static Parameter Mandatory(const char key, const std::string &desc)
Definition: swissknife.h:38
void FileCallback(const std::string &relative_path, const std::string &file_name)
zlib::Algorithms compression_alg_
shash::Algorithms hash_alg_
int Recurse(const std::string &input_file, const std::string &output_file)
std::map< char, SharedPtr< std::string > > ArgumentList
Definition: swissknife.h:72
virtual ParameterList GetParams() const
bool ChecksumFdWithChunks(int fd, zlib::Compressor *compressor, uint64_t *file_size, shash::Any *file_hash, std::vector< uint64_t > *chunk_offsets, std::vector< shash::Any > *chunk_checksums)