GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/swissknife_graft.h
Date: 2024-04-21 02:33:16
Exec Total Coverage
Lines: 0 15 0.0%
Branches: 0 0 -%

Line Branch Exec Source
1 /**
2 * This file is part of the CernVM File System.
3 *
4 * It assists in creating graft files for publishing in CVMFS.
5 */
6
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
24 ~CommandGraft() { }
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: " +
38 StringifyUint(kDefaultChunkSize) + ")"));
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_;
66 zlib::Algorithms compression_alg_;
67 shash::Algorithms hash_alg_;
68 uint64_t chunk_size_;
69 bool generate_bulk_hash_;
70 };
71
72 } // namespace swissknife
73
74 #endif // CVMFS_SWISSKNIFE_GRAFT_H_
75