]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- Provide "atomic" functions to create and modify snapshots including extra data...
authorArvin Schnell <aschnell@suse.de>
Wed, 9 Oct 2013 07:49:24 +0000 (09:49 +0200)
committerArvin Schnell <aschnell@suse.de>
Wed, 9 Oct 2013 07:49:24 +0000 (09:49 +0200)
LIBVERSION
server/Client.cc
snapper/Snapper.cc
snapper/Snapper.h
snapper/Snapshot.cc
snapper/Snapshot.h

index 7ec1d6db40877765247db18e7f9a4e36a0def4ad..ccbccc3dc62631f22ff358ac418e52401ec770b4 100644 (file)
@@ -1 +1 @@
-2.1.0
+2.2.0
index 09453fc11822c7dd01179722bcdb92984265b65d..cd094f20cd301c3cc4e70f159226184ee148c538 100644 (file)
@@ -810,10 +810,7 @@ Client::set_snapshot(DBus::Connection& conn, DBus::Message& msg)
     if (snap == snapshots.end())
        throw IllegalSnapshotException();
 
-    snap->setDescription(description);
-    snap->setCleanup(cleanup);
-    snap->setUserdata(userdata);
-    snap->flushInfo();
+    snapper->modifySnapshot(snap, description, cleanup, userdata);
 
     DBus::MessageMethodReturn reply(msg);
 
@@ -845,11 +842,8 @@ Client::create_single_snapshot(DBus::Connection& conn, DBus::Message& msg)
 
     Snapper* snapper = it->getSnapper();
 
-    Snapshots::iterator snap1 = snapper->createSingleSnapshot(description);
-    snap1->setUid(conn.get_unix_userid(msg));
-    snap1->setCleanup(cleanup);
-    snap1->setUserdata(userdata);
-    snap1->flushInfo();
+    Snapshots::iterator snap1 = snapper->createSingleSnapshot(conn.get_unix_userid(msg),
+                                                             description, cleanup, userdata);
 
     DBus::MessageMethodReturn reply(msg);
 
@@ -884,11 +878,8 @@ Client::create_pre_snapshot(DBus::Connection& conn, DBus::Message& msg)
 
     Snapper* snapper = it->getSnapper();
 
-    Snapshots::iterator snap1 = snapper->createPreSnapshot(description);
-    snap1->setUid(conn.get_unix_userid(msg));
-    snap1->setCleanup(cleanup);
-    snap1->setUserdata(userdata);
-    snap1->flushInfo();
+    Snapshots::iterator snap1 = snapper->createPreSnapshot(conn.get_unix_userid(msg), description,
+                                                          cleanup, userdata);
 
     DBus::MessageMethodReturn reply(msg);
 
@@ -927,11 +918,8 @@ Client::create_post_snapshot(DBus::Connection& conn, DBus::Message& msg)
 
     Snapshots::iterator snap1 = snapshots.find(pre_num);
 
-    Snapshots::iterator snap2 = snapper->createPostSnapshot(description, snap1);
-    snap2->setUid(conn.get_unix_userid(msg));
-    snap2->setCleanup(cleanup);
-    snap2->setUserdata(userdata);
-    snap2->flushInfo();
+    Snapshots::iterator snap2 = snapper->createPostSnapshot(snap1, conn.get_unix_userid(msg),
+                                                           description, cleanup, userdata);
 
     bool tmp;
     if (it->getConfigInfo().getValue("BACKGROUND_COMPARISON", tmp) && tmp)
index 11a6ac497d74df6dd4d2b0b5e654b8a3cdda68ce..4aef880cd69b02cc12aecc98fcfdfd08c13d2b8f 100644 (file)
@@ -180,21 +180,54 @@ namespace snapper
     Snapshots::iterator
     Snapper::createSingleSnapshot(string description)
     {
-       return snapshots.createSingleSnapshot(description);
+       return snapshots.createSingleSnapshot(0, description, "", map<string, string>());
     }
 
 
     Snapshots::iterator
     Snapper::createPreSnapshot(string description)
     {
-       return snapshots.createPreSnapshot(description);
+       return snapshots.createPreSnapshot(0, description, "", map<string, string>());
     }
 
 
     Snapshots::iterator
     Snapper::createPostSnapshot(string description, Snapshots::const_iterator pre)
     {
-       return snapshots.createPostSnapshot(description, pre);
+       return snapshots.createPostSnapshot(pre, 0, description, "", map<string, string>());
+    }
+
+
+    Snapshots::iterator
+    Snapper::createSingleSnapshot(uid_t uid, const string& description, const string& cleanup,
+                                 const map<string, string>& userdata)
+    {
+       return snapshots.createSingleSnapshot(uid, description, cleanup, userdata);
+    }
+
+
+
+    Snapshots::iterator
+    Snapper::createPreSnapshot(uid_t uid, const string& description, const string& cleanup,
+                              const map<string, string>& userdata)
+    {
+       return snapshots.createPreSnapshot(uid, description, cleanup, userdata);
+    }
+
+
+    Snapshots::iterator
+    Snapper::createPostSnapshot(Snapshots::const_iterator pre, uid_t uid, const string& description,
+                               const string& cleanup, const map<string, string>& userdata)
+    {
+       return snapshots.createPostSnapshot(pre, uid, description, cleanup, userdata);
+    }
+
+
+    void
+    Snapper::modifySnapshot(Snapshots::iterator snapshot, const string& description,
+                           const string& cleanup, const map<string, string>& userdata)
+    {
+       snapshots.modifySnapshot(snapshot, description, cleanup, userdata);
     }
 
 
index 8f77a2e76dd0ff36f24bc7c4382dcb7121b04e43..1f30b74a907ca855bcdc2cd5d91eaa3c64a7b1de 100644 (file)
@@ -125,9 +125,22 @@ namespace snapper
 
        Snapshots::const_iterator getSnapshotCurrent() const;
 
-       Snapshots::iterator createSingleSnapshot(string description);
-       Snapshots::iterator createPreSnapshot(string description);
-       Snapshots::iterator createPostSnapshot(string description, Snapshots::const_iterator pre);
+       Snapshots::iterator createSingleSnapshot(string description) __attribute__ ((deprecated));
+       Snapshots::iterator createPreSnapshot(string description) __attribute__ ((deprecated));
+       Snapshots::iterator createPostSnapshot(string description, Snapshots::const_iterator pre) __attribute__ ((deprecated));
+
+       Snapshots::iterator createSingleSnapshot(uid_t uid, const string& description,
+                                                const string& cleanup,
+                                                const map<string, string>& userdata);
+       Snapshots::iterator createPreSnapshot(uid_t uid, const string& description,
+                                             const string& cleanup,
+                                             const map<string, string>& userdata);
+       Snapshots::iterator createPostSnapshot(Snapshots::const_iterator pre, uid_t uid,
+                                              const string& description, const string& cleanup,
+                                              const map<string, string>& userdata);
+
+       void modifySnapshot(Snapshots::iterator snapshot, const string& description,
+                           const string& cleanup, const map<string, string>& userdata);
 
        void deleteSnapshot(Snapshots::iterator snapshot);
 
index 2b80a6c2157364ecf8481e3f161835a59abf3bbc..499862cace69cd080f69d0e63dc27079ce03fa7c 100644 (file)
@@ -315,6 +315,20 @@ namespace snapper
     }
 
 
+    void
+    Snapshots::checkUserdata(const map<string, string>& userdata) const
+    {
+       for (map<string, string>::const_iterator it = userdata.begin(); it != userdata.end(); ++it)
+       {
+           if (it->first.empty() || it->first.find_first_of(",=") != string::npos)
+               throw InvalidUserdataException();
+
+           if (it->second.find_first_of(",=") != string::npos)
+               throw InvalidUserdataException();
+       }
+    }
+
+
     void
     Snapshots::initialize()
     {
@@ -555,36 +569,72 @@ namespace snapper
     Snapshots::iterator
     Snapshots::createSingleSnapshot(string description)
     {
+       return createSingleSnapshot(0, description, "", map<string, string>());
+    }
+
+
+    Snapshots::iterator
+    Snapshots::createPreSnapshot(string description)
+    {
+       return createPreSnapshot(0, description, "", map<string, string>());
+    }
+
+
+    Snapshots::iterator
+    Snapshots::createPostSnapshot(string description, Snapshots::const_iterator pre)
+    {
+       return createPostSnapshot(pre, 0, description, "", map<string, string>());
+    }
+
+
+    Snapshots::iterator
+    Snapshots::createSingleSnapshot(uid_t uid, const string& description, const string& cleanup,
+                                   const map<string, string>& userdata)
+    {
+       checkUserdata(userdata);
+
        Snapshot snapshot(snapper, SINGLE, nextNumber(), time(NULL));
+       snapshot.uid = uid;
        snapshot.description = description;
-       snapshot.info_modified = true;
+       snapshot.cleanup = cleanup;
+       snapshot.userdata = userdata;
 
        return createHelper(snapshot);
     }
 
 
     Snapshots::iterator
-    Snapshots::createPreSnapshot(string description)
+    Snapshots::createPreSnapshot(uid_t uid, const string& description, const string& cleanup,
+                                const map<string, string>& userdata)
     {
+       checkUserdata(userdata);
+
        Snapshot snapshot(snapper, PRE, nextNumber(), time(NULL));
+       snapshot.uid = uid;
        snapshot.description = description;
-       snapshot.info_modified = true;
+       snapshot.cleanup = cleanup;
+       snapshot.userdata = userdata;
 
        return createHelper(snapshot);
     }
 
 
     Snapshots::iterator
-    Snapshots::createPostSnapshot(string description, Snapshots::const_iterator pre)
+    Snapshots::createPostSnapshot(Snapshots::const_iterator pre, uid_t uid, const string& description,
+                                 const string& cleanup, const map<string, string>& userdata)
     {
        if (pre == entries.end() || pre->isCurrent() || pre->getType() != PRE ||
            findPost(pre) != entries.end())
            throw IllegalSnapshotException();
 
+       checkUserdata(userdata);
+
        Snapshot snapshot(snapper, POST, nextNumber(), time(NULL));
-       snapshot.description = description;
        snapshot.pre_num = pre->getNum();
-       snapshot.info_modified = true;
+       snapshot.uid = uid;
+       snapshot.description = description;
+       snapshot.cleanup = cleanup;
+       snapshot.userdata = userdata;
 
        return createHelper(snapshot);
     }
@@ -606,7 +656,7 @@ namespace snapper
 
        try
        {
-           snapshot.flushInfo();
+           snapshot.writeInfo();
        }
        catch (const IOErrorException& e)
        {
@@ -627,6 +677,23 @@ namespace snapper
     }
 
 
+    void
+    Snapshots::modifySnapshot(iterator snapshot, const string& description, const string& cleanup,
+                             const map<string, string>& userdata)
+    {
+       if (snapshot == entries.end() || snapshot->isCurrent())
+           throw IllegalSnapshotException();
+
+       checkUserdata(userdata);
+
+       snapshot->description = description;
+       snapshot->cleanup = cleanup;
+       snapshot->userdata = userdata;
+
+       snapshot->writeInfo();
+    }
+
+
     void
     Snapshots::deleteSnapshot(iterator snapshot)
     {
index 99d53754e2c725c038b3a4fd36b8b9491af089c5..d75e248da1800607cd62cf235df0aeae40f846b8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011 Novell, Inc.
+ * Copyright (c) [2011-2013] Novell, Inc.
  *
  * All Rights Reserved.
  *
@@ -94,21 +94,21 @@ namespace snapper
 
        time_t getDate() const { return date; }
 
-       void setUid(uid_t uid);
+       void setUid(uid_t uid) __attribute__ ((deprecated));
        uid_t getUid() const { return uid; }
 
        unsigned int getPreNum() const { return pre_num; }
 
-       void setDescription(const string& description);
+       void setDescription(const string& description) __attribute__ ((deprecated));
        string getDescription() const { return description; }
 
-       void setCleanup(const string& cleanup);
+       void setCleanup(const string& cleanup) __attribute__ ((deprecated));
        string getCleanup() const { return cleanup; }
 
-       void setUserdata(const map<string, string>& userdata);
+       void setUserdata(const map<string, string>& userdata) __attribute__ ((deprecated));
        map<string, string> getUserdata() const { return userdata; }
 
-       void flushInfo();
+       void flushInfo() __attribute__ ((deprecated));
 
        string snapshotDir() const;
 
@@ -200,12 +200,24 @@ namespace snapper
 
        void check() const;
 
-       iterator createSingleSnapshot(string description);
-       iterator createPreSnapshot(string description);
-       iterator createPostSnapshot(string description, const_iterator pre);
+       void checkUserdata(const map<string, string>& userdata) const;
+
+       iterator createSingleSnapshot(string description) __attribute__ ((deprecated));
+       iterator createPreSnapshot(string description) __attribute__ ((deprecated));
+       iterator createPostSnapshot(string description, const_iterator pre) __attribute__ ((deprecated));
+
+       iterator createSingleSnapshot(uid_t uid, const string& description, const string& cleanup,
+                                     const map<string, string>& userdata);
+       iterator createPreSnapshot(uid_t uid, const string& description, const string& cleanup,
+                                  const map<string, string>& userdata);
+       iterator createPostSnapshot(const_iterator pre, uid_t uid, const string& description,
+                                   const string& cleanup, const map<string, string>& userdata);
 
        iterator createHelper(Snapshot& snapshot);
 
+       void modifySnapshot(iterator snapshot, const string& description, const string& cleanup,
+                           const map<string, string>& userdata);
+
        void deleteSnapshot(iterator snapshot);
 
        unsigned int nextNumber();