]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- added option --command to snapper create
authorArvin Schnell <aschnell@suse.de>
Fri, 2 Mar 2012 15:27:27 +0000 (16:27 +0100)
committerArvin Schnell <aschnell@suse.de>
Fri, 2 Mar 2012 15:27:27 +0000 (16:27 +0100)
VERSION
doc/snapper.8.in
package/snapper.changes
tools/snapper.cc

diff --git a/VERSION b/VERSION
index d169b2f2d0a4961be2e01a31cebeffdefac24e43..c5d54ec32616aacce853f12c79602312c7ac04ec 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.0.8
+0.0.9
index 5ecee0b151a2ead1914816ab69c11249947c5552..72b4c13864e5db17038d706aa91fe23f65181316 100644 (file)
@@ -157,6 +157,9 @@ Set the cleanup-algorithm for the snapshot.
 Set userdata for the snapshot. The key-value pairs must be seperated by comma
 and the key and value must be seperated by an equal sign,
 e.g. requestid=42,user=arthur.
+.TP
+\fI\-\-pre\-number\fR <command>
+Create a pre and post snapshot and run command in between.
 
 .TP
 .B modify [options] <number>
index 7d18d705106b38b2e8c10ad71bd162e4065534ad..dda6fa630469d804ceb2f9c115983981b240b390 100644 (file)
@@ -1,3 +1,9 @@
+-------------------------------------------------------------------
+Fri Mar 02 16:25:26 CET 2012 - aschnell@suse.de
+
+- added option --command to snapper create
+- 0.0.9
+
 -------------------------------------------------------------------
 Fri Feb 24 19:21:15 CET 2012 - aschnell@suse.de
 
index c5233e3c5af2f7a5b85e5ded2d78464ab33652cb..20c398e1744d9e99bc116ab6134cfa48ad3e1fb2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011 Novell, Inc.
+ * Copyright (c) 2011-2012 Novell, Inc.
  *
  * All Rights Reserved.
  *
@@ -463,6 +463,7 @@ help_create()
         << _("\t--description, -d <description>\tDescription for snapshot.") << endl
         << _("\t--cleanup-algorithm, -c <algo>\tCleanup algorithm for snapshot.") << endl
         << _("\t--userdata, -u <userdata>\tUserdata for snapshot.") << endl
+        << _("\t--command <command>\tRun command and create pre and post snapshots.") << endl
         << endl;
 }
 
@@ -477,6 +478,7 @@ command_create()
        { "description",        required_argument,      0,      'd' },
        { "cleanup-algorithm",  required_argument,      0,      'c' },
        { "userdata",           required_argument,      0,      'u' },
+       { "command",            required_argument,      0,      0 },
        { 0, 0, 0, 0 }
     };
 
@@ -487,20 +489,31 @@ command_create()
        exit(EXIT_FAILURE);
     }
 
+    enum CreateType { CT_SINGLE, CT_PRE, CT_POST, CT_PRE_POST };
+
     const Snapshots& snapshots = sh->getSnapshots();
 
-    SnapshotType type = SINGLE;
+    CreateType type = CT_SINGLE;
     Snapshots::const_iterator snap1 = snapshots.end();
     bool print_number = false;
     string description;
     string cleanup;
     map<string, string> userdata;
+    string command;
 
     GetOpts::parsed_opts::const_iterator opt;
 
     if ((opt = opts.find("type")) != opts.end())
     {
-       if (!toValue(opt->second, type, SINGLE))
+       if (opt->second == "single")
+           type = CT_SINGLE;
+       else if (opt->second == "pre")
+           type = CT_PRE;
+       else if (opt->second == "post")
+           type = CT_POST;
+       else if (opt->second == "pre-post")
+           type = CT_PRE_POST;
+       else
        {
            cerr << _("Unknown type of snapshot.") << endl;
            exit(EXIT_FAILURE);
@@ -522,17 +535,29 @@ command_create()
     if ((opt = opts.find("userdata")) != opts.end())
        userdata = read_userdata(opt->second);
 
-    if (type == POST && (snap1 == snapshots.end() || snap1->isCurrent()))
+    if ((opt = opts.find("command")) != opts.end())
+    {
+       command = opt->second;
+       type = CT_PRE_POST;
+    }
+
+    if (type == CT_POST && (snap1 == snapshots.end() || snap1->isCurrent()))
     {
        cerr << _("Missing or invalid pre-number.") << endl;
        exit(EXIT_FAILURE);
     }
 
+    if (type == CT_PRE_POST && command.empty())
+    {
+       cerr << _("Missing command argument.") << endl;
+       exit(EXIT_FAILURE);
+    }
+
     try
     {
        switch (type)
        {
-           case SINGLE: {
+           case CT_SINGLE: {
                Snapshots::iterator snap1 = sh->createSingleSnapshot(description);
                snap1->setCleanup(cleanup);
                snap1->setUserdata(userdata);
@@ -541,7 +566,7 @@ command_create()
                    cout << snap1->getNum() << endl;
            } break;
 
-           case PRE: {
+           case CT_PRE: {
                Snapshots::iterator snap1 = sh->createPreSnapshot(description);
                snap1->setCleanup(cleanup);
                snap1->setUserdata(userdata);
@@ -550,7 +575,7 @@ command_create()
                    cout << snap1->getNum() << endl;
            } break;
 
-           case POST: {
+           case CT_POST: {
                Snapshots::iterator snap2 = sh->createPostSnapshot(description, snap1);
                snap2->setCleanup(cleanup);
                snap2->setUserdata(userdata);
@@ -559,6 +584,23 @@ command_create()
                    cout << snap2->getNum() << endl;
                sh->startBackgroundComparsion(snap1, snap2);
            } break;
+
+           case CT_PRE_POST: {
+               Snapshots::iterator snap1 = sh->createPreSnapshot(description);
+               snap1->setCleanup(cleanup);
+               snap1->setUserdata(userdata);
+               snap1->flushInfo();
+
+               system(command.c_str());
+
+               Snapshots::iterator snap2 = sh->createPostSnapshot(description, snap1);
+               snap2->setCleanup(cleanup);
+               snap2->setUserdata(userdata);
+               snap2->flushInfo();
+               if (print_number)
+                   cout << snap1->getNum() << ".." << snap2->getNum() << endl;
+               sh->startBackgroundComparsion(snap1, snap2);
+           } break;
        }
     }
     catch (const InvalidUserdataException& e)