Date: Mon, 9 Sep 2019 18:20:55 +0000 (UTC) From: Kyle Evans <kevans@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r352093 - stable/12/sbin/bectl Message-ID: <201909091820.x89IKtv6009891@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kevans Date: Mon Sep 9 18:20:55 2019 New Revision: 352093 URL: https://svnweb.freebsd.org/changeset/base/352093 Log: Back out r352087 for now The ancient-gcc -Wno-error series hasn't been MFC'd yet to this branch and some GCC builds seem to have raised a false-positive that wasn't caught due to -Wno-error on head. Back it out for now, will reapply when r352092 becomes eligible for MFC... Modified: stable/12/sbin/bectl/bectl.8 stable/12/sbin/bectl/bectl.c stable/12/sbin/bectl/bectl_list.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sbin/bectl/bectl.8 ============================================================================== --- stable/12/sbin/bectl/bectl.8 Mon Sep 9 18:17:30 2019 (r352092) +++ stable/12/sbin/bectl/bectl.8 Mon Sep 9 18:20:55 2019 (r352093) @@ -57,9 +57,6 @@ .Nm .Cm list .Op Fl aDHs -.Op Fl c Ar property -.Op Fl C Ar property -.Oo Bro Fl c Ar property | Fl C Ar property Brc Oc .Nm .Cm mount .Ar beName @@ -237,12 +234,7 @@ generated by .El .Pp All default parameters may be overwritten. -.It Xo -.Cm list -.Op Fl DHas -.Oo Bro Fl c Ar property | Fl C Ar property Brc Oc -.Xc -.Pp +.It Cm list Op Fl aDHs Display all boot environments. The .Em Active @@ -253,44 +245,21 @@ active on reboot or both .Pq Em \&NR . .Pp -.Bl -tag -width indent -.It Fl a -Display all datasets. -.It Fl D -Display the full space usage for each boot environment, assuming all +If +.Fl a +is used, display all datasets. +If +.Fl D +is used, display the full space usage for each boot environment, assuming all other boot environments were destroyed. -.It Fl H -Used for scripting. -Do not print headers and separate fields by a single tab instead of -arbitrary white space. -.It Fl s -Display all snapshots as well. -.It Fl c Ar property -Sort boot environments by given property name. -The following properties are supported: -.Pp -.Bl -tag -width 4n -offset indent -compact -.It name (default output) -.It creation -.It origin -.It used -.It usedds -.It usedsnap -.It usedrefreserv -.El -.It Fl C Ar property -Same as the -.Fl c -option, but displays in descending order. -.El -.Pp The -.Fl D -option is ignored when either the +.Fl H +option is used for scripting. +It does not print headers and separate fields by a single tab instead of +arbitrary white space. +If .Fl s -or -.Fl a -option is used. +is used, display all snapshots as well. .It Cm mount Ar beName Op Ar mountpoint Temporarily mount the boot environment. Mount at the specified Modified: stable/12/sbin/bectl/bectl.c ============================================================================== --- stable/12/sbin/bectl/bectl.c Mon Sep 9 18:17:30 2019 (r352092) +++ stable/12/sbin/bectl/bectl.c Mon Sep 9 18:20:55 2019 (r352093) @@ -80,7 +80,7 @@ usage(bool explicit) "\tbectl jail {-b | -U} [{-o key=value | -u key}]... " "{jailID | jailName}\n" "\t bootenv [utility [argument ...]]\n" - "\tbectl list [-DHas] [{-c property | -C property}]\n" + "\tbectl list [-DHas]\n" "\tbectl mount beName [mountpoint]\n" "\tbectl rename origBeName newBeName\n" "\tbectl {ujail | unjail} {jailID | jailName} bootenv\n" Modified: stable/12/sbin/bectl/bectl_list.c ============================================================================== --- stable/12/sbin/bectl/bectl_list.c Mon Sep 9 18:17:30 2019 (r352092) +++ stable/12/sbin/bectl/bectl_list.c Mon Sep 9 18:20:55 2019 (r352093) @@ -38,12 +38,6 @@ __FBSDID("$FreeBSD$"); #include "bectl.h" -struct sort_column { - char *name; - char *val; - nvlist_t *nvl; -}; - struct printc { int active_colsz_def; int be_colsz; @@ -330,74 +324,6 @@ print_headers(nvlist_t *props, struct printc *pc) printf("\n"); } -/* - * Sort the given nvlist of boot environments by property. - */ -static int -prop_list_sort(nvlist_t *props, char *property, bool reverse) -{ - nvpair_t *nvp; - nvlist_t *nvl; - int i, nvp_count; - uint64_t lval, rval; - struct sort_column sc_prev, sc_next; - - /* a temporary list to work with */ - nvlist_dup(props, &nvl, 0); - - nvp_count = fnvlist_num_pairs(nvl); - for (i = 0; i < nvp_count; i++) { - - nvp = nvlist_next_nvpair(nvl, NULL); - nvpair_value_nvlist(nvp, &sc_prev.nvl); - nvlist_lookup_string(sc_prev.nvl, "name", &sc_prev.name); - nvlist_lookup_string(sc_prev.nvl, property, &sc_prev.val); - - while ((nvp = nvlist_next_nvpair(nvl, nvp)) != NULL) { - - nvpair_value_nvlist(nvp, &sc_next.nvl); - nvlist_lookup_string(sc_next.nvl, "name", &sc_next.name); - nvlist_lookup_string(sc_next.nvl, property, &sc_next.val); - - /* properties that use numerical comparison */ - if (strcmp(property, "creation") == 0 || - strcmp(property, "used") == 0 || - strcmp(property, "usedds") == 0 || - strcmp(property, "usedsnap") == 0 || - strcmp(property, "usedrefreserv") == 0) { - - lval = strtoull(sc_prev.val, NULL, 10); - rval = strtoull(sc_next.val, NULL, 10); - - if ((lval < rval && reverse) || - (lval > rval && !reverse)) - sc_prev = sc_next; - } - - /* properties that use string comparison */ - else if (strcmp(property, "name") == 0 || - strcmp(property, "origin") == 0) { - if ((strcmp(sc_prev.val, sc_next.val) < 0 && reverse) || - (strcmp(sc_prev.val, sc_next.val) > 0 && !reverse)) - sc_prev = sc_next; - } - } - - /* - * The 'props' nvlist has been created to only have unique names. - * When a name is added, any existing nvlist's with the same name - * will be removed. Eventually, all existing nvlist's are replaced - * in sorted order. - */ - nvlist_add_nvlist(props, sc_prev.name, sc_prev.nvl); - nvlist_remove_all(nvl, sc_prev.name); - } - - be_prop_list_free(nvl); - - return 0; -} - int bectl_cmd_list(int argc, char *argv[]) { @@ -405,14 +331,12 @@ bectl_cmd_list(int argc, char *argv[]) nvpair_t *cur; nvlist_t *dsprops, *props; int opt, printed; - char *column; - bool reverse; + boolean_t active_now, active_reboot; - column = NULL; props = NULL; printed = 0; bzero(&pc, sizeof(pc)); - while ((opt = getopt(argc, argv, "aDHsc:C:")) != -1) { + while ((opt = getopt(argc, argv, "aDHs")) != -1) { switch (opt) { case 'a': pc.show_all_datasets = true; @@ -426,18 +350,6 @@ bectl_cmd_list(int argc, char *argv[]) case 's': pc.show_snaps = true; break; - case 'c': - if (column != NULL) - free(column); - column = strdup(optarg); - reverse = false; - break; - case 'C': - if (column != NULL) - free(column); - column = strdup(optarg); - reverse = true; - break; default: fprintf(stderr, "bectl list: unknown option '-%c'\n", optopt); @@ -462,33 +374,44 @@ bectl_cmd_list(int argc, char *argv[]) return (1); } - /* List boot environments in alphabetical order by default */ - if (column == NULL) { - column = strdup("name"); - reverse = false; - } - - prop_list_sort(props, column, reverse); - /* Force -D off if either -a or -s are specified */ if (pc.show_all_datasets || pc.show_snaps) pc.show_space = false; if (!pc.script_fmt) print_headers(props, &pc); - - /* Print boot environments */ + /* 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); + 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++; } - free(column); + /* 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); return (0);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909091820.x89IKtv6009891>