diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-08-14 08:19:59 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-08-14 08:19:59 +0000 |
commit | 96afdded6d5cdcb8b43f5d49907cadd7af181c88 (patch) | |
tree | e9e25bf89428a4c2f704bc09ceee679037f20669 /pym/portage/dbapi/vartree.py | |
parent | 789dd0e91ed3a1faa60ae1f4a6172b483717e622 (diff) | |
download | portage-96afdded6d5cdcb8b43f5d49907cadd7af181c88.tar.gz portage-96afdded6d5cdcb8b43f5d49907cadd7af181c88.tar.bz2 portage-96afdded6d5cdcb8b43f5d49907cadd7af181c88.zip |
Use portage._merge_encoding to encode/decode all filenames during
merge/unmerge operations.
svn path=/main/trunk/; revision=14027
Diffstat (limited to 'pym/portage/dbapi/vartree.py')
-rw-r--r-- | pym/portage/dbapi/vartree.py | 74 |
1 files changed, 60 insertions, 14 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 18c387ee7..d0a389ee5 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -8,7 +8,7 @@ __all__ = ["PreservedLibsRegistry", "LinkageMap", 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', @@ -37,8 +37,10 @@ from portage import listdir, dep_expand, digraph, flatten, key_expand, \ # 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 @@ -140,6 +142,9 @@ class PreservedLibsRegistry(object): 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 \ @@ -239,6 +244,9 @@ class LinkageMap(object): 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) @@ -276,6 +284,8 @@ class LinkageMap(object): 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() @@ -395,6 +405,9 @@ class LinkageMap(object): object that have no corresponding libraries to fulfill the dependency. """ + + os = _os_merge + class _LibraryCache(object): """ @@ -541,6 +554,7 @@ class LinkageMap(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: @@ -608,6 +622,9 @@ class LinkageMap(object): set-of-library-paths satisfy soname. """ + + os = _os_merge + rValue = {} if not self._libs: @@ -668,6 +685,9 @@ class LinkageMap(object): set-of-library-paths satisfy soname. """ + + os = _os_merge + rValue = set() if not self._libs: @@ -2265,6 +2285,7 @@ class dblink(object): @rtype: None """ + os = _os_merge showMessage = self._display_merge scheduler = self._scheduler @@ -2540,6 +2561,8 @@ class dblink(object): if the file is not owned by this package. """ + os = _os_merge + filename = portage._unicode_decode(filename) destroot = portage._unicode_decode(destroot) @@ -2624,6 +2647,7 @@ class dblink(object): "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() @@ -2719,6 +2743,7 @@ class dblink(object): if not preserve_paths: return + os = _os_merge showMessage = self._display_merge root = self.myroot @@ -2726,7 +2751,7 @@ class dblink(object): 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: @@ -2865,6 +2890,8 @@ class dblink(object): 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) @@ -2906,6 +2933,9 @@ class dblink(object): 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", ""))]) @@ -3017,6 +3047,9 @@ class dblink(object): 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: @@ -3040,6 +3073,8 @@ class dblink(object): if not installed_instances: return 0 + os = _os_merge + showMessage = self._display_merge scheduler = self._scheduler @@ -3150,6 +3185,8 @@ class dblink(object): 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) @@ -3248,9 +3285,9 @@ class dblink(object): 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:] @@ -3730,8 +3767,9 @@ class dblink(object): 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 @@ -3814,7 +3852,9 @@ class dblink(object): 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") @@ -3852,13 +3892,15 @@ class dblink(object): 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: @@ -3869,7 +3911,7 @@ class dblink(object): 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]) @@ -3956,7 +3998,8 @@ class dblink(object): 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: @@ -3971,7 +4014,9 @@ class dblink(object): 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 @@ -4122,6 +4167,7 @@ def write_contents(contents, root, f): 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 @@ -4168,7 +4214,7 @@ def tar_contents(contents, root, tar, protect=None, onProgress=None): 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: |