Author: kevans
Date: Thu Aug 16 18:26:43 2018
New Revision: 337917
URL: https://svnweb.freebsd.org/changeset/base/337917

Log:
  bectl(8): Implement the 'create a snapshot' variant of create

Modified:
  head/sbin/bectl/bectl.c

Modified: head/sbin/bectl/bectl.c
==============================================================================
--- head/sbin/bectl/bectl.c     Thu Aug 16 17:59:49 2018        (r337916)
+++ head/sbin/bectl/bectl.c     Thu Aug 16 18:26:43 2018        (r337917)
@@ -182,15 +182,19 @@ bectl_cmd_activate(int argc, char *argv[])
 static int
 bectl_cmd_create(int argc, char *argv[])
 {
-       char *bootenv, *snapname, *source;
+       char *atpos, *bootenv, *snapname, *source;
        int err, opt;
+       bool recursive;
 
        snapname = NULL;
-       while ((opt = getopt(argc, argv, "e:")) != -1) {
+       recursive = false;
+       while ((opt = getopt(argc, argv, "re:")) != -1) {
                switch (opt) {
                case 'e':
                        snapname = optarg;
                        break;
+               case 'r':
+                       recursive = true;
                default:
                        fprintf(stderr, "bectl create: unknown option '-%c'\n",
                            optopt);
@@ -207,8 +211,14 @@ bectl_cmd_create(int argc, char *argv[])
        }
 
        bootenv = *argv;
-
-       if (snapname != NULL) {
+       if ((atpos = strchr(bootenv, '@')) != NULL) {
+               /*
+                * This is the "create a snapshot variant". No new boot
+                * environment is to be created here.
+                */
+               *atpos++ = '\0';
+               err = be_snapshot(be, bootenv, atpos, recursive, NULL);
+       } else if (snapname != NULL) {
                if (strchr(snapname, '@') != NULL)
                        err = be_create_from_existing_snap(be, bootenv,
                            snapname);
@@ -232,7 +242,11 @@ bectl_cmd_create(int argc, char *argv[])
        case BE_ERR_SUCCESS:
                break;
        default:
-               if (snapname == NULL)
+               if (atpos != NULL)
+                       fprintf(stderr,
+                           "failed to create a snapshot '%s' of '%s'\n",
+                           atpos, bootenv);
+               else if (snapname == NULL)
                        fprintf(stderr,
                            "failed to create bootenv %s\n", bootenv);
                else
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to