svn commit: r337917 - head/sbin/bectl
Kyle Evans
kevans at FreeBSD.org
Thu Aug 16 18:26:44 UTC 2018
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
More information about the svn-src-all
mailing list