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:
parent
412be51fe8
commit
eda0cbf071
|
@ -797,9 +797,15 @@ _pure_ static const char *job_get_done_status_message_format(Unit *u, JobType t,
|
||||||
assert(t < _JOB_TYPE_MAX);
|
assert(t < _JOB_TYPE_MAX);
|
||||||
|
|
||||||
if (IN_SET(t, JOB_START, JOB_STOP, JOB_RESTART)) {
|
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 ?
|
format = t == JOB_START ?
|
||||||
UNIT_VTABLE(u)->status_message_formats.finished_start_job[result] :
|
formats->finished_start_job[result] :
|
||||||
UNIT_VTABLE(u)->status_message_formats.finished_stop_job[result];
|
formats->finished_stop_job[result];
|
||||||
if (format)
|
if (format)
|
||||||
return format;
|
return format;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4308,6 +4308,18 @@ static int service_can_clean(Unit *u, ExecCleanMask *ret) {
|
||||||
return exec_context_get_clean_mask(&s->exec_context, 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] = {
|
static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
|
||||||
[SERVICE_RESTART_NO] = "no",
|
[SERVICE_RESTART_NO] = "no",
|
||||||
[SERVICE_RESTART_ON_SUCCESS] = "on-success",
|
[SERVICE_RESTART_ON_SUCCESS] = "on-success",
|
||||||
|
@ -4455,7 +4467,6 @@ const UnitVTable service_vtable = {
|
||||||
[1] = "Stopping %s...",
|
[1] = "Stopping %s...",
|
||||||
},
|
},
|
||||||
.finished_start_job = {
|
.finished_start_job = {
|
||||||
[JOB_DONE] = "Started %s.",
|
|
||||||
[JOB_FAILED] = "Failed to start %s.",
|
[JOB_FAILED] = "Failed to start %s.",
|
||||||
[JOB_SKIPPED] = "Skipped %s.",
|
[JOB_SKIPPED] = "Skipped %s.",
|
||||||
},
|
},
|
||||||
|
@ -4463,5 +4474,6 @@ const UnitVTable service_vtable = {
|
||||||
[JOB_DONE] = "Stopped %s.",
|
[JOB_DONE] = "Stopped %s.",
|
||||||
[JOB_FAILED] = "Stopped (with error) %s.",
|
[JOB_FAILED] = "Stopped (with error) %s.",
|
||||||
},
|
},
|
||||||
|
.finished_job = service_finished_job,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -382,6 +382,9 @@ typedef struct UnitStatusMessageFormats {
|
||||||
const char *starting_stopping[2];
|
const char *starting_stopping[2];
|
||||||
const char *finished_start_job[_JOB_RESULT_MAX];
|
const char *finished_start_job[_JOB_RESULT_MAX];
|
||||||
const char *finished_stop_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;
|
} UnitStatusMessageFormats;
|
||||||
|
|
||||||
/* Flags used when writing drop-in files or transient unit files */
|
/* Flags used when writing drop-in files or transient unit files */
|
||||||
|
|
Loading…
Reference in a new issue