GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/publish/main.cc
Date: 2025-06-22 02:36:02
Exec Total Coverage
Lines: 0 56 0.0%
Branches: 0 182 0.0%

Line Branch Exec Source
1 /**
2 * This file is part of the CernVM File System.
3 */
4
5
6 #include <algorithm>
7 #include <cstdlib>
8 #include <string>
9 #include <vector>
10
11 #include "publish/cmd_abort.h"
12 #include "publish/cmd_commit.h"
13 #include "publish/cmd_diff.h"
14 #include "publish/cmd_enter.h"
15 #include "publish/cmd_hash.h"
16 #include "publish/cmd_help.h"
17 #include "publish/cmd_info.h"
18 #include "publish/cmd_lsof.h"
19 #include "publish/cmd_mkfs.h"
20 #include "publish/cmd_transaction.h"
21 #include "publish/cmd_zpipe.h"
22 #include "publish/command.h"
23 #include "publish/except.h"
24 #include "util/logging.h"
25
26 using namespace std; // NOLINT
27
28
29 static void PrintVersion() {
30 LogCvmfs(kLogCvmfs, kLogStdout, "CernVM-FS Server Tool %s", CVMFS_VERSION);
31 }
32
33 static void Usage(const std::string &progname,
34 const publish::CommandList &clist) {
35 LogCvmfs(kLogCvmfs, kLogStdout,
36 "CernVM-FS Server Tool %s\n"
37 "NOTE: This utility is for CernVM-FS internal use only for the time "
38 "being!"
39 "\n\n"
40 "Usage:\n"
41 "------\n"
42 " %s COMMAND [options] <parameters>\n\n"
43 "Supported Commands\n"
44 "-------------------\n",
45 CVMFS_VERSION, progname.c_str());
46 const vector<publish::Command *> commands = clist.commands();
47
48 string::size_type max_len = 0;
49 for (unsigned i = 0; i < commands.size(); ++i) {
50 if (commands[i]->IsHidden())
51 continue;
52 max_len = std::max(commands[i]->GetName().length(), max_len);
53 }
54
55 for (unsigned i = 0; i < commands.size(); ++i) {
56 if (commands[i]->IsHidden())
57 continue;
58 LogCvmfs(kLogCvmfs, kLogStdout | kLogNoLinebreak, " %s",
59 commands[i]->GetName().c_str());
60 for (unsigned p = commands[i]->GetName().length(); p < max_len; ++p)
61 LogCvmfs(kLogCvmfs, kLogStdout | kLogNoLinebreak, " ");
62 LogCvmfs(kLogCvmfs, kLogStdout, " %s", commands[i]->GetBrief().c_str());
63 }
64
65 LogCvmfs(kLogCvmfs, kLogStdout | kLogNoLinebreak, "\n");
66 }
67
68
69 int main(int argc, char **argv) {
70 publish::CommandList commands;
71 commands.TakeCommand(new publish::CmdMkfs());
72 commands.TakeCommand(new publish::CmdTransaction());
73 commands.TakeCommand(new publish::CmdCommit());
74 commands.TakeCommand(new publish::CmdAbort());
75 commands.TakeCommand(new publish::CmdEnter());
76 commands.TakeCommand(new publish::CmdInfo());
77 commands.TakeCommand(new publish::CmdDiff());
78 commands.TakeCommand(new publish::CmdHelp(&commands));
79 commands.TakeCommand(new publish::CmdZpipe());
80 commands.TakeCommand(new publish::CmdHash());
81 commands.TakeCommand(new publish::CmdLsof());
82
83 if (argc < 2) {
84 Usage(argv[0], commands);
85 return 1;
86 }
87 if ((string(argv[1]) == "--help") || (string(argv[1]) == "-h")) {
88 Usage(argv[0], commands);
89 return 0;
90 }
91 if ((string(argv[1]) == "--version") || (string(argv[1]) == "-v")) {
92 PrintVersion();
93 return 0;
94 }
95
96 publish::Command *command = commands.Find(argv[1]);
97 if (command == NULL) {
98 LogCvmfs(kLogCvmfs, kLogStderr, "unknown command: %s", argv[1]);
99 Usage(argv[0], commands);
100 return 1;
101 }
102
103 try {
104 const publish::Command::Options options = command->ParseOptions(argc, argv);
105 return command->Main(options);
106 } catch (const publish::EPublish &e) {
107 if (e.failure() == publish::EPublish::kFailInvocation) {
108 LogCvmfs(kLogCvmfs, kLogStderr, "Invocation error: %s", e.msg().c_str());
109 } else if (e.failure() == publish::EPublish::kFailMissingDependency) {
110 LogCvmfs(kLogCvmfs, kLogStderr, "Missing dependency: %s",
111 e.msg().c_str());
112 } else if (e.failure() == publish::EPublish::kFailPermission) {
113 LogCvmfs(kLogCvmfs, kLogStderr, "Permission error: %s", e.msg().c_str());
114 } else {
115 LogCvmfs(kLogCvmfs, kLogStderr, "(unexpected termination) %s", e.what());
116 }
117 return 1;
118 }
119 }
120