systemctl: suppress duplicate newline if there's not log output in "systemctl status"

This commit is contained in:
Lennart Poettering 2014-03-13 03:58:03 +01:00
parent 15ef11449b
commit ea6c2dd1f8
3 changed files with 22 additions and 4 deletions

View file

@ -927,6 +927,21 @@ int output_journal(
return ret;
}
static int maybe_print_begin_newline(FILE *f, OutputFlags *flags) {
assert(f);
assert(flags);
if (!(*flags & OUTPUT_BEGIN_NEWLINE))
return 0;
/* Print a beginning new line if that's request, but only once
* on the first line we print. */
fputc('\n', f);
*flags &= ~OUTPUT_BEGIN_NEWLINE;
return 0;
}
static int show_journal(FILE *f,
sd_journal *j,
OutputMode mode,
@ -984,6 +999,7 @@ static int show_journal(FILE *f,
}
line ++;
maybe_print_begin_newline(f, &flags);
r = output_journal(f, j, mode, n_columns, flags, ellipsized);
if (r < 0)
@ -1004,8 +1020,10 @@ static int show_journal(FILE *f,
if (r < 0)
goto finish;
if (r > 0 && not_before < cutoff)
if (r > 0 && not_before < cutoff) {
maybe_print_begin_newline(f, &flags);
fprintf(f, "Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.\n");
}
warn_cutoff = false;
}

View file

@ -42,5 +42,6 @@ typedef enum OutputFlags {
OUTPUT_WARN_CUTOFF = 1 << 2,
OUTPUT_FULL_WIDTH = 1 << 3,
OUTPUT_COLOR = 1 << 4,
OUTPUT_CATALOG = 1 << 5
OUTPUT_CATALOG = 1 << 5,
OUTPUT_BEGIN_NEWLINE = 1 << 6,
} OutputFlags;

View file

@ -3226,7 +3226,6 @@ static void print_status_info(
}
if (i->id && arg_transport == BUS_TRANSPORT_LOCAL) {
printf("\n");
show_journal_by_unit(stdout,
i->id,
arg_output,
@ -3234,7 +3233,7 @@ static void print_status_info(
i->inactive_exit_timestamp_monotonic,
arg_lines,
getuid(),
flags,
flags | OUTPUT_BEGIN_NEWLINE,
arg_scope == UNIT_FILE_SYSTEM,
ellipsized);
}