svn commit: r337284 - projects/bectl/sbin/bectl
Kyle Evans
kevans at FreeBSD.org
Sat Aug 4 06:29:48 UTC 2018
Author: kevans
Date: Sat Aug 4 06:29:46 2018
New Revision: 337284
URL: https://svnweb.freebsd.org/changeset/base/337284
Log:
bectl(8): Sort BEs lightly by active (now or later) BE, then others
While it could be preferred to do this at insert in libbe(3), there's no
convenient way to insert at the head of an nvlist. Instead, we'll make two
passes over- once to print anything active either now or at nextboot, and
another to print everything else.
This doesn't actually impact performance in a significant way here, so we'll
worry about further optimizations if the need actually arises.
Modified:
projects/bectl/sbin/bectl/bectl.c
Modified: projects/bectl/sbin/bectl/bectl.c
==============================================================================
--- projects/bectl/sbin/bectl/bectl.c Sat Aug 4 06:14:54 2018 (r337283)
+++ projects/bectl/sbin/bectl/bectl.c Sat Aug 4 06:29:46 2018 (r337284)
@@ -59,7 +59,6 @@ struct printc {
int current_indent;
int mount_colsz;
int space_colsz;
- bool final_be;
bool hide_headers;
bool show_all_datasets;
bool show_snaps;
@@ -489,8 +488,6 @@ print_info(const char *name, nvlist_t *dsprops, struct
nvlist_free(originprops);
}
pc->current_indent = 0;
- if (!pc->final_be)
- printf("\n");
return;
}
@@ -600,9 +597,11 @@ bectl_cmd_list(int argc, char *argv[])
struct printc pc;
nvpair_t *cur;
nvlist_t *dsprops, *props;
- int opt;
+ int opt, printed;
+ boolean_t active_now, active_reboot;
props = NULL;
+ printed = 0;
bzero(&pc, sizeof(pc));
while ((opt = getopt(argc, argv, "aDHs")) != -1) {
switch (opt) {
@@ -643,11 +642,38 @@ bectl_cmd_list(int argc, char *argv[])
}
print_headers(props, &pc);
+ /* Do a first pass to print active and next active first */
for (cur = nvlist_next_nvpair(props, NULL); cur != NULL;
cur = nvlist_next_nvpair(props, cur)) {
nvpair_value_nvlist(cur, &dsprops);
- pc.final_be = nvlist_next_nvpair(props, cur) == NULL;
+ active_now = active_reboot = false;
+
+ nvlist_lookup_boolean_value(dsprops, "active", &active_now);
+ nvlist_lookup_boolean_value(dsprops, "nextboot",
+ &active_reboot);
+ if (!active_now && !active_reboot)
+ continue;
+ if (printed > 0 && (pc.show_all_datasets || pc.show_snaps))
+ printf("\n");
print_info(nvpair_name(cur), dsprops, &pc);
+ printed++;
+ }
+
+ /* Now pull everything else */
+ for (cur = nvlist_next_nvpair(props, NULL); cur != NULL;
+ cur = nvlist_next_nvpair(props, cur)) {
+ nvpair_value_nvlist(cur, &dsprops);
+ active_now = active_reboot = false;
+
+ nvlist_lookup_boolean_value(dsprops, "active", &active_now);
+ nvlist_lookup_boolean_value(dsprops, "nextboot",
+ &active_reboot);
+ if (active_now || active_reboot)
+ continue;
+ if (printed > 0 && (pc.show_all_datasets || pc.show_snaps))
+ printf("\n");
+ print_info(nvpair_name(cur), dsprops, &pc);
+ printed++;
}
be_prop_list_free(props);
More information about the svn-src-projects
mailing list