]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- restructuring
authorArvin Schnell <aschnell@suse.de>
Mon, 23 May 2011 13:38:36 +0000 (15:38 +0200)
committerArvin Schnell <aschnell@suse.de>
Mon, 23 May 2011 13:38:36 +0000 (15:38 +0200)
snapper/File.cc
snapper/File.h

index 6b6c03894401bad45445ff19991582d0867ac5ec..8afb7a20482b576dfdd80bfc66082789af738489 100644 (file)
@@ -407,6 +407,44 @@ namespace snapper
     }
 
 
+    bool
+    File::createAllTypes() const
+    {
+       struct stat fs;
+       if (lstat(getAbsolutePath(LOC_PRE).c_str(), &fs) != 0)
+       {
+           y2err("lstat failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" << errno);
+           return false;
+       }
+       else if (!createParentDirectories(getAbsolutePath(LOC_SYSTEM)))
+       {
+           return false;
+       }
+       else
+       {
+           switch (fs.st_mode & S_IFMT)
+           {
+               case S_IFDIR: {
+                   if (!createDirectory(fs.st_mode, fs.st_uid, fs.st_gid))
+                       return false;
+               } break;
+
+               case S_IFREG: {
+                   if (!createFile(fs.st_mode, fs.st_uid, fs.st_gid))
+                       return false;
+               } break;
+
+               case S_IFLNK: {
+                   if (!createLink(fs.st_uid, fs.st_gid))
+                       return false;
+               } break;
+           }
+       }
+
+       return true;
+    }
+
+
     bool
     File::createDirectory(mode_t mode, uid_t owner, gid_t group) const
     {
@@ -501,6 +539,66 @@ namespace snapper
     }
 
 
+    bool
+    File::modifyAllTypes() const
+    {
+       struct stat fs;
+       if (lstat(getAbsolutePath(LOC_PRE).c_str(), &fs) != 0)
+       {
+           y2err("lstat failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" << errno);
+           return false;
+       }
+       else if (!createParentDirectories(getAbsolutePath(LOC_SYSTEM)))
+       {
+           return false;
+       }
+       else
+       {
+           if (getPreToPostStatus() & CONTENT)
+           {
+               switch (fs.st_mode & S_IFMT)
+               {
+                   case S_IFREG: {
+                       if (!deleteAllTypes())
+                           return false;
+                       else if (!createFile(fs.st_mode, fs.st_uid, fs.st_gid))
+                           return false;
+                   } break;
+
+                   case S_IFLNK: {
+                       if (!deleteAllTypes())
+                           return false;
+                       else if (!createLink(fs.st_uid, fs.st_gid))
+                           return false;
+                   } break;
+               }
+           }
+
+           if (getPreToPostStatus() & PERMISSIONS)
+           {
+               if (chmod(getAbsolutePath(LOC_SYSTEM).c_str(), fs.st_mode) != 0)
+               {
+                   y2err("chmod failed path:" << getAbsolutePath(LOC_SYSTEM) <<
+                         " errno:" << errno);
+                   return false;
+               }
+           }
+
+           if (getPreToPostStatus() & (USER | GROUP))
+           {
+               if (lchown(getAbsolutePath(LOC_SYSTEM).c_str(), fs.st_uid, fs.st_gid) != 0)
+               {
+                   y2err("lchown failed path:" << getAbsolutePath(LOC_SYSTEM) <<
+                         " errno:" << errno);
+                   return false;
+               }
+           }
+       }
+
+       return true;
+    }
+
+
     bool
     File::doRollback()
     {
@@ -524,92 +622,14 @@ namespace snapper
 
        if (getPreToPostStatus() & DELETED || getPreToPostStatus() & TYPE)
        {
-           struct stat fs;
-           if (lstat(getAbsolutePath(LOC_PRE).c_str(), &fs) != 0)
-           {
-               y2err("lstat failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" << errno);
+           if (!createAllTypes())
                error = true;
-           }
-           else if (!createParentDirectories(getAbsolutePath(LOC_SYSTEM)))
-           {
-               error = true;
-           }
-           else
-           {
-               switch (fs.st_mode & S_IFMT)
-               {
-                   case S_IFDIR: {
-                       if (!createDirectory(fs.st_mode, fs.st_uid, fs.st_gid))
-                           error = true;
-                   } break;
-
-                   case S_IFREG: {
-                       if (!createFile(fs.st_mode, fs.st_uid, fs.st_gid))
-                           error = true;
-                   } break;
-
-                   case S_IFLNK: {
-                       if (!createLink(fs.st_uid, fs.st_gid))
-                           error = true;
-                   } break;
-               }
-           }
        }
 
        if (getPreToPostStatus() & (CONTENT | PERMISSIONS | USER | GROUP))
        {
-           struct stat fs;
-           if (lstat(getAbsolutePath(LOC_PRE).c_str(), &fs) != 0)
-           {
-               y2err("lstat failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" << errno);
-               error = true;
-           }
-           else if (!createParentDirectories(getAbsolutePath(LOC_SYSTEM)))
-           {
+           if (!modifyAllTypes())
                error = true;
-           }
-           else
-           {
-               if (getPreToPostStatus() & CONTENT)
-               {
-                   switch (fs.st_mode & S_IFMT)
-                   {
-                       case S_IFREG: {
-                           if (!deleteAllTypes())
-                               error = true;
-                           else if (!createFile(fs.st_mode, fs.st_uid, fs.st_gid))
-                               error = true;
-                       } break;
-
-                       case S_IFLNK: {
-                           if (!deleteAllTypes())
-                               error = true;
-                           else if (!createLink(fs.st_uid, fs.st_gid))
-                               error = true;
-                       } break;
-                   }
-               }
-
-               if (getPreToPostStatus() & PERMISSIONS)
-               {
-                   if (chmod(getAbsolutePath(LOC_SYSTEM).c_str(), fs.st_mode) != 0)
-                   {
-                       y2err("chmod failed path:" << getAbsolutePath(LOC_SYSTEM) <<
-                             " errno:" << errno);
-                       error = true;
-                   }
-               }
-
-               if (getPreToPostStatus() & (USER | GROUP))
-               {
-                   if (lchown(getAbsolutePath(LOC_SYSTEM).c_str(), fs.st_uid, fs.st_gid) != 0)
-                   {
-                       y2err("lchown failed path:" << getAbsolutePath(LOC_SYSTEM) <<
-                             " errno:" << errno);
-                       error = true;
-                   }
-               }
-           }
        }
 
        if (error && getSnapper()->getRollbackCallback())
index 0e3053ec4b9cc70a5775fca66bd0bee765e055c0..cda5da0ebac9513a1674345bac6a00af0eedf5ab 100644 (file)
@@ -24,6 +24,8 @@
 #define FILE_H
 
 
+#include <sys/stat.h>
+
 #include <string>
 #include <vector>
 
@@ -108,12 +110,15 @@ namespace snapper
 
        bool createParentDirectories(const string& path) const;
 
+       bool createAllTypes() const;
        bool createDirectory(mode_t mode, uid_t owner, gid_t group) const;
        bool createFile(mode_t mode, uid_t owner, gid_t group) const;
        bool createLink(uid_t owner, gid_t group) const;
 
        bool deleteAllTypes() const;
 
+       bool modifyAllTypes() const;
+
        const Comparison* comparison;
 
        string name;