#define ZYPP_BASE_LOGGER_LOGGROUP "zypper"
#define RANDOM_TOKEN "sad987432JJDJD948394DDDxxx22"
+// ===== exit codes ======
+
+#define ZYPPER_EXIT_OK 0
+// errors
+#define ZYPPER_EXIT_ERR_SYNTAX 1 // syntax error, e.g. zypper instal, zypper in --unknown option
+#define ZYPPER_EXIT_ERR_INVALID_ARGS 2 // invalid arguments given, e.g. zypper source-add httttps://asdf.net
+#define ZYPPER_EXIT_ERR_ZYPP 3 // error indicated from within libzypp, e.g. God = zypp::getZYpp() threw an exception
+#define ZYPPER_EXIT_ERR_PRIVILEGES 4 // unsufficient privileges for the operation
+#define ZYPPER_EXIT_ERR_BUG 5 // undetermined error
+// info
+#define ZYPPER_EXIT_INF_UPDATE_NEEDED -1 // update needed
+#define ZYPPER_EXIT_INF_SEC_UPDATE_NEEDED -2 // security update needed
+#define ZYPPER_EXIT_INF_REBOOT_NEEDED -3
+#define ZYPPER_EXIT_INF_RESTART_NEEDED -4
+
struct Settings
{
Settings()
else if (!command.empty()) { // empty command is treated earlier
cerr << "Unknown command '" << command << "'." << endl << endl;
cerr << help_commands;
- return 1;
+ return ZYPPER_EXIT_ERR_SYNTAX;
}
parsed_opts copts = parse_options (argc, argv, specific_options);
if (copts.count("_unknown"))
- return 1;
+ return ZYPPER_EXIT_ERR_SYNTAX;
// treat --help command option like global --help option from now on
// i.e. when used together with command to print command specific help
{
Url url = make_url (*it);
if (!url.isValid())
- return 1;
+ return ZYPPER_EXIT_ERR_INVALID_ARGS;
gSettings.additional_sources.push_back(url);
}
}
ZYPP_CAUGHT (excpt_r);
ERR << "a ZYpp transaction is already in progress." << endl;
cerr << "a ZYpp transaction is already in progress." << endl;
- return 1;
+ return ZYPPER_EXIT_ERR_ZYPP;
}
ResObject::Kind kind;
if (command == "moo") {
cout << " \\\\\\\\\\\n \\\\\\\\\\\\\\__o\n__\\\\\\\\\\\\\\'/_" << endl;
- return 0;
+ return ZYPPER_EXIT_OK;
}
// --------------------------( service list )-------------------------------
if ( geteuid() != 0 )
{
cerr << "Sorry, you need root privileges to view system sources." << endl;
- return 1;
+ return ZYPPER_EXIT_ERR_PRIVILEGES;
}
list_system_sources();
- return 0;
+ return ZYPPER_EXIT_OK;
}
// --------------------------( service add )--------------------------------
Url url = make_url (repourl);
if (!url.isValid())
- return 1;
+ return ZYPPER_EXIT_ERR_INVALID_ARGS;
string alias = repoalias;
if (alias.empty ())
alias = url.asString();
catch ( const Exception & excpt_r )
{
cerr << excpt_r.asUserString() << endl;
- return 1;
+ return ZYPPER_EXIT_ERR_ZYPP;
}
- return 0;
+ return ZYPPER_EXIT_OK;
}
// --------------------------( service delete )-----------------------------
{
ZYPP_CAUGHT (excpt_r);
cerr << excpt_r.asUserString() << endl;
- return 1;
+ return ZYPPER_EXIT_ERR_ZYPP;
}
- return 0;
+ return ZYPPER_EXIT_OK;
}
// --------------------------( service rename )-----------------------------
catch ( const Exception & excpt_r )
{
cerr << excpt_r.asUserString() << endl;
- return 1;
+ return ZYPPER_EXIT_ERR_ZYPP;
}
- return 0;
+ return ZYPPER_EXIT_OK;
}
// --------------------------( refresh )------------------------------------
kind = string_to_kind (skind);
if (kind == ResObject::Kind ()) {
cerr << "Unknown resolvable type " << skind << endl;
- return 1;
+ return ZYPPER_EXIT_ERR_INVALID_ARGS;
}
cond_init_system_sources ();
solve_and_commit (copts.count("no-confirm"));
}
- return 0;
+ return ZYPPER_EXIT_OK;
}
// --------------------------( search )-------------------------------------
kind = string_to_kind (skind);
if (kind == ResObject::Kind ()) {
cerr << "Unknown resolvable type " << skind << endl;
- return 1;
+ return ZYPPER_EXIT_ERR_INVALID_ARGS;
}
options.setKind(kind);
}
cout << t;
}
- return 0;
+ return ZYPPER_EXIT_OK;
}
// --------------------------( patch check )--------------------------------
patch_check ();
if (gData.security_patches_count > 0)
- return 2;
+ return ZYPPER_EXIT_INF_SEC_UPDATE_NEEDED;
if (gData.patches_count > 0)
- return 1;
- return 0;
+ return ZYPPER_EXIT_INF_UPDATE_NEEDED;
+ return ZYPPER_EXIT_OK;
}
// --------------------------( patches )------------------------------------
cond_load_resolvables ();
establish ();
show_patches ();
- return 0;
+ return ZYPPER_EXIT_OK;
}
// --------------------------( list updates )-------------------------------
kind = string_to_kind (skind);
if (kind == ResObject::Kind ()) {
cerr << "Unknown resolvable type " << skind << endl;
- return 1;
+ return ZYPPER_EXIT_ERR_INVALID_ARGS;
}
cond_init_target ();
list_updates (kind);
- return 0;
+ return ZYPPER_EXIT_OK;
}
// -----------------------------( update )----------------------------------
kind = string_to_kind (skind);
if (kind == ResObject::Kind ()) {
cerr << "Unknown resolvable type " << skind << endl;
- return 1;
+ return ZYPPER_EXIT_ERR_INVALID_ARGS;
}
cond_init_target ();
mark_updates (kind);
solve_and_commit (copts.count("no-confirm"));
- return 0;
+ return ZYPPER_EXIT_OK;
}
// -----------------------------( info )------------------------------------
printInfo(command,arguments);
- return 0;
+ return ZYPPER_EXIT_OK;
}
- return 1; // if the program reaches this line, something went wrong
+ // if the program reaches this line, something went wrong
+ return ZYPPER_EXIT_ERR_BUG;
}
void command_shell ()