CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
main.cc
Go to the documentation of this file.
1 
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"
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) {
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;
59  commands[i]->GetName().c_str());
60  for (unsigned p = commands[i]->GetName().length(); p < max_len; ++p)
62  LogCvmfs(kLogCvmfs, kLogStdout, " %s", commands[i]->GetBrief().c_str());
63  }
64 
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) {
108  LogCvmfs(kLogCvmfs, kLogStderr, "Invocation error: %s", e.msg().c_str());
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 }
static void Usage(const char *progname)
static void PrintVersion()
Definition: main.cc:29
std::string msg() const
Definition: except.h:45
void TakeCommand(Command *command)
Definition: command.cc:136
Command * Find(const std::string &name)
Definition: command.cc:125
const std::vector< Command * > & commands() const
Definition: command.h:194
int main()
Definition: helper_allow.cc:16
Options ParseOptions(int argc, char **argv)
Definition: command.cc:33
virtual int Main(const Options &options)=0
EFailures failure() const
Definition: except.h:44
CVMFS_EXPORT void LogCvmfs(const LogSource source, const int mask, const char *format,...)
Definition: logging.cc:545