CernVM-FS
2.12.0
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
main.cc
Go to the documentation of this file.
1
7
#include <algorithm>
8
#include <cstdlib>
9
#include <string>
10
#include <vector>
11
12
#include "
publish/cmd_abort.h
"
13
#include "
publish/cmd_commit.h
"
14
#include "
publish/cmd_diff.h
"
15
#include "
publish/cmd_enter.h
"
16
#include "
publish/cmd_hash.h
"
17
#include "
publish/cmd_help.h
"
18
#include "
publish/cmd_info.h
"
19
#include "
publish/cmd_lsof.h
"
20
#include "
publish/cmd_mkfs.h
"
21
#include "
publish/cmd_transaction.h
"
22
#include "
publish/cmd_zpipe.h
"
23
#include "
publish/command.h
"
24
#include "
publish/except.h
"
25
#include "
util/logging.h
"
26
27
using namespace
std;
// NOLINT
28
29
30
static
void
PrintVersion
() {
31
LogCvmfs
(
kLogCvmfs
,
kLogStdout
,
"CernVM-FS Server Tool %s"
, CVMFS_VERSION);
32
}
33
34
static
void
Usage
(
const
std::string &progname,
35
const
publish::CommandList
&clist)
36
{
37
LogCvmfs
(
kLogCvmfs
,
kLogStdout
,
38
"CernVM-FS Server Tool %s\n"
39
"NOTE: This utility is for CernVM-FS internal use only for the time being!"
40
"\n\n"
41
"Usage:\n"
42
"------\n"
43
" %s COMMAND [options] <parameters>\n\n"
44
"Supported Commands\n"
45
"-------------------\n"
,
46
CVMFS_VERSION, progname.c_str());
47
const
vector<publish::Command *> commands = clist.
commands
();
48
49
string::size_type max_len = 0;
50
for
(
unsigned
i = 0; i < commands.size(); ++i) {
51
if
(commands[i]->IsHidden())
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())
continue
;
57
LogCvmfs
(
kLogCvmfs
,
kLogStdout
|
kLogNoLinebreak
,
" %s"
,
58
commands[i]->GetName().c_str());
59
for
(
unsigned
p = commands[i]->GetName().length(); p < max_len; ++p)
60
LogCvmfs
(
kLogCvmfs
,
kLogStdout
|
kLogNoLinebreak
,
" "
);
61
LogCvmfs
(
kLogCvmfs
,
kLogStdout
,
" %s"
, commands[i]->GetBrief().c_str());
62
}
63
64
LogCvmfs
(
kLogCvmfs
,
kLogStdout
|
kLogNoLinebreak
,
"\n"
);
65
}
66
67
68
int
main
(
int
argc,
char
**argv) {
69
publish::CommandList
commands;
70
commands.
TakeCommand
(
new
publish::CmdMkfs
());
71
commands.
TakeCommand
(
new
publish::CmdTransaction
());
72
commands.
TakeCommand
(
new
publish::CmdCommit
());
73
commands.
TakeCommand
(
new
publish::CmdAbort
());
74
commands.
TakeCommand
(
new
publish::CmdEnter
());
75
commands.
TakeCommand
(
new
publish::CmdInfo
());
76
commands.
TakeCommand
(
new
publish::CmdDiff
());
77
commands.
TakeCommand
(
new
publish::CmdHelp
(&commands));
78
commands.
TakeCommand
(
new
publish::CmdZpipe
());
79
commands.
TakeCommand
(
new
publish::CmdHash
());
80
commands.
TakeCommand
(
new
publish::CmdLsof
());
81
82
if
(argc < 2) {
83
Usage
(argv[0], commands);
84
return
1;
85
}
86
if
((
string
(argv[1]) ==
"--help"
) || (
string
(argv[1]) ==
"-h"
)) {
87
Usage
(argv[0], commands);
88
return
0;
89
}
90
if
((
string
(argv[1]) ==
"--version"
) || (
string
(argv[1]) ==
"-v"
)) {
91
PrintVersion
();
92
return
0;
93
}
94
95
publish::Command
*command = commands.
Find
(argv[1]);
96
if
(command == NULL) {
97
LogCvmfs
(
kLogCvmfs
,
kLogStderr
,
"unknown command: %s"
, argv[1]);
98
Usage
(argv[0], commands);
99
return
1;
100
}
101
102
try
{
103
publish::Command::Options
options = command->
ParseOptions
(argc, argv);
104
return
command->
Main
(options);
105
}
catch
(
const
publish::EPublish
& e) {
106
if
(e.
failure
() ==
publish::EPublish::kFailInvocation
) {
107
LogCvmfs
(
kLogCvmfs
,
kLogStderr
,
"Invocation error: %s"
, e.
msg
().c_str());
108
}
else
if
(e.
failure
() ==
publish::EPublish::kFailMissingDependency
) {
109
LogCvmfs
(
kLogCvmfs
,
kLogStderr
,
110
"Missing dependency: %s"
, e.
msg
().c_str());
111
}
else
if
(e.
failure
() ==
publish::EPublish::kFailPermission
) {
112
LogCvmfs
(
kLogCvmfs
,
kLogStderr
,
113
"Permission error: %s"
, e.
msg
().c_str());
114
}
else
{
115
LogCvmfs
(
kLogCvmfs
,
kLogStderr
,
"(unexpected termination) %s"
, e.what());
116
}
117
return
1;
118
}
119
}
publish::CmdInfo
Definition:
cmd_info.h:14
except.h
cmd_commit.h
publish::CmdDiff
Definition:
cmd_diff.h:15
cmd_info.h
command.h
cmd_abort.h
publish::Command::Options
Definition:
command.h:110
cmd_zpipe.h
Usage
static void Usage(const char *progname)
Definition:
cvmfs_cache_null.cc:289
PrintVersion
static void PrintVersion()
Definition:
main.cc:30
cmd_mkfs.h
publish::CmdHash
Definition:
cmd_hash.h:14
publish::EPublish::msg
std::string msg() const
Definition:
except.h:46
publish::CommandList::TakeCommand
void TakeCommand(Command *command)
Definition:
command.cc:134
publish::CommandList::Find
Command * Find(const std::string &name)
Definition:
command.cc:123
publish::EPublish::kFailMissingDependency
Definition:
except.h:34
kLogNoLinebreak
Definition:
logging_internal.h:59
logging.h
publish::CommandList::commands
const std::vector< Command * > & commands() const
Definition:
command.h:203
main
int main()
Definition:
helper_allow.cc:16
kLogStdout
Definition:
logging_internal.h:23
kLogStderr
Definition:
logging_internal.h:24
publish::EPublish
Definition:
except.h:13
publish::CommandList
Definition:
command.h:197
publish::Command::ParseOptions
Options ParseOptions(int argc, char **argv)
Definition:
command.cc:33
publish::CmdLsof
Definition:
cmd_lsof.h:14
publish::CmdMkfs
Definition:
cmd_mkfs.h:14
cmd_help.h
publish::CmdEnter
Definition:
cmd_enter.h:18
publish::CmdHelp
Definition:
cmd_help.h:14
publish::CmdAbort
Definition:
cmd_abort.h:15
publish::EPublish::kFailPermission
Definition:
except.h:22
publish::CmdTransaction
Definition:
cmd_transaction.h:15
publish::Command::Main
virtual int Main(const Options &options)=0
publish::EPublish::kFailInvocation
Definition:
except.h:21
cmd_hash.h
publish::CmdZpipe
Definition:
cmd_zpipe.h:14
kLogCvmfs
Definition:
logging_internal.h:80
publish::EPublish::failure
EFailures failure() const
Definition:
except.h:45
cmd_transaction.h
cmd_diff.h
publish::Command
Definition:
command.h:20
cmd_enter.h
cmd_lsof.h
publish::CmdCommit
Definition:
cmd_commit.h:15
LogCvmfs
CVMFS_EXPORT void LogCvmfs(const LogSource source, const int mask, const char *format,...)
Definition:
logging.cc:528
cvmfs
cvmfs
publish
main.cc
Generated on Sun Jan 12 2025 01:18:12 for CernVM-FS by
1.8.5