Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Aug 2018 18:26:43 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r337917 - head/sbin/bectl
Message-ID:  <201808161826.w7GIQhfQ039806@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201808161826.w7GIQhfQ039806>