aboutsummaryrefslogtreecommitdiff
path: root/0.8.0/src/paludis/command_line.cc
blob: a3b10c0f430e93293ae37ee52f3fcfcf8a565f63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
/* vim: set sw=4 sts=4 et foldmethod=syntax : */

/*
 * Copyright (c) 2006 Ciaran McCreesh <ciaranm@ciaranm.org>
 *
 * This file is part of the Paludis package manager. Paludis is free software;
 * you can redistribute it and/or modify it under the terms of the GNU General
 * Public License version 2, as published by the Free Software Foundation.
 *
 * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include "command_line.hh"

CommandLine::CommandLine() :
    ArgsHandler(),

    action_args(this, "Actions",
            "Selects which basic action to perform. Exactly one action should "
            "be specified."),
    a_query(&action_args,     "query",        'q',  "Query for package information"),
    a_install(&action_args,   "install",      'i',  "Install one or more packages"),
    a_uninstall(&action_args, "uninstall",    'u',  "Uninstall one or more packages"),
    a_sync(&action_args,      "sync",         's',  "Sync all or specified repositories"),
    a_contents(&action_args,  "contents",     'k',  "Display contents of a package"),
    a_owner(&action_args,     "owner",        'o',  "Display the owner of a file"),
    a_version(&action_args,   "version",      'V',  "Display program version"),
    a_info(&action_args,      "info",         'I',  "Display program version and system information"),
    a_help(&action_args,      "help",         'h',  "Display program help"),

    action_args_internal(this, "More actions",
            "Additional actions, mostly for script and internal use."),
    a_has_version(&action_args_internal, "has-version", '\0', "Check whether the specified atom is installed"),
    a_best_version(&action_args_internal, "best-version", '\0', "Display the best version of the specified atom"),
    a_environment_variable(&action_args_internal, "environment-variable", '\0', "Display the value of an environment "
            "variable for a particular package"),
    a_configuration_variable(&action_args_internal, "configuration-variable", '\0', "Display the value of a "
            "configuration variable for a particular repository"),
    a_list_repositories(&action_args_internal, "list-repositories", '\0', "List available repositories"),
    a_list_categories(&action_args_internal, "list-categories", '\0', "List available categories"),
    a_list_packages(&action_args_internal, "list-packages", '\0', "List available packages"),
    a_list_sets(&action_args_internal, "list-sets", '\0', "List available package sets"),
    a_list_sync_protocols(&action_args_internal, "list-sync-protocols", '\0', "List available sync protocols"),
    a_list_repository_formats(&action_args_internal, "list-repository-formats", '\0',
            "List available repository formats"),
    a_list_dep_tag_categories(&action_args_internal, "list-dep-tag-categories", '\0', "List known dep tag categories"),
    a_update_news(&action_args_internal, "update-news", '\0', "Regenerate news.unread files"),

    general_args(this, "General options",
            "Options which are relevant for most or all actions."),
    a_log_level(&general_args, "log-level",  '\0', "Specify the log level",
            paludis::args::EnumArg::EnumArgOptions("debug", "Show debug output (noisy)")
            ("qa",      "Show QA messages and warnings only")
            ("warning", "Show warnings only")
            ("silent",  "Suppress all log messages"),
            "qa"),
    a_no_colour(&general_args, "no-colour", '\0', "Do not use colour"),
    a_no_color(&a_no_colour, "no-color"),
    a_config_suffix(&general_args, "config-suffix", 'c', "Config directory suffix"),

    query_args(this, "Query options",
            "Options which are relevant for --query."),
    a_show_slot(&query_args,        "show-slot",    'S', "Show SLOTs"),
    a_show_deps(&query_args,        "show-deps",    'D', "Show dependencies"),
    a_show_metadata(&query_args,    "show-metadata", 'M', "Show raw metadata"),

    install_args(this, "Install, Uninstall options",
            "Options which are relevant for --install or --uninstall."),
    a_pretend(&install_args, "pretend", 'p', "Pretend only"),
    a_preserve_world(&install_args, "preserve-world", '1', "Don't modify the world file"),
    a_no_config_protection(&install_args, "no-config-protection", '\0', "Disable config file protection (dangerous)"),
    a_fetch(&install_args, "fetch", 'f', "Only fetch sources; don't install anything"),
    a_show_install_reasons(&install_args, "show-install-reasons", '\0', "Show why packages are being installed",
            paludis::args::EnumArg::EnumArgOptions
            ("none",    "Don't show any information")
            ("summary", "Show a summary")
            ("full",    "Show full output (can be very verbose)"),
            "none"),

    dl_args(this, "DepList behaviour",
            "Modify dependency list generation behaviour. Use with caution."),

    dl_reinstall(&dl_args, "dl-reinstall", '\0', "When to reinstall packages",
            paludis::args::EnumArg::EnumArgOptions
            ("never",          "Never")
            ("always",         "Always")
            ("if-use-changed", "If USE flags have changed"),
            "never"),
    dl_upgrade(&dl_args, "dl-upgrade", '\0', "When to upgrade packages",
            paludis::args::EnumArg::EnumArgOptions
            ("always",        "Always")
            ("as-needed",     "As needed"),
            "always"),

    dl_installed_deps_pre(&dl_args, "dl-installed-deps-pre", '\0', "How to handle pre dependencies for installed packages",
            paludis::args::EnumArg::EnumArgOptions
            ("pre",           "As pre dependencies")
            ("pre-or-post",   "As pre dependencies, or post depenencies where needed")
            ("post",          "As post dependencies")
            ("try-post",      "As post dependencies, with no error for failures")
            ("discard",       "Discard"),
            "discard"),
    dl_installed_deps_runtime(&dl_args, "dl-installed-deps-runtime", '\0', "How to handle runtime dependencies for installed packages",
            paludis::args::EnumArg::EnumArgOptions
            ("pre",           "As pre dependencies")
            ("pre-or-post",   "As pre dependencies, or post depenencies where needed")
            ("post",          "As post dependencies")
            ("try-post",      "As post dependencies, with no error for failures")
            ("discard",       "Discard"),
            "try-post"),
    dl_installed_deps_post(&dl_args, "dl-installed-deps-post", '\0', "How to handle post dependencies for installed packages",
            paludis::args::EnumArg::EnumArgOptions
            ("pre",           "As pre dependencies")
            ("pre-or-post",   "As pre dependencies, or post depenencies where needed")
            ("post",          "As post dependencies")
            ("try-post",      "As post dependencies, with no error for failures")
            ("discard",       "Discard"),
            "try-post"),

    dl_uninstalled_deps_pre(&dl_args, "dl-uninstalled-deps-pre", '\0', "How to handle pre dependencies for uninstalled packages",
            paludis::args::EnumArg::EnumArgOptions
            ("pre",           "As pre dependencies")
            ("pre-or-post",   "As pre dependencies, or post depenencies where needed")
            ("post",          "As post dependencies")
            ("try-post",      "As post dependencies, with no error for failures")
            ("discard",       "Discard"),
            "pre"),
    dl_uninstalled_deps_runtime(&dl_args, "dl-uninstalled-deps-runtime", '\0', "How to handle runtime dependencies for uninstalled packages",
            paludis::args::EnumArg::EnumArgOptions
            ("pre",           "As pre dependencies")
            ("pre-or-post",   "As pre dependencies, or post depenencies where needed")
            ("post",          "As post dependencies")
            ("try-post",      "As post dependencies, with no error for failures")
            ("discard",       "Discard"),
            "pre-or-post"),
    dl_uninstalled_deps_post(&dl_args, "dl-uninstalled-deps-post", '\0', "How to handle post dependencies for uninstalled packages",
            paludis::args::EnumArg::EnumArgOptions
            ("pre",           "As pre dependencies")
            ("pre-or-post",   "As pre dependencies, or post depenencies where needed")
            ("post",          "As post dependencies")
            ("try-post",      "As post dependencies, with no error for failures")
            ("discard",       "Discard"),
            "post"),

    dl_circular(&dl_args, "dl-circular", '\0', "How to handle circular dependencies",
            paludis::args::EnumArg::EnumArgOptions
            ("error",         "Raise an error")
            ("discard",       "Discard"),
            "error"),

    list_args(this, "List options",
            "Options relevant for one or more of the --list actions."),
    a_repository(&list_args, "repository", '\0', "Matches with this repository name only"),
    a_category(&list_args,   "category",   '\0', "Matches with this category name only"),
    a_package(&list_args,    "package",    '\0', "Matches with this package name only"),
    a_set(&list_args,        "set",        '\0', "Matches with this package set name only"),

    owner_args(this, "Owner options",
            "Options relevant for the --owner actions."),
    a_full_match(&owner_args, "full-match", '\0', "Match whole filename")
{
    add_usage_line("--query [query options] target ...");
    add_usage_line("--install [install options] target ...");
    add_usage_line("--sync [target (leave blank for all)]");
    add_usage_line("--contents target ...");
    add_usage_line("--owner [owner options] files ...");
    add_usage_line("--version");
    add_usage_line("--info");
    add_usage_line("--help");

    add_usage_line("--has-version atom");
    add_usage_line("--best-version atom");
    add_usage_line("--environment-variable atom variable");
    add_usage_line("--configuration-variable repository variable");
    add_usage_line("--list-repositories [--repository repo1 --repository repo2 ...]");
    add_usage_line("--list-categories [--repository repo1 ... --category cat1 --category cat2 ...]");
    add_usage_line("--list-packages [--repository repo1 ... --category cat1 ... --package pkg1 --package pkg2 ...]");
    add_usage_line("--list-sets [--repository repo1 ... --set set1 ...]");
    add_usage_line("--list-sync-protocols");
    add_usage_line("--list-repository-formats");
    add_usage_line("--list-dep-tag-categories");
    add_usage_line("--update-news");

    add_enviromnent_variable("PALUDIS_HOME", "Overrides the home directory used when searching "
            "for configuration files etc.");
    add_enviromnent_variable("PALUDIS_NO_GLOBAL_HOOKS", "Don't use global hooks. Mostly for "
            "internal and test case use.");
    add_enviromnent_variable("PALUDIS_SKIP_CONFIG", "Don't load configuration. Mostly for "
            "internal and test case use.");
    add_enviromnent_variable("PALUDIS_EBUILD_DIR", "Where to look for ebuild.bash and related "
            "utilities.");
    add_enviromnent_variable("PALUDIS_REPOSITORY_SO_DIR", "Where to look for repository .so "
            "files.");
}

std::string
CommandLine::app_name() const
{
    return "paludis";
}

std::string
CommandLine::app_synopsis() const
{
    return "The other package mangler";
}

std::string
CommandLine::app_description() const
{
    return
        "paludis is the command line interface used to handle packages. It can query and "
        "install packages, update repositories and display information about packages "
        "already installed on a system.";
}

CommandLine::~CommandLine()
{
}