summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-03-08 01:44:19 +0100
committerLennart Poettering <lennart@poettering.net>2011-03-08 01:53:47 +0100
commitd68201e9aa5e9ebd6085b1bb8892c42e9d20be75 (patch)
treef6d4a0193e7d9fcf78f7df35a022ada939f1ca60
parent81253930180bac6b6fb372a9c7bea724bd795c86 (diff)
downloadsystemd-d68201e9aa5e9ebd6085b1bb8892c42e9d20be75.tar.gz
job: introduce new job result code 'skipped' to use when pre conditions of job did not apply
https://bugzilla.redhat.com/show_bug.cgi?id=682245 https://bugzilla.redhat.com/show_bug.cgi?id=635780
-rw-r--r--src/job.c5
-rw-r--r--src/job.h1
-rw-r--r--src/systemctl.c8
3 files changed, 11 insertions, 3 deletions
diff --git a/src/job.c b/src/job.c
index 206490ffbb..f5d3ff8a3a 100644
--- a/src/job.c
+++ b/src/job.c
@@ -465,6 +465,8 @@ int job_run_and_invalidate(Job *j) {
if ((j = manager_get_job(m, id))) {
if (r == -EALREADY)
r = job_finish_and_invalidate(j, JOB_DONE);
+ else if (r == -ENOEXEC)
+ r = job_finish_and_invalidate(j, JOB_SKIPPED);
else if (r == -EAGAIN)
j->state = JOB_WAITING;
else if (r < 0)
@@ -702,7 +704,8 @@ static const char* const job_result_table[_JOB_RESULT_MAX] = {
[JOB_CANCELED] = "canceled",
[JOB_TIMEOUT] = "timeout",
[JOB_FAILED] = "failed",
- [JOB_DEPENDENCY] = "dependency"
+ [JOB_DEPENDENCY] = "dependency",
+ [JOB_SKIPPED] = "skipped"
};
DEFINE_STRING_TABLE_LOOKUP(job_result, JobResult);
diff --git a/src/job.h b/src/job.h
index de0c1d2317..2c65d94879 100644
--- a/src/job.h
+++ b/src/job.h
@@ -78,6 +78,7 @@ enum JobResult {
JOB_TIMEOUT,
JOB_FAILED,
JOB_DEPENDENCY,
+ JOB_SKIPPED,
_JOB_RESULT_MAX,
_JOB_RESULT_INVALID = -1
};
diff --git a/src/systemctl.c b/src/systemctl.c
index 6adcbcc066..f5a87fc701 100644
--- a/src/systemctl.c
+++ b/src/systemctl.c
@@ -1249,7 +1249,7 @@ static int wait_for_jobs(DBusConnection *bus, Set *s) {
log_error("Job canceled.");
else if (streq(d.result, "dependency"))
log_error("A dependency job failed. See system logs for details.");
- else if (!streq(d.result, "done"))
+ else if (!streq(d.result, "done") && !streq(d.result, "skipped"))
log_error("Job failed. See system logs and 'systemctl status' for details.");
}
@@ -1257,7 +1257,7 @@ static int wait_for_jobs(DBusConnection *bus, Set *s) {
r = -ETIME;
else if (streq_ptr(d.result, "canceled"))
r = -ECANCELED;
- else if (!streq_ptr(d.result, "done"))
+ else if (!streq_ptr(d.result, "done") && !streq_ptr(d.result, "skipped"))
r = -EIO;
else
r = 0;
@@ -1417,11 +1417,15 @@ static int start_unit(DBusConnection *bus, char **args, unsigned n) {
streq(args[0], "stop") ? "StopUnit" :
streq(args[0], "reload") ? "ReloadUnit" :
streq(args[0], "restart") ? "RestartUnit" :
+
streq(args[0], "try-restart") ||
streq(args[0], "condrestart") ? "TryRestartUnit" :
+
streq(args[0], "reload-or-restart") ? "ReloadOrRestartUnit" :
+
streq(args[0], "reload-or-try-restart") ||
streq(args[0], "condreload") ||
+
streq(args[0], "force-reload") ? "ReloadOrTryRestartUnit" :
"StartUnit";