public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/R_overlay:master commit in: roverlay/setupscript/, files/misc/, roverlay/
@ 2013-09-17 13:49 André Erdmann
  0 siblings, 0 replies; only message in thread
From: André Erdmann @ 2013-09-17 13:49 UTC (permalink / raw
  To: gentoo-commits

commit:     66b0946aa5842254888623a2a21ebfb8576c7933
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Tue Sep 17 13:47:51 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Tue Sep 17 13:47:51 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=66b0946a

roverlay-setup: support various config import methods

This commit adds support for "symlink=dirs", "symlink=files" and "copy".
Also added a --force-import-config for importing the config even if roverlay
is used in standalone mode.

---
 files/misc/roverlay.bashcomp    |   3 +-
 roverlay/fsutil.py              | 304 ++++++++++++++++++++++++++++++++++++----
 roverlay/setupscript/hookenv.py |   8 +-
 roverlay/setupscript/initenv.py |  66 ++++++---
 roverlay/setupscript/runtime.py |  58 +++-----
 5 files changed, 352 insertions(+), 87 deletions(-)

diff --git a/files/misc/roverlay.bashcomp b/files/misc/roverlay.bashcomp
index 63bc177..a4b2871 100644
--- a/files/misc/roverlay.bashcomp
+++ b/files/misc/roverlay.bashcomp
@@ -211,7 +211,8 @@ _roverlay_setup_comp() {
       '--work-root' '--data-root' '--conf-root' '--conf-dir' '--my-conf-root'
       '--output' '--ask' '--expand-user' '--additions-dir' '--variable'
       '--prjroot-relpath' '--enable-default-hooks' '--no-default-hooks'
-      '--import-config' '--no-import-config' '--target-uid' '--target-gid'
+      '--import-config' '--no-import-config' '--force-import-config'
+      '--target-uid' '--target-gid'
       '--overwrite-hooks' '--relpath-hooks' '--no-relpath-hooks'
    )
    local SHORTOPTS=(

diff --git a/roverlay/fsutil.py b/roverlay/fsutil.py
index 2cf0baa..b8a69ab 100644
--- a/roverlay/fsutil.py
+++ b/roverlay/fsutil.py
@@ -6,8 +6,10 @@
 
 import errno
 import functools
+import itertools
 import os
 import pwd
+import shutil
 import stat
 import sys
 
@@ -108,12 +110,29 @@ def pwd_expanduser ( fspath, uid ):
       return fspath
 # --- end of pwd_expanduser (...) ---
 
-def get_bitwise_sum ( iterable, initial_value=None ):
-   ret = initial_value if initial_value is not None else 0
-   for item in iterable:
-      ret |= item
-   return ret
-# --- end of get_bitwise_sum (...) ---
+def walk_copy_tree ( source, dest, subdir_root=False, **walk_kwargs ):
+   source_path   = os.path.abspath ( source )
+   dest_path     = os.path.abspath ( dest )
+   relpath_begin = 1 + (
+      source_path.rfind ( os.sep ) if subdir_root else len ( source_path )
+   )
+
+   get_entry = lambda path: (
+      path, os.lstat ( path ) if os.path.lexists ( path ) else None
+   )
+   get_stat_list = lambda s, d, names: (
+      [ ( get_entry ( s + name ), get_entry ( d + name ) ) for name in names ]
+   )
+
+   for root, dirnames, filenames in os.walk ( source, **walk_kwargs ):
+      root_rel  = root[relpath_begin:]
+      root_dest = ( dest + os.sep + root_rel if root_rel else dest )
+
+      dirs  = get_stat_list ( root + os.sep, root_dest + os.sep, dirnames )
+      files = get_stat_list ( root + os.sep, root_dest + os.sep, filenames )
+
+      yield root, root_dest, root_rel, dirs, files, dirnames
+# --- end of walk_copy_tree (...) ---
 
 class RWX ( object ):
 
@@ -358,22 +377,33 @@ class AbstractFsOperations ( object ):
    PRETEND = None
 
    def __init__ ( self,
-      stdout=None, stderr=None, uid=None, gid=None, mode=None
+      stdout=None, stderr=None, uid=None, gid=None,
+      file_mode=None, dir_mode=None
    ):
       if self.__class__.PRETEND is None:
          raise AssertionError ( "derived classes have to set PRETEND." )
 
       super ( AbstractFsOperations, self ).__init__()
-      self.perm_env = ChownChmod (
-         uid=uid, gid=gid, mode=mode, pretend=self.__class__.PRETEND
+      self.perm_env_file = ChownChmod (
+         uid=uid, gid=gid, mode=file_mode, pretend=self.__class__.PRETEND
+      )
+      self.perm_env_dir  = ChownChmod (
+         uid=uid, gid=gid, mode=dir_mode, pretend=self.__class__.PRETEND
       )
+
       self._stdout = sys.stdout if stdout is None else stdout
       self._stderr = sys.stderr if stderr is None else stderr
 
       self.info  = self._stdout.write
       self.error = self._stderr.write
+
+      self._setup()
    # --- end of __init__ (...) ---
 
+   def _setup ( self ):
+      pass
+   # --- end of _setup (...) ---
+
    @roverlay.util.objects.abstractmethod
    def _dodir ( self, dirpath, mkdir_p ):
       pass
@@ -382,31 +412,105 @@ class AbstractFsOperations ( object ):
    def do_touch ( self, fspath ):
       pass
 
-   @roverlay.util.objects.abstractmethod
    def chown ( self, fspath ):
+      if os.path.isdir ( fspath ):
+         return self.chown_dir ( fspath )
+      else:
+         return self.chown_file ( fspath )
+   # --- end of chown (...) ---
+
+   def chown_stat ( self, fspath, mode ):
+      if stat.S_ISDIR ( mode ):
+         return self.chown_dir ( fspath )
+      else:
+         return self.chown_file ( fspath )
+   # --- end of chown_stat (...) ---
+
+   @roverlay.util.objects.abstractmethod
+   def chown_dir ( self, fspath ):
       pass
 
    @roverlay.util.objects.abstractmethod
+   def chown_file ( self, fspath ):
+      pass
+
    def chmod ( self, fspath ):
+      if os.path.isdir ( fspath ):
+         return self.chmod_dir ( fspath )
+      else:
+         return self.chmod_file ( fspath )
+   # --- end of chmod (...) ---
+
+   def chmod_stat ( self, fspath, mode ):
+      if stat.S_ISDIR ( mode ):
+         return self.chmod_dir ( fspath )
+      else:
+         return self.chmod_file ( fspath )
+   # --- end of chmod_stat (...) ---
+
+   @roverlay.util.objects.abstractmethod
+   def chmod_dir ( self, fspath ):
+      pass
+
+   @roverlay.util.objects.abstractmethod
+   def chmod_file ( self, fspath ):
       pass
 
    def chmod_chown ( self, fspath ):
       self.chmod ( fspath )
       self.chown ( fspath )
 
+   def chmod_chown ( self, fspath ):
+      if os.path.isdir ( fspath ):
+         return (
+            self.chmod_dir ( fspath ), self.chown_dir ( fspath )
+         )
+      else:
+         return (
+            self.chmod_file ( fspath ), self.chown_file ( fspath )
+         )
+   # --- end of chmod (...) ---
+
+   def chmod_chown_stat ( self, fspath, mode ):
+      if stat.S_ISDIR ( mode ):
+         return (
+            self.chmod_dir ( fspath ), self.chown_dir ( fspath )
+         )
+      else:
+         return (
+            self.chmod_file ( fspath ), self.chown_file ( fspath )
+         )
+   # --- end of chmod_stat (...) ---
+
    @roverlay.util.objects.abstractmethod
    def chmod_chown_recursive ( self, root ):
       pass
 
+   @roverlay.util.objects.abstractmethod
+   def _copy_file ( self, source, dest ):
+      pass
+   # --- end of _copy_file (...) ---
+
+   def copy_file ( self, source, dest, chown=True, chmod=True ):
+      if self._copy_file ( source, dest ):
+         if chmod:
+            self.chmod_file ( dest )
+         if chown:
+            self.chown_file ( dest )
+
+         return True
+      else:
+         return False
+   # --- end of copy_file (...) ---
+
    def dodir ( self, dirpath, mkdir_p=True, chown=True, chmod=True ):
       if self._dodir ( dirpath, mkdir_p=mkdir_p ):
          if chmod:
-            self.chmod ( dirpath )
+            self.chmod_dir ( dirpath )
          if chown:
-            self.chown ( dirpath )
+            self.chown_dir ( dirpath )
 
          return True
-
       else:
          return False
    # --- end of dodir (...) ---
@@ -438,12 +542,16 @@ class AbstractFsOperations ( object ):
       directories."""
       success = False
 
+      ERRNOS_IGNORE = { errno.EACCES, }
+
       try:
          if self.do_touch ( fspath ):
             success = True
 
       except IOError as ioerr:
-         if ioerr.errno == errno.ENOENT:
+         if ioerr.errno == errno.EPERM:
+            pass
+         elif ioerr.errno == errno.ENOENT:
             try:
                if self.dodir (
                   os.path.dirname ( fspath ),
@@ -452,34 +560,153 @@ class AbstractFsOperations ( object ):
                   success = True
 
             except ( OSError, IOError ) as err:
-               if err.errno != errno.EPERM:
+               if err.errno == errno.EPERM:
+                  pass
+               elif err.errno in ERRNOS_IGNORE:
+                  self.error (
+                     'Got {name} with unexpected '
+                     'errno={code:d} ({code_name})\n'.format (
+                        name      = err.__class__.__name__,
+                        code      = err.errno,
+                        code_name = errno.errorcode [err.errno],
+                     )
+                  )
+               else:
                   raise
-
+            # -- end <try again>
+         elif ioerr.errno in ERRNOS_IGNORE:
+            self.error (
+               'Got {name} with unexpected '
+               'errno={code:d} ({code_name})\n'.format (
+                  name      = ioerr.__class__.__name__,
+                  code      = ioerr.errno,
+                  code_name = errno.errorcode [ioerr.errno],
+               )
+            )
+         else:
+            raise
       return success
    # --- end of check_writable (...) ---
 
+   def copy_tree ( self,
+      source_root, dest_root, overwrite=True, followlinks=False
+   ):
+      dodir     = self.dodir
+      copy_file = self.copy_file
+
+      if overwrite:
+         for source, dest, relpath, dirs, files, dirnames in walk_copy_tree (
+            source_root, dest_root, followlinks=followlinks
+         ):
+            for ( source_dir, source_stat ), ( dest_dir, dest_stat ) in dirs:
+               dodir ( dest_dir )
+
+            for ( source_file, source_stat ), ( dest_file, dest_stat ) in files:
+               if followlinks and stat.S_ISLINK ( source_stat ):
+                  dodir ( dest_file )
+               else:
+                  copy_file ( source_file, dest_file )
+      else:
+         for source, dest, relpath, dirs, files, dirnames in walk_copy_tree (
+            source_root, dest_root, followlinks=followlinks
+         ):
+            for ( source_dir, source_stat ), ( dest_dir, dest_stat ) in dirs:
+               if dest_stat is None:
+                  dodir ( dest_dir )
+
+            for ( source_file, source_stat ), ( dest_file, dest_stat ) in files:
+               if dest_stat is None:
+                  if followlinks and stat.S_ISLINK ( source_stat ):
+                     dodir ( dest_file )
+                  else:
+                     copy_file ( source_file, dest_file )
+   # --- end of copy_tree (...) ---
+
+   def copy_dirlink_tree ( self,
+      source_root, dest_root, overwrite=False, followlinks=False
+   ):
+      symlink = self.symlink
+
+      source, dest, relpath, dirs, files, dirnames = next (
+         walk_copy_tree ( source_root, dest_root, followlinks=followlinks )
+      )
+
+      self.dodir ( dest_root )
+
+      if overwrite:
+         for ( my_source, my_source_stat ), ( my_dest, my_dest_stat ) in (
+            itertools.chain ( dirs, files )
+         ):
+            symlink ( my_source, my_dest )
+      else:
+         for ( my_source, my_source_stat ), ( my_dest, my_dest_stat ) in (
+            itertools.chain ( dirs, files )
+         ):
+            if my_dest_stat is None:
+               symlink ( my_source, my_dest )
+   # --- end of copy_dirlink_tree (...) ---
+
+   def copy_filelink_tree ( self,
+      source_root, dest_root, overwrite=False, followlinks=False
+   ):
+      dodir = self.dodir
+      symlink = self.symlink
+
+      if overwrite:
+         for source, dest, relpath, dirs, files, dirnames in (
+            walk_copy_tree ( source_root, dest_root, followlinks=followlinks )
+         ):
+            for ( source_dir, source_stat ), ( dest_dir, dest_stat ) in dirs:
+               dodir ( dest_dir )
+
+            for ( source_file, source_stat ), ( dest_file, dest_stat ) in files:
+               if followlinks and stat.S_ISLINK ( source_stat ):
+                  dodir ( dest_file )
+               else:
+                  symlink ( source_file, dest_file )
+      else:
+         for source, dest, relpath, dirs, files, dirnames in (
+            walk_copy_tree ( source_root, dest_root, followlinks=followlinks )
+         ):
+            for ( source_dir, source_stat ), ( dest_dir, dest_stat ) in dirs:
+               if dest_stat is None:
+                  dodir ( dest_dir )
+
+            for ( source_file, source_stat ), ( dest_file, dest_stat ) in files:
+               if dest_stat is None:
+                  if followlinks and stat.S_ISLINK ( source_stat ):
+                     dodir ( dest_file )
+                  else:
+                     symlink ( source_file, dest_file )
+   # --- end of copy_filelink_tree (...) ---
+
+
 # --- end of AbstractFsOperations ---
 
 class FsOperations ( AbstractFsOperations ):
 
    PRETEND = False
 
+   def _setup ( self ):
+      self.chmod_file = self.perm_env_file.chmod
+      self.chown_file = self.perm_env_file.chown
+      self.chmod_dir  = self.perm_env_dir.chmod
+      self.chown_dir  = self.perm_env_dir.chown
+   # --- end of _setup (...) ---
+
+   def _copy_file ( self, source, dest ):
+      shutil.copyfile ( source, dest )
+      return True
+   # --- end of _copy_file (...) ---
+
    def _dodir ( self, dirpath, mkdir_p ):
       return roverlay.util.common.dodir (
          dirpath, mkdir_p=mkdir_p, log_exception=False
       )
    # --- end of _dodir (...) ---
 
-   def chmod ( self, fspath ):
-      self.perm_env.chmod ( fspath )
-
-   def chown ( self, fspath ):
-      self.perm_env.chown ( fspath )
-
-   def chmod_chown ( self, fspath ):
-      self.perm_env.chown_chmod ( fspath )
-
    def chmod_chown_recursive ( self, root ):
+      raise Exception("broken.")
       for ret in self.perm_env.chown_chmod_recursive ( root ):
          pass
 
@@ -503,7 +730,7 @@ class FsOperations ( AbstractFsOperations ):
    def symlink ( self, source, link_name ):
       try:
          os.symlink ( source, link_name )
-      except OSError:
+      except OSError as e:
          return False
       else:
          return True
@@ -512,6 +739,8 @@ class FsOperations ( AbstractFsOperations ):
       if not os.path.lexists ( fspath ):
          with open ( fspath, 'a' ) as FH:
             pass
+
+      os.utime ( fspath, None )
       return True
 
 
@@ -519,6 +748,10 @@ class VirtualFsOperations ( AbstractFsOperations ):
 
    PRETEND = True
 
+   def _copy_file ( self, source, dest ):
+      self.info ( "cp {!s} {!s}\n".format ( source, dest ) )
+      return True
+
    def _dodir ( self, dirpath, mkdir_p ):
       if mkdir_p:
          self.info ( "mkdir -p {!s}\n".format ( dirpath ) )
@@ -526,17 +759,28 @@ class VirtualFsOperations ( AbstractFsOperations ):
          self.info ( "mkdir {!s}\n".format ( dirpath ) )
       return True
 
-   def chown ( self, fspath ):
-      ret = self.perm_env.chown ( fspath )
+   def chown_file ( self, fspath ):
+      ret = self.perm_env_file.chown ( fspath )
       if ret is not None:
          self.info ( ret + "\n" )
 
-   def chmod ( self, fspath ):
-      ret = self.perm_env.chmod ( fspath )
+   def chown_dir ( self, fspath ):
+      ret = self.perm_env_dir.chown ( fspath )
+      if ret is not None:
+         self.info ( ret + "\n" )
+
+   def chmod_file ( self, fspath ):
+      ret = self.perm_env_file.chmod ( fspath )
+      if ret is not None:
+         self.info ( ret + "\n" )
+
+   def chmod_dir ( self, fspath ):
+      ret = self.perm_env_dir.chmod ( fspath )
       if ret is not None:
          self.info ( ret + "\n" )
 
    def chmod_chown_recursive ( self, root ):
+      raise Exception("BROKEN.")
       for word in self.perm_env.chown_chmod_recursive ( root ):
          if word is not None:
             self.info ( word + "\n" )

diff --git a/roverlay/setupscript/hookenv.py b/roverlay/setupscript/hookenv.py
index 7df80b8..e942356 100644
--- a/roverlay/setupscript/hookenv.py
+++ b/roverlay/setupscript/hookenv.py
@@ -597,7 +597,7 @@ class SetupHookEnvironment (
             os.path.join ( additions_dir, 'hooks' )
          )
          self.user_hooks.writable = (
-            self.setup_env.private_file.check_writable (
+            self.setup_env.fs_private.check_writable (
                self.user_hooks.get_fspath ( '.keep' )
             )
          )
@@ -662,7 +662,7 @@ class SetupHookEnvironment (
       if self.user_hooks is not None and self.user_hooks.writable:
 
          destdir = self.user_hooks.get_fspath ( event_name )
-         self.setup_env.private_dir.dodir ( destdir )
+         self.setup_env.fs_private.dodir ( destdir )
 
          # note that there is a race condition when users manipulate their
          # hook dir while running roverlay-setup
@@ -677,11 +677,13 @@ class SetupHookEnvironment (
          # -- end for
 
          register_link  = self.user_hooks.register_hook_link_unsafe
-         symlink        = self.setup_env.private_file.symlink
+         symlink        = self.setup_env.fs_private.symlink
+         unlink         = self.setup_env.fs_private.unlink
          relative_links = self.setup_env.options ['hook_relpath']
          success        = True
 
          for script, dest_name, link in to_link:
+            unlink ( link )
             if relative_links:
                have_link = symlink (
                   os.path.relpath ( script.fspath, destdir ), link

diff --git a/roverlay/setupscript/initenv.py b/roverlay/setupscript/initenv.py
index 41f4c5f..58677e1 100644
--- a/roverlay/setupscript/initenv.py
+++ b/roverlay/setupscript/initenv.py
@@ -156,28 +156,44 @@ class SetupInitEnvironment (
 
    def do_import_config ( self, pretend ):
       """Imports the config."""
-      mode = self.setup_env.options ['import_config']
+      # ref
+      setup_env = self.setup_env
+      mode      = setup_env.options ['import_config']
 
       if mode == 'disable':
          self.info ( "config import: disabled.\n" )
          return
-      elif not self.setup_env.is_installed():
-         self.error ( "config import: disabled due to standalone mode.\n" )
+      elif (
+         setup_env.is_installed() or setup_env.options ['force_import_config']
+      ):
+         pass
+      elif pretend:
+         self.error (
+            '*** config would not be imported due to standalone mode '
+            '(override with --force-import-config)\n'
+         )
+      else:
+         self.error (
+            'config import: disabled due to standalone mode '
+            '(override with --force-import-config)\n'
+          )
          return
+      # -- end if
 
-      fs_ops         = self.setup_env.private_dir
-      user_conf_root = self.setup_env.get_user_config_root()
+      fs_ops         = setup_env.fs_private
+      conf_root      = setup_env.conf_root
+      user_conf_root = setup_env.get_user_config_root()
       # assert os.path.isdir ( os.path.dirname(user_conf_root) == work_root )
 
       if user_conf_root is None and (
-         fs_ops.unlink ( self.setup_env.user_conf_root )
+         fs_ops.unlink ( setup_env.user_conf_root )
       ):
          # config_root was a symlink
 
          if pretend:
-            user_conf_root = self.setup_env.user_conf_root
+            user_conf_root = setup_env.user_conf_root
          else:
-            user_conf_root = self.setup_env.get_user_config_root()
+            user_conf_root = setup_env.get_user_config_root()
 
       # -- end if
 
@@ -189,15 +205,29 @@ class SetupInitEnvironment (
 
       elif mode in { 'symlink=root', 'symlink' }:
          if not fs_ops.wipe ( user_conf_root ):
-            self.setup_env.die (
+            setup_env.die (
                "failed to remove {!r}.\n".format ( user_conf_root )
             )
-         elif not fs_ops.symlink ( self.setup_env.conf_root, user_conf_root ):
-            self.setup_env.die (
-               "could not create symlink to {!r}.".format (
-                  self.setup_env.conf_root
-               )
+         elif not fs_ops.symlink ( conf_root, user_conf_root ):
+            setup_env.die (
+               "could not create symlink to {!r}.".format ( conf_root )
             )
+
+      elif mode in { 'symlink=dirs', }:
+         fs_ops.copy_dirlink_tree (
+            conf_root, user_conf_root, overwrite=False
+         )
+
+      elif mode in { 'symlink=files', }:
+         fs_ops.copy_filelink_tree (
+            conf_root, user_conf_root, overwrite=False
+         )
+
+      elif mode in { 'copy', }:
+         fs_ops.copy_tree (
+            conf_root, user_conf_root,
+            overwrite=( not os.path.exists ( user_conf_root ) ),
+         )
       else:
          raise NotImplementedError ( mode )
    # --- end of do_import_config (...) ---
@@ -207,8 +237,8 @@ class SetupInitEnvironment (
       create_subdir_check = roverlay.fsutil.create_subdir_check
       config              = self.config
       find_config_path    = roverlay.config.entryutil.find_config_path
-      dodir_private       = self.setup_env.private_dir.dodir
-      dodir_shared        = self.setup_env.shared_dir.dodir
+      dodir_private       = self.setup_env.fs_private.dodir
+      dodir_shared        = self.setup_env.fs_shared.dodir
 
 
       WANT_USERDIR = roverlay.config.entrymap.WANT_USERDIR
@@ -302,7 +332,7 @@ class SetupInitEnvironment (
       for dirpath in private_dirs_chown:
          dodir_private ( dirpath, chown=True )
 
-      self.setup_env.private_dir.chmod_chown ( self.setup_env.work_root )
+      self.setup_env.fs_private.chmod_chown ( self.setup_env.work_root )
    # --- end of do_setupdirs (...) ---
 
    def do_write_config_file ( self, pretend ):
@@ -316,7 +346,7 @@ class SetupInitEnvironment (
          with open ( cfile, 'wt' ) as FH:
             FH.write ( self.config_file_str )
 
-      self.setup_env.private_file.chmod_chown ( cfile )
+      self.setup_env.fs_private.chmod_chown ( cfile )
    # --- end of do_write_config_file (...) ---
 
    def do_enable_default_hooks ( self, pretend ):

diff --git a/roverlay/setupscript/runtime.py b/roverlay/setupscript/runtime.py
index f7a38cc..8b51973 100644
--- a/roverlay/setupscript/runtime.py
+++ b/roverlay/setupscript/runtime.py
@@ -196,6 +196,11 @@ class SetupArgParser ( roverlay.argparser.RoverlayArgumentParser ):
          help='disable config import (same as \'--import-config disable\')',
       )
 
+      arg (
+         '--force-import-config', dest='force_import_config',
+         flags=self.ARG_WITH_DEFAULT|self.ARG_OPT_IN,
+         help='enforce config import (USE WITH CARE)',
+      )
 
       arg (
          '--target-uid', dest='target_uid', default=os.getuid(),
@@ -457,45 +462,28 @@ class SetupEnvironment ( roverlay.runtime.IndependentRuntimeEnvironment ):
          )
       )
 
+      self.fs_private_virtual = roverlay.fsutil.VirtualFsOperations (
+         uid=target_uid, gid=target_gid,
+         file_mode=self.PRIVATE_FILE_MODE, dir_mode=self.PRIVATE_DIR_MODE
+      )
 
-      self.fs_ops_virtual = {
-         'private_dir': roverlay.fsutil.VirtualFsOperations (
-            uid=target_uid, gid=target_gid, mode=self.PRIVATE_DIR_MODE,
-         ),
-         'shared_dir': roverlay.fsutil.VirtualFsOperations (
-            uid=target_uid, gid=target_gid, mode=self.SHARED_DIR_MODE,
-         ),
-         'private_file': roverlay.fsutil.VirtualFsOperations (
-            uid=target_uid, gid=target_gid, mode=self.PRIVATE_FILE_MODE,
-         ),
-         'shared_file': roverlay.fsutil.VirtualFsOperations (
-            uid=target_uid, gid=target_gid, mode=self.SHARED_FILE_MODE,
-         ),
-      }
+      self.fs_shared_virtual = roverlay.fsutil.VirtualFsOperations (
+         uid=target_uid, gid=target_gid,
+         file_mode=self.SHARED_FILE_MODE, dir_mode=self.SHARED_DIR_MODE
+      )
 
       if options ['pretend']:
-         self.fs_ops = self.fs_ops_virtual
+         self.fs_private = self.fs_private_virtual
+         self.fs_shared  = self.fs_shared_virtual
       else:
-         self.fs_ops =  {
-            'private_dir': roverlay.fsutil.FsOperations (
-               uid=target_uid, gid=target_gid, mode=self.PRIVATE_DIR_MODE,
-            ),
-            'shared_dir': roverlay.fsutil.FsOperations (
-               uid=target_uid, gid=target_gid, mode=self.SHARED_DIR_MODE,
-            ),
-            'private_file': roverlay.fsutil.FsOperations (
-               uid=target_uid, gid=target_gid, mode=self.PRIVATE_FILE_MODE,
-            ),
-            'shared_file': roverlay.fsutil.FsOperations (
-               uid=target_uid, gid=target_gid, mode=self.SHARED_FILE_MODE,
-            ),
-         }
-
-      # bind fs_ops
-      self.private_dir  = self.fs_ops ['private_dir']
-      self.shared_dir   = self.fs_ops ['shared_dir']
-      self.private_file = self.fs_ops ['private_file']
-      self.shared_file  = self.fs_ops ['shared_file']
+         self.fs_private = roverlay.fsutil.FsOperations (
+            uid=target_uid, gid=target_gid,
+            file_mode=self.PRIVATE_FILE_MODE, dir_mode=self.PRIVATE_DIR_MODE
+         )
+         self.fs_shared = roverlay.fsutil.FsOperations (
+            uid=target_uid, gid=target_gid,
+            file_mode=self.SHARED_FILE_MODE, dir_mode=self.SHARED_DIR_MODE
+         )
    # --- end of setup (...) ---
 
    def wait_confirm ( self,


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-09-17 13:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-17 13:49 [gentoo-commits] proj/R_overlay:master commit in: roverlay/setupscript/, files/misc/, roverlay/ André Erdmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox