summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'pym/portage/sets/files.py')
-rw-r--r--pym/portage/sets/files.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/pym/portage/sets/files.py b/pym/portage/sets/files.py
index f4ecbae7c..f0b6fed58 100644
--- a/pym/portage/sets/files.py
+++ b/pym/portage/sets/files.py
@@ -125,9 +125,22 @@ class StaticFileSet(EditablePackageSet):
directory = self._repopath_sub.sub(trees["porttree"].dbapi.treemap[match.groupdict()["reponame"]], directory)
except KeyError:
raise SetConfigError(_("Could not find repository '%s'") % match.groupdict()["reponame"])
+
+ if isinstance(directory, unicode):
+ # Avoid UnicodeDecodeError raised from
+ # os.path.join when called by os.walk.
+ directory_unicode = directory
+ directory = directory.encode('utf_8', 'replace')
+ else:
+ directory_unicode = unicode(directory,
+ encoding='utf_8', errors='replace')
+
if os.path.isdir(directory):
directory = normalize_path(directory)
for parent, dirs, files in os.walk(directory):
+ if not isinstance(parent, unicode):
+ parent = unicode(parent,
+ encoding='utf_8', errors='replace')
for d in dirs[:]:
if d[:1] == '.':
dirs.remove(d)
@@ -140,7 +153,7 @@ class StaticFileSet(EditablePackageSet):
if filename.endswith(".metadata"):
continue
filename = os.path.join(parent,
- filename)[1 + len(directory):]
+ filename)[1 + len(directory_unicode):]
myname = name_pattern.replace("$name", filename)
myname = myname.replace("${name}", filename)
rValue[myname] = StaticFileSet(