_os_overrides = {
id(_os.fdopen) : _os.fdopen,
id(_os.read) : _os.read,
+ id(_os.system) : _os.system,
}
os = _unicode_module_wrapper(_os, overrides=_os_overrides)
# Imports below this point rely on the above unicode wrapper definitions.
_selinux = None
selinux = None
+_selinux_merge = _unicode_module_wrapper(_selinux, encoding=_merge_encoding)
try:
import portage._selinux
selinux = _unicode_module_wrapper(_selinux)
return
# Try to generate an ENOENT error if appropriate.
if 'h' in opts:
- os.lstat(path)
+ _os_merge.lstat(path)
else:
- os.stat(path)
+ _os_merge.stat(path)
# Make sure the binary exists.
if not portage.process.find_binary('chflags'):
raise portage.exception.CommandNotFound('chflags')
S_ISUID and S_ISGID bits, so those bits are restored if
necessary.
"""
+
+ os = _os_merge
+
inst_uid = int(mysettings["PORTAGE_INST_UID"])
inst_gid = int(mysettings["PORTAGE_INST_GID"])
counted_inodes = set()
for parent, dirs, files in os.walk(destdir):
- parent = _unicode_decode(parent)
+ parent = _unicode_decode(parent, encoding=_merge_encoding)
for fname in chain(dirs, files):
- fname = _unicode_decode(fname)
+ fname = _unicode_decode(fname, encoding=_merge_encoding)
fpath = os.path.join(parent, fname)
mystat = os.lstat(fpath)
if stat.S_ISREG(mystat.st_mode) and \
myuid = inst_uid
if mystat.st_gid == portage_gid:
mygid = inst_gid
- apply_secpass_permissions(fpath, uid=myuid, gid=mygid,
+ apply_secpass_permissions(
+ _unicode_encode(fpath, encoding=_merge_encoding),
+ uid=myuid, gid=mygid,
mode=mystat.st_mode, stat_cached=mystat,
follow_links=False)
import portage
portage.proxy.lazyimport.lazyimport(globals(),
- 'portage.checksum:perform_md5',
+ 'portage.checksum:_perform_md5_merge@perform_md5',
'portage.dep:dep_getkey,isjustname,isvalidatom,match_from_list,' + \
'use_reduce,paren_reduce',
'portage.elog:elog_process',
# This is a special version of the os module, wrapped for unicode support.
from portage import os
+from portage import _merge_encoding
+from portage import _os_merge
+from portage import _selinux_merge
from portage import _unicode_encode
-from portage import selinux
from portage.cache.mappings import slot_dict_class
def pruneNonExisting(self):
""" Remove all records for objects that no longer exist on the filesystem. """
+
+ os = _os_merge
+
for cps in self._data.keys():
cpv, counter, paths = self._data[cps]
paths = [f for f in paths \
2. realpath of object if object does not exist.
"""
+
+ os = _os_merge
+
abs_path = os.path.join(root, obj.lstrip(os.sep))
try:
object_stat = os.stat(abs_path)
Raises CommandNotFound if there are preserved libs
and the scanelf binary is not available.
"""
+
+ os = _os_merge
root = self._root
root_len = len(root) - 1
self._clear_cache()
object that have no corresponding libraries to fulfill the dependency.
"""
+
+ os = _os_merge
+
class _LibraryCache(object):
"""
2. False if obj is not a master link
"""
+ os = _os_merge
basename = os.path.basename(obj)
obj_key = self._obj_key(obj)
if obj_key not in self._obj_properties:
set-of-library-paths satisfy soname.
"""
+
+ os = _os_merge
+
rValue = {}
if not self._libs:
set-of-library-paths satisfy soname.
"""
+
+ os = _os_merge
+
rValue = set()
if not self._libs:
@rtype: None
"""
+ os = _os_merge
showMessage = self._display_merge
scheduler = self._scheduler
if the file is not owned by this package.
"""
+ os = _os_merge
+
filename = portage._unicode_decode(filename)
destroot = portage._unicode_decode(destroot)
"preserve-libs" in self.settings.features):
return None
+ os = _os_merge
linkmap = self.vartree.dbapi.linkmap
installed_instance = self._installed_instance
old_contents = installed_instance.getcontents()
if not preserve_paths:
return
+ os = _os_merge
showMessage = self._display_merge
root = self.myroot
new_contents = self.getcontents().copy()
old_contents = self._installed_instance.getcontents()
for f in sorted(preserve_paths):
- f = portage._unicode_decode(f)
+ f = portage._unicode_decode(f, encoding=_merge_encoding)
f_abs = os.path.join(root, f.lstrip(os.sep))
contents_entry = old_contents.get(f_abs)
if contents_entry is None:
Remove files returned from _find_unused_preserved_libs().
"""
+ os = _os_merge
+
files_to_remove = set()
for files in cpv_lib_map.itervalues():
files_to_remove.update(files)
self.vartree.dbapi.plib_registry.pruneNonExisting()
def _collision_protect(self, srcroot, destroot, mypkglist, mycontents):
+
+ os = _os_merge
+
collision_ignore = set([normalize_path(myignore) for myignore in \
portage.util.shlex_split(
self.settings.get("COLLISION_IGNORE", ""))])
Multiple paths may reference the same inode due to hardlinks.
All lstat() calls are relative to self.myroot.
"""
+
+ os = _os_merge
+
root = self.myroot
inode_map = {}
for f in path_iter:
if not installed_instances:
return 0
+ os = _os_merge
+
showMessage = self._display_merge
scheduler = self._scheduler
not existing; we will merge these symlinks at a later time.
"""
+ os = _os_merge
+
srcroot = portage._unicode_decode(srcroot)
destroot = portage._unicode_decode(destroot)
inforoot = portage._unicode_decode(inforoot)
def onerror(e):
raise
for parent, dirs, files in os.walk(srcroot, onerror=onerror):
- parent = portage._unicode_decode(parent)
+ parent = portage._unicode_decode(parent, encoding=_merge_encoding)
for f in files:
- f = portage._unicode_decode(f)
+ f = portage._unicode_decode(f, encoding=_merge_encoding)
file_path = os.path.join(parent, f)
relative_path = file_path[srcroot_len:]
writemsg = self._display_merge
scheduler = self._scheduler
- sep = portage.os.sep
- join = portage.os.path.join
+ os = _os_merge
+ sep = os.sep
+ join = os.path.join
srcroot = normalize_path(srcroot).rstrip(sep) + sep
destroot = normalize_path(destroot).rstrip(sep) + sep
secondhand.append(mysrc[len(srcroot):])
continue
# unlinking no longer necessary; "movefile" will overwrite symlinks atomically and correctly
- mymtime = movefile(mysrc, mydest, newmtime=thismtime, sstat=mystat, mysettings=self.settings)
+ mymtime = movefile(mysrc, mydest, newmtime=thismtime,
+ sstat=mystat, mysettings=self.settings,
+ encoding=_merge_encoding)
if mymtime != None:
showMessage(">>> %s -> %s\n" % (mydest, myto))
outfile.write("sym "+myrealdest+" -> "+myto+" "+str(mymtime)+"\n")
bsd_chflags.lchflags(mydest, dflags)
else:
# a non-directory and non-symlink-to-directory. Won't work for us. Move out of the way.
- if movefile(mydest, mydest+".backup", mysettings=self.settings) is None:
+ if movefile(mydest, mydest+".backup",
+ mysettings=self.settings,
+ encoding=_merge_encoding) is None:
return 1
showMessage(_("bak %s %s.backup\n") % (mydest, mydest),
level=logging.ERROR, noiselevel=-1)
#now create our directory
if self.settings.selinux_enabled():
- selinux.mkdir(mydest, mysrc)
+ _selinux_merge.mkdir(mydest, mysrc)
else:
os.mkdir(mydest)
if bsd_chflags:
else:
#destination doesn't exist
if self.settings.selinux_enabled():
- selinux.mkdir(mydest, mysrc)
+ _selinux_merge.mkdir(mydest, mysrc)
else:
os.mkdir(mydest)
os.chmod(mydest, mystat[0])
mymtime = movefile(mysrc, mydest, newmtime=thismtime,
sstat=mystat, mysettings=self.settings,
- hardlink_candidates=hardlink_candidates)
+ hardlink_candidates=hardlink_candidates,
+ encoding=_merge_encoding)
if mymtime is None:
return 1
if hardlink_candidates is not None:
zing = "!!!"
if mydmode is None:
# destination doesn't exist
- if movefile(mysrc, mydest, newmtime=thismtime, sstat=mystat, mysettings=self.settings) != None:
+ if movefile(mysrc, mydest, newmtime=thismtime,
+ sstat=mystat, mysettings=self.settings,
+ encoding=_merge_encoding) is not None:
zing = ">>>"
else:
return 1
f.write(line)
def tar_contents(contents, root, tar, protect=None, onProgress=None):
+ os = _os_merge
from portage.util import normalize_path
import tarfile
root = normalize_path(root).rstrip(os.path.sep) + os.path.sep
tarinfo.size = 0
tar.addfile(tarinfo)
else:
- f = open(_unicode_encode(path), 'rb')
+ f = open(_unicode_encode(path, encoding=_merge_encoding), 'rb')
try:
tar.addfile(tarinfo, f)
finally: