* [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