1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-20 14:03:39 +03:00

Merge pull request #9550 from nosada/fix-9549

format-table: make all widths be set properly
This commit is contained in:
Yu Watanabe 2018-07-16 23:02:32 +09:00 committed by GitHub
commit 460d7ac3a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 5 deletions

View File

@ -36,7 +36,7 @@
that. The first row is always the header row. If header display is turned off we simply skip outputting the first
row. Also, when sorting rows we always leave the first row where it is, as the header shouldn't move.
- Note because there's no row and no column object some properties that might be approproate as row/column properties
- Note because there's no row and no column object some properties that might be appropriate as row/column properties
are exposed as cell properties instead. For example, the "weight" of a column (which is used to determine where to
add/remove space preferable when expanding/compressing tables horizontally) is actually made the "weight" of a
cell. Given that we usually need it per-column though we will calculate the average across every cell of the column
@ -1134,14 +1134,12 @@ int table_print(Table *t, FILE *f) {
assert(weight_sum >= column_weight[j]);
weight_sum -= column_weight[j];
if (restart)
if (restart && !finalize)
break;
}
if (finalize) {
assert(!restart);
if (finalize)
break;
}
if (!restart)
finalize = true;

View File

@ -5,6 +5,30 @@
#include "string-util.h"
#include "time-util.h"
static void test_issue_9549(void) {
_cleanup_(table_unrefp) Table *table = NULL;
_cleanup_free_ char *formatted = NULL;
assert_se(table = table_new("NAME", "TYPE", "RO", "USAGE", "CREATED", "MODIFIED"));
assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(3), 100) >= 0);
assert_se(table_add_many(table,
TABLE_STRING, "foooo",
TABLE_STRING, "raw",
TABLE_BOOLEAN, false,
TABLE_SIZE, (uint64_t) (673.7*1024*1024),
TABLE_STRING, "Wed 2018-07-11 00:10:33 JST",
TABLE_STRING, "Wed 2018-07-11 00:16:00 JST") >= 0);
table_set_width(table, 75);
assert_se(table_format(table, &formatted) >= 0);
printf("%s\n", formatted);
assert_se(streq(formatted,
"NAME TYPE RO USAGE CREATED MODIFIED \n"
"foooo raw no 673.6M Wed 2018-07-11 00:10:33 J… Wed 2018-07-11 00:16:00 JST\n"
));
}
int main(int argc, char *argv[]) {
_cleanup_(table_unrefp) Table *t = NULL;
@ -135,5 +159,7 @@ int main(int argc, char *argv[]) {
" yes xxx yes xxx xxx \n"
"5min 5min \n"));
test_issue_9549();
return 0;
}