mirror of
https://github.com/clearlinux/systemd-stable.git
synced 2026-09-03 20:21:33 +00:00
util, core: add support for ephemeral status lines
Ephemeral status lines do not end with a newline and they expect to be overwritten by the next printed status line.
This commit is contained in:
+1
-1
@@ -649,7 +649,7 @@ static void job_print_status_message(Unit *u, JobType t, JobResult result) {
|
|||||||
|
|
||||||
case JOB_FAILED:
|
case JOB_FAILED:
|
||||||
unit_status_printf(u, ANSI_HIGHLIGHT_RED_ON "FAILED" ANSI_HIGHLIGHT_OFF, format);
|
unit_status_printf(u, ANSI_HIGHLIGHT_RED_ON "FAILED" ANSI_HIGHLIGHT_OFF, format);
|
||||||
manager_status_printf(u->manager, NULL, "See 'systemctl status %s' for details.", u->id);
|
manager_status_printf(u->manager, false, NULL, "See 'systemctl status %s' for details.", u->id);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JOB_DEPENDENCY:
|
case JOB_DEPENDENCY:
|
||||||
|
|||||||
+2
-2
@@ -2494,7 +2494,7 @@ static bool manager_get_show_status(Manager *m) {
|
|||||||
return plymouth_running();
|
return plymouth_running();
|
||||||
}
|
}
|
||||||
|
|
||||||
void manager_status_printf(Manager *m, const char *status, const char *format, ...) {
|
void manager_status_printf(Manager *m, bool ephemeral, const char *status, const char *format, ...) {
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
if (!manager_get_show_status(m))
|
if (!manager_get_show_status(m))
|
||||||
@@ -2504,7 +2504,7 @@ void manager_status_printf(Manager *m, const char *status, const char *format, .
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
status_vprintf(status, true, format, ap);
|
status_vprintf(status, true, ephemeral, format, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -293,6 +293,6 @@ void manager_undo_generators(Manager *m);
|
|||||||
void manager_recheck_journal(Manager *m);
|
void manager_recheck_journal(Manager *m);
|
||||||
|
|
||||||
void manager_set_show_status(Manager *m, bool b);
|
void manager_set_show_status(Manager *m, bool b);
|
||||||
void manager_status_printf(Manager *m, const char *status, const char *format, ...);
|
void manager_status_printf(Manager *m, bool ephemeral, const char *status, const char *format, ...);
|
||||||
|
|
||||||
void watch_init(Watch *w);
|
void watch_init(Watch *w);
|
||||||
|
|||||||
+11
-5
@@ -2859,12 +2859,13 @@ cpu_set_t* cpu_set_malloc(unsigned *ncpus) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int status_vprintf(const char *status, bool ellipse, const char *format, va_list ap) {
|
int status_vprintf(const char *status, bool ellipse, bool ephemeral, const char *format, va_list ap) {
|
||||||
static const char status_indent[] = " "; /* "[" STATUS "] " */
|
static const char status_indent[] = " "; /* "[" STATUS "] " */
|
||||||
_cleanup_free_ char *s = NULL;
|
_cleanup_free_ char *s = NULL;
|
||||||
_cleanup_close_ int fd = -1;
|
_cleanup_close_ int fd = -1;
|
||||||
struct iovec iovec[5];
|
struct iovec iovec[6];
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
static bool prev_ephemeral;
|
||||||
|
|
||||||
assert(format);
|
assert(format);
|
||||||
|
|
||||||
@@ -2902,6 +2903,10 @@ int status_vprintf(const char *status, bool ellipse, const char *format, va_list
|
|||||||
|
|
||||||
zero(iovec);
|
zero(iovec);
|
||||||
|
|
||||||
|
if (prev_ephemeral)
|
||||||
|
IOVEC_SET_STRING(iovec[n++], "\r" ANSI_ERASE_TO_END_OF_LINE);
|
||||||
|
prev_ephemeral = ephemeral;
|
||||||
|
|
||||||
if (status) {
|
if (status) {
|
||||||
if (!isempty(status)) {
|
if (!isempty(status)) {
|
||||||
IOVEC_SET_STRING(iovec[n++], "[");
|
IOVEC_SET_STRING(iovec[n++], "[");
|
||||||
@@ -2912,7 +2917,8 @@ int status_vprintf(const char *status, bool ellipse, const char *format, va_list
|
|||||||
}
|
}
|
||||||
|
|
||||||
IOVEC_SET_STRING(iovec[n++], s);
|
IOVEC_SET_STRING(iovec[n++], s);
|
||||||
IOVEC_SET_STRING(iovec[n++], "\n");
|
if (!ephemeral)
|
||||||
|
IOVEC_SET_STRING(iovec[n++], "\n");
|
||||||
|
|
||||||
if (writev(fd, iovec, n) < 0)
|
if (writev(fd, iovec, n) < 0)
|
||||||
return -errno;
|
return -errno;
|
||||||
@@ -2920,14 +2926,14 @@ int status_vprintf(const char *status, bool ellipse, const char *format, va_list
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int status_printf(const char *status, bool ellipse, const char *format, ...) {
|
int status_printf(const char *status, bool ellipse, bool ephemeral, const char *format, ...) {
|
||||||
va_list ap;
|
va_list ap;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(format);
|
assert(format);
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
r = status_vprintf(status, ellipse, format, ap);
|
r = status_vprintf(status, ellipse, ephemeral, format, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
|
|||||||
+3
-2
@@ -59,6 +59,7 @@ union dirent_storage {
|
|||||||
#define ANSI_HIGHLIGHT_GREEN_ON "\x1B[1;32m"
|
#define ANSI_HIGHLIGHT_GREEN_ON "\x1B[1;32m"
|
||||||
#define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m"
|
#define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m"
|
||||||
#define ANSI_HIGHLIGHT_OFF "\x1B[0m"
|
#define ANSI_HIGHLIGHT_OFF "\x1B[0m"
|
||||||
|
#define ANSI_ERASE_TO_END_OF_LINE "\x1B[K"
|
||||||
|
|
||||||
size_t page_size(void);
|
size_t page_size(void);
|
||||||
#define PAGE_ALIGN(l) ALIGN_TO((l), page_size())
|
#define PAGE_ALIGN(l) ALIGN_TO((l), page_size())
|
||||||
@@ -354,8 +355,8 @@ int pipe_eof(int fd);
|
|||||||
|
|
||||||
cpu_set_t* cpu_set_malloc(unsigned *ncpus);
|
cpu_set_t* cpu_set_malloc(unsigned *ncpus);
|
||||||
|
|
||||||
int status_vprintf(const char *status, bool ellipse, const char *format, va_list ap);
|
int status_vprintf(const char *status, bool ellipse, bool ephemeral, const char *format, va_list ap);
|
||||||
int status_printf(const char *status, bool ellipse, const char *format, ...);
|
int status_printf(const char *status, bool ellipse, bool ephemeral, const char *format, ...);
|
||||||
int status_welcome(void);
|
int status_welcome(void);
|
||||||
|
|
||||||
int fd_columns(int fd);
|
int fd_columns(int fd);
|
||||||
|
|||||||
Reference in New Issue
Block a user