From: Lennart Poettering Date: Wed, 13 Oct 2010 01:13:23 +0000 (+0200) Subject: systemctl: warn if user enables unit with no installation instructions X-Git-Tag: v12~244 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=560d8f23811162542c1748f711ea6dce269d2720 systemctl: warn if user enables unit with no installation instructions --- diff --git a/TODO b/TODO index e09d4d3e5..bda29da58 100644 --- a/TODO +++ b/TODO @@ -36,8 +36,6 @@ * if a service fails too often, make the service enter failed mode, and the socket, too. -* systemctl enable - warn about empty [Install] section - * bash completion a la gdbus * systemctl list-jobs - show dependencies diff --git a/src/systemctl.c b/src/systemctl.c index a4a76558b..671745b7d 100644 --- a/src/systemctl.c +++ b/src/systemctl.c @@ -3227,6 +3227,7 @@ typedef struct { static Hashmap *will_install = NULL, *have_installed = NULL; static Set *remove_symlinks_to = NULL; +static unsigned n_symlinks = 0; static void install_info_free(InstallInfo *i) { assert(i); @@ -3759,6 +3760,9 @@ static int install_info_apply(const char *verb, LookupPaths *paths, InstallInfo return r; } + n_symlinks += strv_length(i->aliases); + n_symlinks += strv_length(i->wanted_by); + fclose(f); if ((r = install_info_symlink_alias(verb, i, config_path)) != 0) @@ -3859,19 +3863,24 @@ static int enable_unit(DBusConnection *bus, char **args, unsigned n) { if (streq(verb, "is-enabled")) r = r > 0 ? 0 : -ENOENT; - else if (bus && - /* Don't try to reload anything if the user asked us to not do this */ - !arg_no_reload && - /* Don't try to reload anything when updating a unit globally */ - !arg_global && - /* Don't try to reload anything if we are called for system changes but the system wasn't booted with systemd */ - (arg_session || sd_booted() > 0) && - /* Don't try to reload anything if we are running in a chroot environment */ - (arg_session || running_in_chroot() <= 0) ) { - int q; + else { + if (n_symlinks <= 0) + log_warning("Unit files contain no applicable installation information. Ignoring."); + + if (bus && + /* Don't try to reload anything if the user asked us to not do this */ + !arg_no_reload && + /* Don't try to reload anything when updating a unit globally */ + !arg_global && + /* Don't try to reload anything if we are called for system changes but the system wasn't booted with systemd */ + (arg_session || sd_booted() > 0) && + /* Don't try to reload anything if we are running in a chroot environment */ + (arg_session || running_in_chroot() <= 0) ) { + int q; - if ((q = daemon_reload(bus, args, n)) < 0) - r = q; + if ((q = daemon_reload(bus, args, n)) < 0) + r = q; + } } finish: