summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2013-01-18 15:05:42 -0800
committerZac Medico <zmedico@gentoo.org>2013-01-18 15:05:42 -0800
commite9a04922c144b267534e3335d2ff3d7bb8994b80 (patch)
tree0c43dc33336066103b605bc7441ac94bc85575b9
parent71235479ab208318dff391420f9695f5cfaa9594 (diff)
downloadportage-e9a04922c144b267534e3335d2ff3d7bb8994b80.tar.gz
portage-e9a04922c144b267534e3335d2ff3d7bb8994b80.tar.bz2
portage-e9a04922c144b267534e3335d2ff3d7bb8994b80.zip
Add workaround for Python 2.6.4 issue 4978
Avoid "TypeError: keywords must be strings" issue triggered by unicode_literals: http://bugs.python.org/issue4978
-rw-r--r--pym/_emerge/depgraph.py9
-rw-r--r--pym/_emerge/resolver/output.py4
-rw-r--r--pym/portage/__init__.py9
-rw-r--r--pym/portage/dbapi/porttree.py4
-rw-r--r--pym/portage/dbapi/vartree.py3
-rw-r--r--pym/portage/news.py4
-rw-r--r--pym/portage/package/ebuild/doebuild.py7
-rw-r--r--pym/portage/repository/config.py2
-rw-r--r--pym/repoman/checks.py3
9 files changed, 32 insertions, 13 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index b5dba31dc..7a967957c 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -2971,7 +2971,8 @@ class depgraph(object):
not been scheduled for replacement.
"""
kwargs["trees"] = self._dynamic_config._graph_trees
- return self._select_atoms_highest_available(*pargs, **kwargs)
+ return self._select_atoms_highest_available(*pargs,
+ **portage._native_kwargs(kwargs))
def _select_atoms_highest_available(self, root, depstring,
myuse=None, parent=None, strict=True, trees=None, priority=None):
@@ -6813,7 +6814,8 @@ class depgraph(object):
writemsg("\n", noiselevel=-1)
for pargs, kwargs in self._dynamic_config._unsatisfied_deps_for_display:
- self._show_unsatisfied_dep(*pargs, **kwargs)
+ self._show_unsatisfied_dep(*pargs,
+ **portage._native_kwargs(kwargs))
def saveNomergeFavorites(self):
"""Find atoms in favorites that are not in the mergelist and add them
@@ -7158,7 +7160,8 @@ class depgraph(object):
try:
for pargs, kwargs in self._dynamic_config._unsatisfied_deps_for_display:
self._show_unsatisfied_dep(
- *pargs, check_autounmask_breakage=True, **kwargs)
+ *pargs, check_autounmask_breakage=True,
+ **portage._native_kwargs(kwargs))
except self._autounmask_breakage:
return True
return False
diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py
index 651a4f73c..6aeadee94 100644
--- a/pym/_emerge/resolver/output.py
+++ b/pym/_emerge/resolver/output.py
@@ -12,6 +12,7 @@ __all__ = (
import sys
+import portage
from portage import os
from portage.dbapi.dep_expand import dep_expand
from portage.dep import cpvequal, _repo_separator, _slot_separator
@@ -316,7 +317,8 @@ class Display(object):
kwargs["myrepo"] = pkg.repo
myfilesdict = None
try:
- myfilesdict = db.getfetchsizes(pkg.cpv, **kwargs)
+ myfilesdict = db.getfetchsizes(pkg.cpv,
+ **portage._native_kwargs(kwargs))
except InvalidDependString as e:
# FIXME: validate SRC_URI earlier
depstr, = db.aux_get(pkg.cpv,
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 3bae4deff..94ca7b90f 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -198,6 +198,15 @@ else:
_native_string = _unicode_encode
+if sys.hexversion >= 0x20605f0:
+ def _native_kwargs(kwargs):
+ return kwargs
+else:
+ # Avoid "TypeError: keywords must be strings" issue triggered
+ # by unicode_literals: http://bugs.python.org/issue4978
+ def _native_kwargs(kwargs):
+ return dict((_native_string(k), v) for k, v in kwargs.iteritems())
+
class _unicode_func_wrapper(object):
"""
Wraps a function, converts arguments from unicode to bytes,
diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index 321b6758a..e21e53ce6 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -155,10 +155,10 @@ class portdbapi(dbapi):
# portage group.
depcachedir_unshared = True
else:
- cache_kwargs.update({
+ cache_kwargs.update(portage._native_kwargs({
'gid' : portage_gid,
'perms' : 0o664
- })
+ }))
# If secpass < 1, we don't want to write to the cache
# since then we won't be able to apply group permissions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 30add8a89..20a114bda 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -4837,7 +4837,8 @@ class dblink(object):
else:
kwargs['mode'] = 'w'
kwargs['encoding'] = _encodings['repo.content']
- write_atomic(os.path.join(self.dbdir, fname), data, **kwargs)
+ write_atomic(os.path.join(self.dbdir, fname), data,
+ **portage._native_kwargs(kwargs))
def getelements(self,ename):
if not os.path.exists(self.dbdir+"/"+ename):
diff --git a/pym/portage/news.py b/pym/portage/news.py
index 94ec8f164..408fb5c5f 100644
--- a/pym/portage/news.py
+++ b/pym/portage/news.py
@@ -13,6 +13,7 @@ import io
import logging
import os as _os
import re
+import portage
from portage import OrderedDict
from portage import os
from portage import _encodings
@@ -241,7 +242,8 @@ class NewsItem(object):
for values in self.restrictions.values():
any_match = False
for restriction in values:
- if restriction.checkRestriction(**kwargs):
+ if restriction.checkRestriction(
+ **portage._native_kwargs(kwargs)):
any_match = True
if not any_match:
all_match = False
diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py
index 3e8ff0138..71a6f156f 100644
--- a/pym/portage/package/ebuild/doebuild.py
+++ b/pym/portage/package/ebuild/doebuild.py
@@ -135,7 +135,7 @@ def _doebuild_spawn(phase, settings, actionmap=None, **kwargs):
settings['EBUILD_PHASE'] = phase
try:
- return spawn(cmd, settings, **kwargs)
+ return spawn(cmd, settings, **portage._native_kwargs(kwargs))
finally:
settings.pop('EBUILD_PHASE', None)
@@ -1453,14 +1453,15 @@ def spawn(mystring, mysettings, debug=0, free=0, droppriv=0, sesandbox=0, fakero
mysettings["PORTAGE_SANDBOX_T"])
if keywords.get("returnpid"):
- return spawn_func(mystring, env=mysettings.environ(), **keywords)
+ return spawn_func(mystring, env=mysettings.environ(),
+ **portage._native_kwargs(keywords))
proc = EbuildSpawnProcess(
background=False, args=mystring,
scheduler=SchedulerInterface(portage._internal_caller and
global_event_loop() or EventLoop(main=False)),
spawn_func=spawn_func,
- settings=mysettings, **keywords)
+ settings=mysettings, **portage._native_kwargs(keywords))
proc.start()
proc.wait()
diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index a1c1f79ce..8a110e990 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -238,7 +238,7 @@ class RepoConfig(object):
if self.disable_manifest:
kwds['from_scratch'] = True
kwds['find_invalid_path_char'] = self.find_invalid_path_char
- return manifest.Manifest(*args, **kwds)
+ return manifest.Manifest(*args, **portage._native_kwargs(kwds))
def update(self, new_repo):
"""Update repository with options in another RepoConfig"""
diff --git a/pym/repoman/checks.py b/pym/repoman/checks.py
index 83ce2ed6e..9dd3b959d 100644
--- a/pym/repoman/checks.py
+++ b/pym/repoman/checks.py
@@ -819,7 +819,8 @@ class PortageInternalVariableAssignment(LineCheck):
_base_check_classes = (InheritEclass, LineCheck, PhaseCheck)
_constant_checks = tuple(chain((v() for k, v in globals().items()
if isinstance(v, type) and issubclass(v, LineCheck) and v not in _base_check_classes),
- (InheritEclass(k, **kwargs) for k, kwargs in _eclass_info.items())))
+ (InheritEclass(k, **portage._native_kwargs(kwargs))
+ for k, kwargs in _eclass_info.items())))
_here_doc_re = re.compile(r'.*\s<<[-]?(\w+)$')
_ignore_comment_re = re.compile(r'^\s*#')