Use Finished instead of Started for Type=oneshot services (#14851)

UnitStatusMessageFormats.finished_job, if present,
will be called with the same arguments as
job_get_done_status_message_format() to provide a format string
appropriate for the context

This commit replaces "Started" with "Finished" for started oneshot
units, as mentioned in the referenced issue

Closes #2458.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2020-03-05 17:24:19 +01:00 committed by GitHub
parent 412be51fe8
commit eda0cbf071
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 3 deletions

View File

@ -797,9 +797,15 @@ _pure_ static const char *job_get_done_status_message_format(Unit *u, JobType t,
assert(t < _JOB_TYPE_MAX);
if (IN_SET(t, JOB_START, JOB_STOP, JOB_RESTART)) {
const UnitStatusMessageFormats *formats = &UNIT_VTABLE(u)->status_message_formats;
if (formats->finished_job) {
format = formats->finished_job(u, t, result);
if (format)
return format;
}
format = t == JOB_START ?
UNIT_VTABLE(u)->status_message_formats.finished_start_job[result] :
UNIT_VTABLE(u)->status_message_formats.finished_stop_job[result];
formats->finished_start_job[result] :
formats->finished_stop_job[result];
if (format)
return format;
}

View File

@ -4308,6 +4308,18 @@ static int service_can_clean(Unit *u, ExecCleanMask *ret) {
return exec_context_get_clean_mask(&s->exec_context, ret);
}
static const char *service_finished_job(Unit *u, JobType t, JobResult result) {
if (t == JOB_START && result == JOB_DONE) {
Service *s = SERVICE(u);
if (s->type == SERVICE_ONESHOT)
return "Finished %s.";
}
/* Fall back to generic */
return NULL;
}
static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
[SERVICE_RESTART_NO] = "no",
[SERVICE_RESTART_ON_SUCCESS] = "on-success",
@ -4455,7 +4467,6 @@ const UnitVTable service_vtable = {
[1] = "Stopping %s...",
},
.finished_start_job = {
[JOB_DONE] = "Started %s.",
[JOB_FAILED] = "Failed to start %s.",
[JOB_SKIPPED] = "Skipped %s.",
},
@ -4463,5 +4474,6 @@ const UnitVTable service_vtable = {
[JOB_DONE] = "Stopped %s.",
[JOB_FAILED] = "Stopped (with error) %s.",
},
.finished_job = service_finished_job,
},
};

View File

@ -382,6 +382,9 @@ typedef struct UnitStatusMessageFormats {
const char *starting_stopping[2];
const char *finished_start_job[_JOB_RESULT_MAX];
const char *finished_stop_job[_JOB_RESULT_MAX];
/* If this entry is present, it'll be called to provide a context-dependent format string,
* or NULL to fall back to finished_{start,stop}_job; if those are NULL too, fall back to generic. */
const char *(*finished_job)(Unit *u, JobType t, JobResult result);
} UnitStatusMessageFormats;
/* Flags used when writing drop-in files or transient unit files */