public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: pym/repoman/, pym/portage/package/ebuild/_ipc/, pym/_emerge/resolver/, ...
@ 2012-03-27 15:52 Zac Medico
  0 siblings, 0 replies; 3+ messages in thread
From: Zac Medico @ 2012-03-27 15:52 UTC (permalink / raw
  To: gentoo-commits

commit:     b2147b15e11b3d30d646098696ef69d749aeb5b2
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Mar 27 15:52:35 2012 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Mar 27 15:52:35 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b2147b15

Replace @returns with @return.

---
 bin/repoman                                        |    2 +-
 pym/_emerge/BlockerCache.py                        |    2 +-
 pym/_emerge/CompositeTask.py                       |    2 +-
 pym/_emerge/JobStatusDisplay.py                    |    2 +-
 pym/_emerge/Package.py                             |    4 ++--
 pym/_emerge/PollScheduler.py                       |    2 +-
 pym/_emerge/QueueScheduler.py                      |    2 +-
 pym/_emerge/Scheduler.py                           |   10 +++++-----
 pym/_emerge/_flush_elog_mod_echo.py                |    2 +-
 pym/_emerge/depgraph.py                            |    6 +++---
 pym/_emerge/resolver/output.py                     |    8 ++++----
 pym/portage/cache/mappings.py                      |    2 +-
 pym/portage/dbapi/bintree.py                       |    6 +++---
 pym/portage/dbapi/porttree.py                      |    6 +++---
 pym/portage/dbapi/vartree.py                       |   10 +++++-----
 pym/portage/dep/__init__.py                        |    2 +-
 pym/portage/env/loaders.py                         |    4 ++--
 pym/portage/glsa.py                                |    8 ++++----
 pym/portage/news.py                                |    2 +-
 pym/portage/package/ebuild/_ipc/QueryCommand.py    |    2 +-
 pym/portage/package/ebuild/digestcheck.py          |    2 +-
 pym/portage/package/ebuild/digestgen.py            |    2 +-
 pym/portage/package/ebuild/doebuild.py             |    4 ++--
 pym/portage/process.py                             |    4 ++--
 pym/portage/util/ExtractKernelVersion.py           |    2 +-
 pym/portage/util/__init__.py                       |    2 +-
 .../util/_dyn_libs/PreservedLibsRegistry.py        |    2 +-
 pym/portage/util/_eventloop/EventLoop.py           |    2 +-
 pym/portage/util/_pty.py                           |    2 +-
 pym/portage/util/lafilefixer.py                    |    2 +-
 pym/portage/util/listdir.py                        |    2 +-
 pym/repoman/utilities.py                           |    6 +++---
 32 files changed, 58 insertions(+), 58 deletions(-)

diff --git a/bin/repoman b/bin/repoman
index 8e19a47..54d864f 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -1026,7 +1026,7 @@ def fetch_metadata_dtd():
 	Fetch metadata.dtd if it doesn't exist or the ctime is older than
 	metadata_dtd_ctime_interval.
 	@rtype: bool
-	@returns: True if successful, otherwise False
+	@return: True if successful, otherwise False
 	"""
 
 	must_fetch = True

diff --git a/pym/_emerge/BlockerCache.py b/pym/_emerge/BlockerCache.py
index 57e9d2c..06598a4 100644
--- a/pym/_emerge/BlockerCache.py
+++ b/pym/_emerge/BlockerCache.py
@@ -180,7 +180,7 @@ class BlockerCache(portage.cache.mappings.MutableMapping):
 	def __getitem__(self, cpv):
 		"""
 		@rtype: BlockerData
-		@returns: An object with counter and atoms attributes.
+		@return: An object with counter and atoms attributes.
 		"""
 		return self.BlockerData(*self._cache_data["blockers"][cpv])
 

diff --git a/pym/_emerge/CompositeTask.py b/pym/_emerge/CompositeTask.py
index e56188d..3e43478 100644
--- a/pym/_emerge/CompositeTask.py
+++ b/pym/_emerge/CompositeTask.py
@@ -104,7 +104,7 @@ class CompositeTask(AsynchronousTask):
 		Subclasses can use this as a generic task exit callback.
 
 		@rtype: int
-		@returns: The task.returncode attribute.
+		@return: The task.returncode attribute.
 		"""
 		self._assert_current(task)
 		if task.returncode != os.EX_OK:

diff --git a/pym/_emerge/JobStatusDisplay.py b/pym/_emerge/JobStatusDisplay.py
index d84d1b0..5b9b221 100644
--- a/pym/_emerge/JobStatusDisplay.py
+++ b/pym/_emerge/JobStatusDisplay.py
@@ -97,7 +97,7 @@ class JobStatusDisplay(object):
 		"""
 		Initialize term control codes.
 		@rtype: bool
-		@returns: True if term codes were successfully initialized,
+		@return: True if term codes were successfully initialized,
 			False otherwise.
 		"""
 

diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index f87d593..e4d416c 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -491,7 +491,7 @@ class Package(Task):
 
 		def is_valid_flag(self, flags):
 			"""
-			@returns: True if all flags are valid USE values which may
+			@return: True if all flags are valid USE values which may
 				be specified in USE dependencies, False otherwise.
 			"""
 			if isinstance(flags, basestring):
@@ -505,7 +505,7 @@ class Package(Task):
 
 		def get_missing_iuse(self, flags):
 			"""
-			@returns: A list of flags missing from IUSE.
+			@return: A list of flags missing from IUSE.
 			"""
 			if isinstance(flags, basestring):
 				flags = [flags]

diff --git a/pym/_emerge/PollScheduler.py b/pym/_emerge/PollScheduler.py
index 8f01838..1c631c3 100644
--- a/pym/_emerge/PollScheduler.py
+++ b/pym/_emerge/PollScheduler.py
@@ -97,7 +97,7 @@ class PollScheduler(object):
 	def _keep_scheduling(self):
 		"""
 		@rtype: bool
-		@returns: True if there may be remaining tasks to schedule,
+		@return: True if there may be remaining tasks to schedule,
 			False otherwise.
 		"""
 		return False

diff --git a/pym/_emerge/QueueScheduler.py b/pym/_emerge/QueueScheduler.py
index 730bd78..9d73b78 100644
--- a/pym/_emerge/QueueScheduler.py
+++ b/pym/_emerge/QueueScheduler.py
@@ -67,7 +67,7 @@ class QueueScheduler(PollScheduler):
 	def _schedule_tasks(self):
 		"""
 		@rtype: bool
-		@returns: True if there may be remaining tasks to schedule,
+		@return: True if there may be remaining tasks to schedule,
 			False otherwise.
 		"""
 		if self._terminated_tasks:

diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py
index bde6cf3..8d6ab9f 100644
--- a/pym/_emerge/Scheduler.py
+++ b/pym/_emerge/Scheduler.py
@@ -357,7 +357,7 @@ class Scheduler(PollScheduler):
 		Check if background mode is enabled and adjust states as necessary.
 
 		@rtype: bool
-		@returns: True if background mode is enabled, False otherwise.
+		@return: True if background mode is enabled, False otherwise.
 		"""
 		background = (self._max_jobs is True or \
 			self._max_jobs > 1 or "--quiet" in self.myopts \
@@ -1435,7 +1435,7 @@ class Scheduler(PollScheduler):
 			merge order
 		@type later: set
 		@rtype: bool
-		@returns: True if the package is dependent, False otherwise.
+		@return: True if the package is dependent, False otherwise.
 		"""
 
 		graph = self._digraph
@@ -1535,7 +1535,7 @@ class Scheduler(PollScheduler):
 	def _job_delay(self):
 		"""
 		@rtype: bool
-		@returns: True if job scheduling should be delayed, False otherwise.
+		@return: True if job scheduling should be delayed, False otherwise.
 		"""
 
 		if self._jobs and self._max_load is not None:
@@ -1553,7 +1553,7 @@ class Scheduler(PollScheduler):
 	def _schedule_tasks_imp(self):
 		"""
 		@rtype: bool
-		@returns: True if state changed, False otherwise.
+		@return: True if state changed, False otherwise.
 		"""
 
 		state_change = 0
@@ -1710,7 +1710,7 @@ class Scheduler(PollScheduler):
 		Use the current resume list to calculate a new one,
 		dropping any packages with unsatisfied deps.
 		@rtype: bool
-		@returns: True if successful, False otherwise.
+		@return: True if successful, False otherwise.
 		"""
 		print(colorize("GOOD", "*** Resuming merge..."))
 

diff --git a/pym/_emerge/_flush_elog_mod_echo.py b/pym/_emerge/_flush_elog_mod_echo.py
index eab4168..9ac65b8 100644
--- a/pym/_emerge/_flush_elog_mod_echo.py
+++ b/pym/_emerge/_flush_elog_mod_echo.py
@@ -8,7 +8,7 @@ def _flush_elog_mod_echo():
 	Dump the mod_echo output now so that our other
 	notifications are shown last.
 	@rtype: bool
-	@returns: True if messages were shown, False otherwise.
+	@return: True if messages were shown, False otherwise.
 	"""
 	messages_shown = bool(mod_echo._items)
 	mod_echo.finalize()

diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index e4310b4..072a5ea 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -886,7 +886,7 @@ class depgraph(object):
 			relationships from nested sets
 		@type add_to_digraph: Boolean
 		@rtype: Iterable
-		@returns: All args given in the input together with additional
+		@return: All args given in the input together with additional
 			SetArg instances that are generated from nested sets
 		"""
 
@@ -1901,7 +1901,7 @@ class depgraph(object):
 		@param atom_without_category: an atom without a category component
 		@type atom_without_category: String
 		@rtype: list
-		@returns: a list of atoms containing categories (possibly empty)
+		@return: a list of atoms containing categories (possibly empty)
 		"""
 		null_cp = portage.dep_getkey(insert_category_into_atom(
 			atom_without_category, "null"))
@@ -7029,7 +7029,7 @@ def _resume_depgraph(settings, trees, mtimedb, myopts, myparams, spinner):
 	PackageNotFound or depgraph.UnsatisfiedResumeDep when necessary.
 	TODO: Return reasons for dropped_tasks, for display/logging.
 	@rtype: tuple
-	@returns: (success, depgraph, dropped_tasks)
+	@return: (success, depgraph, dropped_tasks)
 	"""
 	skip_masked = True
 	skip_unsatisfied = True

diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py
index a97658a..1208bf9 100644
--- a/pym/_emerge/resolver/output.py
+++ b/pym/_emerge/resolver/output.py
@@ -514,8 +514,8 @@ class Display(object):
 	def _insert_slot(self, pkg, pkg_info, myinslotlist):
 		"""Adds slot info to the message
 
-		@returns addl: formatted slot info
-		@returns myoldbest: installed version list
+		@return addl: formatted slot info
+		@return myoldbest: installed version list
 		Modifies self.counters.downgrades, self.counters.upgrades,
 			self.counters.binary
 		"""
@@ -541,8 +541,8 @@ class Display(object):
 	def _new_slot(self, pkg, pkg_info):
 		"""New slot, mark it new.
 
-		@returns addl: formatted slot info
-		@returns myoldbest: installed version list
+		@return addl: formatted slot info
+		@return myoldbest: installed version list
 		Modifies self.counters.newslot, self.counters.binary
 		"""
 		addl = " " + green("NS") + pkg_info.fetch_symbol + "  "

diff --git a/pym/portage/cache/mappings.py b/pym/portage/cache/mappings.py
index 60a918e..bc8ce9a 100644
--- a/pym/portage/cache/mappings.py
+++ b/pym/portage/cache/mappings.py
@@ -316,7 +316,7 @@ def slot_dict_class(keys, prefix="_val_"):
 		attribute names from keys
 	@type prefix: String
 	@rtype: SlotDict
-	@returns: A class that constructs SlotDict instances
+	@return: A class that constructs SlotDict instances
 		having the specified keys.
 	"""
 	if isinstance(keys, frozenset):

diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index 31ba364..2295b9f 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -214,7 +214,7 @@ def _pkgindex_cpv_map_latest_build(pkgindex):
 	@param pkgindex: A PackageIndex instance.
 	@type pkgindex: PackageIndex
 	@rtype: dict
-	@returns: a dict containing entry for the give cpv.
+	@return: a dict containing entry for the give cpv.
 	"""
 	cpv_map = {}
 
@@ -1157,7 +1157,7 @@ class binarytree(object):
 		Performs checksums and evaluates USE flag conditionals.
 		Raises InvalidDependString if necessary.
 		@rtype: dict
-		@returns: a dict containing entry for the give cpv.
+		@return: a dict containing entry for the give cpv.
 		"""
 
 		pkg_path = self.getname(cpv)
@@ -1363,7 +1363,7 @@ class binarytree(object):
 		Verify digests for the given package and raise DigestException
 		if verification fails.
 		@rtype: bool
-		@returns: True if digests could be located, False otherwise.
+		@return: True if digests could be located, False otherwise.
 		"""
 		cpv = pkg
 		if not isinstance(cpv, basestring):

diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index 233a2c1..382bcda 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -254,7 +254,7 @@ class portdbapi(dbapi):
 		@param canonical_repo_path: the canonical path of a repository, as
 			resolved by os.path.realpath()
 		@type canonical_repo_path: String
-		@returns: The repo_name for the corresponding repository, or None
+		@return: The repo_name for the corresponding repository, or None
 			if the path does not correspond a known repository
 		@rtype: String or None
 		"""
@@ -331,7 +331,7 @@ class portdbapi(dbapi):
 		Create an EbuildMetadataPhase instance to generate metadata for the
 		give ebuild.
 		@rtype: EbuildMetadataPhase
-		@returns: A new EbuildMetadataPhase instance, or None if the
+		@return: A new EbuildMetadataPhase instance, or None if the
 			metadata cache is already valid.
 		"""
 		metadata, ebuild_hash = self._pull_valid_cache(cpv, ebuild_path, repo_path)
@@ -551,7 +551,7 @@ class portdbapi(dbapi):
 		@param mytree: The canonical path of the tree in which the ebuild
 			is located, or None for automatic lookup
 		@type mypkg: String
-		@returns: A dict which maps each file name to a set of alternative
+		@return: A dict which maps each file name to a set of alternative
 			URIs.
 		@rtype: dict
 		"""

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 3e603e2..25ea4c1 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -921,7 +921,7 @@ class vardbapi(dbapi):
 		@param myroot: ignored, self._eroot is used instead
 		@param mycpv: ignored
 		@rtype: int
-		@returns: new counter value
+		@return: new counter value
 		"""
 		myroot = None
 		mycpv = None
@@ -1732,7 +1732,7 @@ class dblink(object):
 			PreservedLibsRegistry yet.
 		@type preserve_paths: set
 		@rtype: Integer
-		@returns:
+		@return:
 		1. os.EX_OK if everything went well.
 		2. return code of the failed phase (for prerm, postrm, cleanrm)
 		"""
@@ -2546,7 +2546,7 @@ class dblink(object):
 		@param destroot:
 		@type destroot:
 		@rtype: Boolean
-		@returns:
+		@return:
 		1. True if this package owns the file.
 		2. False if this package does not own the file.
 		"""
@@ -3376,7 +3376,7 @@ class dblink(object):
 		@param prev_mtimes: { Filename:mtime } mapping for env_update
 		@type prev_mtimes: Dictionary
 		@rtype: Boolean
-		@returns:
+		@return:
 		1. 0 on success
 		2. 1 on failure
 		
@@ -4193,7 +4193,7 @@ class dblink(object):
 		@param thismtime: The current time (typically long(time.time())
 		@type thismtime: Long
 		@rtype: None or Boolean
-		@returns:
+		@return:
 		1. True on failure
 		2. None otherwise
 		

diff --git a/pym/portage/dep/__init__.py b/pym/portage/dep/__init__.py
index 389916f..3832b0b 100644
--- a/pym/portage/dep/__init__.py
+++ b/pym/portage/dep/__init__.py
@@ -62,7 +62,7 @@ def cpvequal(cpv1, cpv2):
 	@param cpv2: CategoryPackageVersion (no operators) Example: "sys-apps/portage-2.1"
 	@type cpv2: String
 	@rtype: Boolean
-	@returns:
+	@return:
 	1.  True if cpv1 = cpv2
 	2.  False Otherwise
 	3.  Throws PortageException if cpv1 or cpv2 is not a CPV

diff --git a/pym/portage/env/loaders.py b/pym/portage/env/loaders.py
index b540fbb..372bc12 100644
--- a/pym/portage/env/loaders.py
+++ b/pym/portage/env/loaders.py
@@ -40,7 +40,7 @@ def RecursiveFileLoader(filename):
 
 	@param filename: name of a file/directory to traverse
 	@rtype: list
-	@returns: List of files to process
+	@return: List of files to process
 	"""
 
 	try:
@@ -139,7 +139,7 @@ class FileLoader(DataLoader):
 			load all files in self.fname
 		@type: Boolean
 		@rtype: tuple
-		@returns:
+		@return:
 		Returns (data,errors), both may be empty dicts or populated.
 		"""
 		data = {}

diff --git a/pym/portage/glsa.py b/pym/portage/glsa.py
index a784d14..2df7ec3 100644
--- a/pym/portage/glsa.py
+++ b/pym/portage/glsa.py
@@ -488,7 +488,7 @@ class Glsa:
 		@type	myfile: String
 		@param	myfile: Filename to grab the XML data from
 		@rtype:		None
-		@returns:	None
+		@return:	None
 		"""
 		self.DOM = xml.dom.minidom.parse(myfile)
 		if not self.DOM.doctype:
@@ -634,7 +634,7 @@ class Glsa:
 		architectures.
 		
 		@rtype:		Boolean
-		@returns:	True if the system is affected, False if not
+		@return:	True if the system is affected, False if not
 		"""
 		rValue = False
 		for k in self.packages:
@@ -654,7 +654,7 @@ class Glsa:
 		GLSA was already applied.
 		
 		@rtype:		Boolean
-		@returns:	True if the GLSA was applied, False if not
+		@return:	True if the GLSA was applied, False if not
 		"""
 		return (self.nr in get_applied_glsas(self.config))
 
@@ -665,7 +665,7 @@ class Glsa:
 		applied or on explicit user request.
 
 		@rtype:		None
-		@returns:	None
+		@return:	None
 		"""
 		if not self.isApplied():
 			checkfile = io.open(

diff --git a/pym/portage/news.py b/pym/portage/news.py
index f34fd6f..bbd9325 100644
--- a/pym/portage/news.py
+++ b/pym/portage/news.py
@@ -370,7 +370,7 @@ def count_unread_news(portdb, vardb, repos=None, update=True):
 	@param update: check for new items (default is True)
 	@type update: boolean
 	@rtype: dict
-	@returns: dictionary mapping repos to integer counts of unread news items
+	@return: dictionary mapping repos to integer counts of unread news items
 	"""
 
 	NEWS_PATH = os.path.join("metadata", "news")

diff --git a/pym/portage/package/ebuild/_ipc/QueryCommand.py b/pym/portage/package/ebuild/_ipc/QueryCommand.py
index 949a148..7bbb0e8 100644
--- a/pym/portage/package/ebuild/_ipc/QueryCommand.py
+++ b/pym/portage/package/ebuild/_ipc/QueryCommand.py
@@ -27,7 +27,7 @@ class QueryCommand(IpcCommand):
 
 	def __call__(self, argv):
 		"""
-		@returns: tuple of (stdout, stderr, returncode)
+		@return: tuple of (stdout, stderr, returncode)
 		"""
 
 		cmd, root, atom_str = argv

diff --git a/pym/portage/package/ebuild/digestcheck.py b/pym/portage/package/ebuild/digestcheck.py
index c8d168e..8705639 100644
--- a/pym/portage/package/ebuild/digestcheck.py
+++ b/pym/portage/package/ebuild/digestcheck.py
@@ -15,7 +15,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
 	"""
 	Verifies checksums. Assumes all files have been downloaded.
 	@rtype: int
-	@returns: 1 on success and 0 on failure
+	@return: 1 on success and 0 on failure
 	"""
 
 	if justmanifest is not None:

diff --git a/pym/portage/package/ebuild/digestgen.py b/pym/portage/package/ebuild/digestgen.py
index 38e9991..6ad3397 100644
--- a/pym/portage/package/ebuild/digestgen.py
+++ b/pym/portage/package/ebuild/digestgen.py
@@ -33,7 +33,7 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
 	@param myportdb: a portdbapi instance
 	@type myportdb: portdbapi
 	@rtype: int
-	@returns: 1 on success and 0 on failure
+	@return: 1 on success and 0 on failure
 	"""
 	if mysettings is None or myportdb is None:
 		raise TypeError("portage.digestgen(): 'mysettings' and 'myportdb' parameter are required.")

diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py
index ffad456..49672e1 100644
--- a/pym/portage/package/ebuild/doebuild.py
+++ b/pym/portage/package/ebuild/doebuild.py
@@ -480,7 +480,7 @@ def doebuild(myebuild, mydo, _unused=None, settings=None, debug=0, listonly=0,
 		caller clean up all returned PIDs.
 	@type returnpid: Boolean
 	@rtype: Boolean
-	@returns:
+	@return:
 	1. 0 for success
 	2. 1 for error
 	
@@ -1368,7 +1368,7 @@ def spawn(mystring, mysettings, debug=0, free=0, droppriv=0, sesandbox=0, fakero
 	@param keywords: Extra options encoded as a dict, to be passed to spawn
 	@type keywords: Dictionary
 	@rtype: Integer
-	@returns:
+	@return:
 	1. The return code of the spawned process.
 	"""
 

diff --git a/pym/portage/process.py b/pym/portage/process.py
index febaf66..94687ea 100644
--- a/pym/portage/process.py
+++ b/pym/portage/process.py
@@ -354,7 +354,7 @@ def _exec(binary, mycommand, opt_name, fd_pipes, env, gid, groups, uid, umask,
 	@param pre_exec: A function to be called with no arguments just prior to the exec call.
 	@type pre_exec: callable
 	@rtype: None
-	@returns: Never returns (calls os.execve)
+	@return: Never returns (calls os.execve)
 	"""
 	
 	# If the process we're creating hasn't been given a name
@@ -429,7 +429,7 @@ def find_binary(binary):
 	@param binary: Name of the binary to find
 	@type string
 	@rtype: None or string
-	@returns: full path to binary or None if the binary could not be located.
+	@return: full path to binary or None if the binary could not be located.
 	"""
 	for path in os.environ.get("PATH", "").split(":"):
 		filename = "%s/%s" % (path, binary)

diff --git a/pym/portage/util/ExtractKernelVersion.py b/pym/portage/util/ExtractKernelVersion.py
index 49957f5..69bd58a 100644
--- a/pym/portage/util/ExtractKernelVersion.py
+++ b/pym/portage/util/ExtractKernelVersion.py
@@ -14,7 +14,7 @@ def ExtractKernelVersion(base_dir):
 	@param base_dir: Path to sources (usually /usr/src/linux)
 	@type base_dir: string
 	@rtype: tuple( version[string], error[string])
-	@returns:
+	@return:
 	1. tuple( version[string], error[string])
 	Either version or error is populated (but never both)
 

diff --git a/pym/portage/util/__init__.py b/pym/portage/util/__init__.py
index 02fb75d..dd692a1 100644
--- a/pym/portage/util/__init__.py
+++ b/pym/portage/util/__init__.py
@@ -346,7 +346,7 @@ def grabdict(myfilename, juststrings=0, empty=0, recursive=0, incremental=1):
 	@param incremental: Append to the return list, don't overwrite
 	@type incremental: Boolean (integer)
 	@rtype: Dictionary
-	@returns:
+	@return:
 	1.  Returns the lines in a file in a dictionary, for example:
 		'sys-apps/portage x86 amd64 ppc'
 		would return

diff --git a/pym/portage/util/_dyn_libs/PreservedLibsRegistry.py b/pym/portage/util/_dyn_libs/PreservedLibsRegistry.py
index 26da0cf..4bc64db 100644
--- a/pym/portage/util/_dyn_libs/PreservedLibsRegistry.py
+++ b/pym/portage/util/_dyn_libs/PreservedLibsRegistry.py
@@ -242,7 +242,7 @@ class PreservedLibsRegistry(object):
 	
 	def getPreservedLibs(self):
 		""" Return a mapping of packages->preserved objects.
-			@returns mapping of package instances to preserved objects
+			@return mapping of package instances to preserved objects
 			@rtype Dict cpv->list-of-paths
 		"""
 		if self._data is None:

diff --git a/pym/portage/util/_eventloop/EventLoop.py b/pym/portage/util/_eventloop/EventLoop.py
index a2d4cd4..ef20ce4 100644
--- a/pym/portage/util/_eventloop/EventLoop.py
+++ b/pym/portage/util/_eventloop/EventLoop.py
@@ -435,7 +435,7 @@ def can_poll_device():
 	Test if it's possible to use poll() on a device such as a pty. This
 	is known to fail on Darwin.
 	@rtype: bool
-	@returns: True if poll() on a device succeeds, False otherwise.
+	@return: True if poll() on a device succeeds, False otherwise.
 	"""
 
 	global _can_poll_device

diff --git a/pym/portage/util/_pty.py b/pym/portage/util/_pty.py
index 95082cf..11c8b92 100644
--- a/pym/portage/util/_pty.py
+++ b/pym/portage/util/_pty.py
@@ -27,7 +27,7 @@ def _create_pty_or_pipe(copy_term_size=None):
 		then the term size will be copied to the pty.
 	@type copy_term_size: int
 	@rtype: tuple
-	@returns: A tuple of (is_pty, master_fd, slave_fd) where
+	@return: A tuple of (is_pty, master_fd, slave_fd) where
 		is_pty is True if a pty was successfully allocated, and
 		False if a normal pipe was allocated.
 	"""

diff --git a/pym/portage/util/lafilefixer.py b/pym/portage/util/lafilefixer.py
index 2b093d8..54ff20d 100644
--- a/pym/portage/util/lafilefixer.py
+++ b/pym/portage/util/lafilefixer.py
@@ -80,7 +80,7 @@ def rewrite_lafile(contents):
 	@param contents: the contents of a libtool archive file
 	@type contents: bytes
 	@rtype: tuple
-	@returns: (True, fixed_contents) if something needed to be
+	@return: (True, fixed_contents) if something needed to be
 		fixed, (False, None) otherwise.
 	"""
 	#Parse the 'dependency_libs' and 'inherited_linker_flags' lines.

diff --git a/pym/portage/util/listdir.py b/pym/portage/util/listdir.py
index 5753d2f..c2628cb 100644
--- a/pym/portage/util/listdir.py
+++ b/pym/portage/util/listdir.py
@@ -109,7 +109,7 @@ def listdir(mypath, recursive=False, filesonly=False, ignorecvs=False, ignorelis
 	@param dirsonly: Only return directories.
 	@type dirsonly: Boolean
 	@rtype: List
-	@returns: A list of files and directories (or just files or just directories) or an empty list.
+	@return: A list of files and directories (or just files or just directories) or an empty list.
 	"""
 
 	list, ftype = cacheddir(mypath, ignorecvs, ignorelist, EmptyOnError, followSymlinks)

diff --git a/pym/repoman/utilities.py b/pym/repoman/utilities.py
index 34d6494..bee67aa 100644
--- a/pym/repoman/utilities.py
+++ b/pym/repoman/utilities.py
@@ -327,7 +327,7 @@ def editor_is_executable(editor):
 	@param editor: An EDITOR value from the environment.
 	@type: string
 	@rtype: bool
-	@returns: True if an executable is found, False otherwise.
+	@return: True if an executable is found, False otherwise.
 	"""
 	editor_split = util.shlex_split(editor)
 	if not editor_split:
@@ -348,7 +348,7 @@ def get_commit_message_with_editor(editor, message=None):
 	@param message: An iterable of lines to show in the editor.
 	@type: iterable
 	@rtype: string or None
-	@returns: A string on success or None if an error occurs.
+	@return: A string on success or None if an error occurs.
 	"""
 	fd, filename = mkstemp()
 	try:
@@ -389,7 +389,7 @@ def get_commit_message_with_stdin():
 	Read a commit message from the user and return it.
 
 	@rtype: string or None
-	@returns: A string on success or None if an error occurs.
+	@return: A string on success or None if an error occurs.
 	"""
 	print("Please enter a commit message. Use Ctrl-d to finish or Ctrl-c to abort.")
 	commitmessage = []



^ permalink raw reply related	[flat|nested] 3+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/repoman/, pym/portage/package/ebuild/_ipc/, pym/_emerge/resolver/, ...
@ 2013-01-18 21:33 Zac Medico
  0 siblings, 0 replies; 3+ messages in thread
From: Zac Medico @ 2013-01-18 21:33 UTC (permalink / raw
  To: gentoo-commits

commit:     1e301bbffb7aa9166f39e4f1b1122f17d627d722
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 18 21:33:08 2013 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Jan 18 21:33:08 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=1e301bbf

Use unicode_literals more.

This helps to ensure consistent results, regardless of whether we're
using Python 2 or Python 3.

---
 bin/portageq                                       |   10 +---
 bin/repoman                                        |    2 +-
 pym/_emerge/DependencyArg.py                       |   10 ++--
 pym/_emerge/FakeVartree.py                         |    4 +-
 pym/_emerge/JobStatusDisplay.py                    |   41 ++++++++-------
 pym/_emerge/Package.py                             |   23 +++-----
 pym/_emerge/Scheduler.py                           |    8 ++--
 pym/_emerge/UseFlagDisplay.py                      |   10 ++--
 pym/_emerge/actions.py                             |   23 +++++---
 pym/_emerge/depgraph.py                            |   23 ++++-----
 pym/_emerge/emergelog.py                           |   12 ++---
 pym/_emerge/resolver/circular_dependency.py        |    4 +-
 pym/_emerge/resolver/output.py                     |    9 ++--
 pym/_emerge/resolver/output_helpers.py             |    5 ++-
 pym/_emerge/resolver/slot_collision.py             |   55 ++++++++++++-------
 pym/portage/__init__.py                            |    2 +
 pym/portage/const.py                               |    4 +-
 pym/portage/dbapi/__init__.py                      |    4 +-
 pym/portage/dbapi/_expand_new_virt.py              |    4 +-
 pym/portage/dbapi/bintree.py                       |   12 +++--
 pym/portage/dbapi/cpv_expand.py                    |    4 +-
 pym/portage/dbapi/dep_expand.py                    |    4 +-
 pym/portage/dbapi/porttree.py                      |    2 +
 pym/portage/dbapi/vartree.py                       |   20 ++++---
 pym/portage/dbapi/virtual.py                       |    3 +-
 pym/portage/dep/__init__.py                        |    2 +
 pym/portage/dep/_slot_operator.py                  |    4 +-
 pym/portage/dep/dep_check.py                       |   11 ++--
 pym/portage/elog/mod_save_summary.py               |   21 +++++---
 pym/portage/getbinpkg.py                           |    4 +-
 pym/portage/manifest.py                            |    2 +
 pym/portage/news.py                                |    6 +-
 .../package/ebuild/_config/special_env_vars.py     |    4 +-
 pym/portage/package/ebuild/_ipc/QueryCommand.py    |    7 ++-
 pym/portage/package/ebuild/config.py               |    4 +-
 pym/portage/package/ebuild/doebuild.py             |   10 ++--
 pym/portage/package/ebuild/prepare_build_dirs.py   |    8 ++-
 pym/portage/repository/config.py                   |   12 +++--
 pym/portage/update.py                              |    4 +-
 pym/portage/util/__init__.py                       |   10 ++--
 pym/portage/util/digraph.py                        |   12 ++--
 pym/portage/util/movefile.py                       |   12 +++--
 pym/portage/versions.py                            |    6 ++-
 pym/portage/xml/metadata.py                        |    8 ++-
 pym/repoman/checks.py                              |    4 +-
 pym/repoman/errors.py                              |    4 +-
 pym/repoman/herdbase.py                            |    6 ++-
 pym/repoman/utilities.py                           |   24 ++++----
 48 files changed, 279 insertions(+), 204 deletions(-)

diff --git a/bin/portageq b/bin/portageq
index ee776ef..826c92d 100755
--- a/bin/portageq
+++ b/bin/portageq
@@ -2,7 +2,7 @@
 # Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 import signal
 import sys
@@ -101,9 +101,7 @@ def has_version(argv):
 			try:
 				atom = portage.dep.Atom(argv[1], allow_repo=allow_repo, eapi=eapi)
 			except portage.exception.InvalidAtom as e:
-				warnings.append(
-					portage._unicode_decode("QA Notice: %s: %s") % \
-					('has_version', e))
+				warnings.append("QA Notice: %s: %s" % ('has_version', e))
 		atom = eval_atom_use(atom)
 
 	if warnings:
@@ -149,9 +147,7 @@ def best_version(argv):
 			try:
 				atom = portage.dep.Atom(argv[1], allow_repo=allow_repo, eapi=eapi)
 			except portage.exception.InvalidAtom as e:
-				warnings.append(
-					portage._unicode_decode("QA Notice: %s: %s") % \
-					('best_version', e))
+				warnings.append("QA Notice: %s: %s" % ('best_version', e))
 		atom = eval_atom_use(atom)
 
 	if warnings:

diff --git a/bin/repoman b/bin/repoman
index 4c00d5b..11f2b13 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -6,7 +6,7 @@
 # Then, check to make sure deps are satisfiable (to avoid "can't find match for" problems)
 # that last one is tricky because multiple profiles need to be checked.
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 import calendar
 import codecs

diff --git a/pym/_emerge/DependencyArg.py b/pym/_emerge/DependencyArg.py
index 80134c8..29a0072 100644
--- a/pym/_emerge/DependencyArg.py
+++ b/pym/_emerge/DependencyArg.py
@@ -1,9 +1,11 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import sys
 
-from portage import _encodings, _unicode_encode, _unicode_decode
+from portage import _encodings, _unicode_encode
 
 class DependencyArg(object):
 
@@ -31,10 +33,10 @@ class DependencyArg(object):
 		return hash((self.arg, self.root_config.root))
 
 	def __str__(self):
-		# Force unicode format string for python-2.x safety,
+		# Use unicode_literals format string for python-2.x safety,
 		# ensuring that self.arg.__unicode__() is used
 		# when necessary.
-		return _unicode_decode("%s") % (self.arg,)
+		return "%s" % (self.arg,)
 
 	if sys.hexversion < 0x3000000:
 

diff --git a/pym/_emerge/FakeVartree.py b/pym/_emerge/FakeVartree.py
index 058c1c7..fd87f6c 100644
--- a/pym/_emerge/FakeVartree.py
+++ b/pym/_emerge/FakeVartree.py
@@ -1,6 +1,8 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import sys
 import warnings
 

diff --git a/pym/_emerge/JobStatusDisplay.py b/pym/_emerge/JobStatusDisplay.py
index 5b9b221..f48b213 100644
--- a/pym/_emerge/JobStatusDisplay.py
+++ b/pym/_emerge/JobStatusDisplay.py
@@ -1,6 +1,8 @@
-# Copyright 1999-2011 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import formatter
 import io
 import sys
@@ -9,7 +11,6 @@ import time
 import portage
 from portage import os
 from portage import _encodings
-from portage import _unicode_decode
 from portage import _unicode_encode
 from portage.output import xtermTitle
 
@@ -233,10 +234,10 @@ class JobStatusDisplay(object):
 	def _display_status(self):
 		# Don't use len(self._completed_tasks) here since that also
 		# can include uninstall tasks.
-		curval_str = str(self.curval)
-		maxval_str = str(self.maxval)
-		running_str = str(self.running)
-		failed_str = str(self.failed)
+		curval_str = "%s" % (self.curval,)
+		maxval_str = "%s" % (self.maxval,)
+		running_str = "%s" % (self.running,)
+		failed_str = "%s" % (self.failed,)
 		load_avg_str = self._load_avg_str()
 
 		color_output = io.StringIO()
@@ -248,36 +249,36 @@ class JobStatusDisplay(object):
 		f = formatter.AbstractFormatter(style_writer)
 
 		number_style = "INFORM"
-		f.add_literal_data(_unicode_decode("Jobs: "))
+		f.add_literal_data("Jobs: ")
 		f.push_style(number_style)
-		f.add_literal_data(_unicode_decode(curval_str))
+		f.add_literal_data(curval_str)
 		f.pop_style()
-		f.add_literal_data(_unicode_decode(" of "))
+		f.add_literal_data(" of ")
 		f.push_style(number_style)
-		f.add_literal_data(_unicode_decode(maxval_str))
+		f.add_literal_data(maxval_str)
 		f.pop_style()
-		f.add_literal_data(_unicode_decode(" complete"))
+		f.add_literal_data(" complete")
 
 		if self.running:
-			f.add_literal_data(_unicode_decode(", "))
+			f.add_literal_data(", ")
 			f.push_style(number_style)
-			f.add_literal_data(_unicode_decode(running_str))
+			f.add_literal_data(running_str)
 			f.pop_style()
-			f.add_literal_data(_unicode_decode(" running"))
+			f.add_literal_data(" running")
 
 		if self.failed:
-			f.add_literal_data(_unicode_decode(", "))
+			f.add_literal_data(", ")
 			f.push_style(number_style)
-			f.add_literal_data(_unicode_decode(failed_str))
+			f.add_literal_data(failed_str)
 			f.pop_style()
-			f.add_literal_data(_unicode_decode(" failed"))
+			f.add_literal_data(" failed")
 
 		padding = self._jobs_column_width - len(plain_output.getvalue())
 		if padding > 0:
-			f.add_literal_data(padding * _unicode_decode(" "))
+			f.add_literal_data(padding * " ")
 
-		f.add_literal_data(_unicode_decode("Load avg: "))
-		f.add_literal_data(_unicode_decode(load_avg_str))
+		f.add_literal_data("Load avg: ")
+		f.add_literal_data(load_avg_str)
 
 		# Truncate to fit width, to avoid making the terminal scroll if the
 		# line overflows (happens when the load average is large).

diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index f3be19b..09d8b93 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -1,6 +1,8 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import sys
 from itertools import chain
 import warnings
@@ -259,8 +261,7 @@ class Package(Task):
 				use_reduce(v, eapi=dep_eapi, matchall=True,
 					is_valid_flag=dep_valid_flag, token_class=Atom)
 			except InvalidDependString as e:
-				self._invalid_metadata("PROVIDE.syntax",
-					_unicode_decode("%s: %s") % (k, e))
+				self._invalid_metadata("PROVIDE.syntax", "%s: %s" % (k, e))
 
 		for k in self._use_conditional_misc_keys:
 			v = self._metadata.get(k)
@@ -283,11 +284,7 @@ class Package(Task):
 					check_required_use(v, (),
 						self.iuse.is_valid_flag, eapi=eapi)
 				except InvalidDependString as e:
-					# Force unicode format string for python-2.x safety,
-					# ensuring that PortageException.__unicode__() is used
-					# when necessary.
-					self._invalid_metadata(k + ".syntax",
-						_unicode_decode("%s: %s") % (k, e))
+					self._invalid_metadata(k + ".syntax", "%s: %s" % (k, e))
 
 		k = 'SRC_URI'
 		v = self._metadata.get(k)
@@ -416,7 +413,7 @@ class Package(Task):
 		# format string, since that will result in the
 		# PortageException.__str__() method being invoked,
 		# followed by unsafe decoding that may result in a
-		# UnicodeDecodeError. Therefore, use _unicode_decode()
+		# UnicodeDecodeError. Therefore, use unicode_literals
 		# to ensure that format strings are unicode, so that
 		# PortageException.__unicode__() is used when necessary
 		# in python-2.x.
@@ -428,19 +425,17 @@ class Package(Task):
 						continue
 					categorized_error = True
 					self._invalid_metadata(error.category,
-						_unicode_decode("%s: %s") % (k, error))
+						"%s: %s" % (k, error))
 
 			if not categorized_error:
-				self._invalid_metadata(qacat,
-					_unicode_decode("%s: %s") % (k, e))
+				self._invalid_metadata(qacat,"%s: %s" % (k, e))
 		else:
 			# For installed packages, show the path of the file
 			# containing the invalid metadata, since the user may
 			# want to fix the deps by hand.
 			vardb = self.root_config.trees['vartree'].dbapi
 			path = vardb.getpath(self.cpv, filename=k)
-			self._invalid_metadata(qacat,
-				_unicode_decode("%s: %s in '%s'") % (k, e, path))
+			self._invalid_metadata(qacat, "%s: %s in '%s'" % (k, e, path))
 
 	def _invalid_metadata(self, msg_type, msg):
 		if self._invalid is None:

diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py
index c2f2459..c495ae0 100644
--- a/pym/_emerge/Scheduler.py
+++ b/pym/_emerge/Scheduler.py
@@ -1,7 +1,7 @@
 # Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 from collections import deque
 import gc
@@ -18,7 +18,7 @@ import zlib
 import portage
 from portage import os
 from portage import _encodings
-from portage import _unicode_decode, _unicode_encode
+from portage import _unicode_encode
 from portage.cache.mappings import slot_dict_class
 from portage.elog.messages import eerror
 from portage.localization import _
@@ -1145,9 +1145,9 @@ class Scheduler(PollScheduler):
 				printer.eerror(line)
 			printer.eerror("")
 			for failed_pkg in self._failed_pkgs_all:
-				# Use _unicode_decode() to force unicode format string so
+				# Use unicode_literals to force unicode format string so
 				# that Package.__unicode__() is called in python2.
-				msg = _unicode_decode(" %s") % (failed_pkg.pkg,)
+				msg = " %s" % (failed_pkg.pkg,)
 				log_path = self._locate_failure_log(failed_pkg)
 				if log_path is not None:
 					msg += ", Log file:"

diff --git a/pym/_emerge/UseFlagDisplay.py b/pym/_emerge/UseFlagDisplay.py
index 3daca19..f460474 100644
--- a/pym/_emerge/UseFlagDisplay.py
+++ b/pym/_emerge/UseFlagDisplay.py
@@ -1,10 +1,12 @@
-# Copyright 1999-2011 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 from itertools import chain
 import sys
 
-from portage import _encodings, _unicode_decode, _unicode_encode
+from portage import _encodings, _unicode_encode
 from portage.output import red
 from portage.util import cmp_sort_key
 from portage.output import blue
@@ -114,9 +116,9 @@ def pkg_use_display(pkg, opts, modified_use=None):
 			flags.sort(key=UseFlagDisplay.sort_combined)
 		else:
 			flags.sort(key=UseFlagDisplay.sort_separated)
-		# Use _unicode_decode() to force unicode format string so
+		# Use unicode_literals to force unicode format string so
 		# that UseFlagDisplay.__unicode__() is called in python2.
 		flag_displays.append('%s="%s"' % (varname,
-			' '.join(_unicode_decode("%s") % (f,) for f in flags)))
+			' '.join("%s" % (f,) for f in flags)))
 
 	return ' '.join(flag_displays)

diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 589680a..a95d7a1 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1,7 +1,7 @@
 # Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 import errno
 import logging
@@ -1207,11 +1207,11 @@ def calc_depclean(settings, trees, ldpath_mtimes,
 				priority = priority_map[dep_type]
 
 				if debug:
-					writemsg_level(_unicode_decode("\nParent:    %s\n") \
+					writemsg_level("\nParent:    %s\n"
 						% (node,), noiselevel=-1, level=logging.DEBUG)
-					writemsg_level(_unicode_decode(  "Depstring: %s\n") \
+					writemsg_level(  "Depstring: %s\n"
 						% (depstr,), noiselevel=-1, level=logging.DEBUG)
-					writemsg_level(_unicode_decode(  "Priority:  %s\n") \
+					writemsg_level(  "Priority:  %s\n"
 						% (priority,), noiselevel=-1, level=logging.DEBUG)
 
 				try:
@@ -1225,7 +1225,7 @@ def calc_depclean(settings, trees, ldpath_mtimes,
 
 				if debug:
 					writemsg_level("Candidates: [%s]\n" % \
-						', '.join(_unicode_decode("'%s'") % (x,) for x in atoms),
+						', '.join("'%s'" % (x,) for x in atoms),
 						noiselevel=-1, level=logging.DEBUG)
 
 				for atom in atoms:
@@ -3750,10 +3750,15 @@ def run_action(settings, trees, mtimedb, myaction, myopts, myfiles,
 			portage.util.ensure_dirs(_emerge.emergelog._emerge_log_dir)
 
 	if not "--pretend" in myopts:
-		emergelog(xterm_titles, "Started emerge on: "+\
-			_unicode_decode(
-				time.strftime("%b %d, %Y %H:%M:%S", time.localtime()),
-				encoding=_encodings['content'], errors='replace'))
+		time_fmt = "%b %d, %Y %H:%M:%S"
+		if sys.hexversion < 0x3000000:
+			time_fmt = portage._unicode_encode(time_fmt)
+		time_str = time.strftime(time_fmt, time.localtime(time.time()))
+		# Avoid potential UnicodeDecodeError in Python 2, since strftime
+		# returns bytes in Python 2, and %b may contain non-ascii chars.
+		time_str = _unicode_decode(time_str,
+			encoding=_encodings['content'], errors='replace')
+		emergelog(xterm_titles, "Started emerge on: %s" % time_str)
 		myelogstr=""
 		if myopts:
 			opt_list = []

diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 92e3b1c..b5dba31 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -1,7 +1,7 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 import errno
 import io
@@ -3187,7 +3187,7 @@ class depgraph(object):
 					if not node.installed:
 						raise
 			affecting_use.difference_update(node.use.mask, node.use.force)
-			pkg_name = _unicode_decode("%s") % (node.cpv,)
+			pkg_name = "%s" % (node.cpv,)
 			if affecting_use:
 				usedep = []
 				for flag in affecting_use:
@@ -3242,7 +3242,7 @@ class depgraph(object):
 					node_type = "set"
 				else:
 					node_type = "argument"
-				dep_chain.append((_unicode_decode("%s") % (node,), node_type))
+				dep_chain.append(("%s" % (node,), node_type))
 
 			elif node is not start_node:
 				for ppkg, patom in all_parents[child]:
@@ -3284,7 +3284,7 @@ class depgraph(object):
 				affecting_use.difference_update(node.use.mask, \
 					node.use.force)
 
-				pkg_name = _unicode_decode("%s") % (node.cpv,)
+				pkg_name = "%s" % (node.cpv,)
 				if affecting_use:
 					usedep = []
 					for flag in affecting_use:
@@ -3336,8 +3336,7 @@ class depgraph(object):
 				if self._dynamic_config.digraph.parent_nodes(parent_arg):
 					selected_parent = parent_arg
 				else:
-					dep_chain.append(
-						(_unicode_decode("%s") % (parent_arg,), "argument"))
+					dep_chain.append(("%s" % (parent_arg,), "argument"))
 					selected_parent = None
 
 			node = selected_parent
@@ -3373,7 +3372,7 @@ class depgraph(object):
 		if arg:
 			xinfo='"%s"' % arg
 		if isinstance(myparent, AtomArg):
-			xinfo = _unicode_decode('"%s"') % (myparent,)
+			xinfo = '"%s"' % (myparent,)
 		# Discard null/ from failed cpv_expand category expansion.
 		xinfo = xinfo.replace("null/", "")
 		if root != self._frozen_config._running_root.root:
@@ -3751,8 +3750,7 @@ class depgraph(object):
 			dep_chain = self._get_dep_chain(myparent, atom)
 			for node, node_type in dep_chain:
 				msg.append('(dependency required by "%s" [%s])' % \
-						(colorize('INFORM', _unicode_decode("%s") % \
-						(node)), node_type))
+						(colorize('INFORM', "%s" % (node)), node_type))
 
 		if msg:
 			writemsg("\n".join(msg), noiselevel=-1)
@@ -5039,7 +5037,7 @@ class depgraph(object):
 							# matches (this can happen if an atom lacks a
 							# category).
 							show_invalid_depstring_notice(
-								pkg, depstr, _unicode_decode("%s") % (e,))
+								pkg, depstr, "%s" % (e,))
 							del e
 							raise
 						if not success:
@@ -5069,8 +5067,7 @@ class depgraph(object):
 						except portage.exception.InvalidAtom as e:
 							depstr = " ".join(vardb.aux_get(pkg.cpv, dep_keys))
 							show_invalid_depstring_notice(
-								pkg, depstr,
-								_unicode_decode("Invalid Atom: %s") % (e,))
+								pkg, depstr, "Invalid Atom: %s" % (e,))
 							return False
 				for cpv in stale_cache:
 					del blocker_cache[cpv]

diff --git a/pym/_emerge/emergelog.py b/pym/_emerge/emergelog.py
index b1b093f..aea94f7 100644
--- a/pym/_emerge/emergelog.py
+++ b/pym/_emerge/emergelog.py
@@ -1,7 +1,7 @@
-# Copyright 1999-2011 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import unicode_literals
 
 import io
 import sys
@@ -20,10 +20,6 @@ from portage.output import xtermTitle
 _disable = True
 _emerge_log_dir = '/var/log'
 
-# Coerce to unicode, in order to prevent TypeError when writing
-# raw bytes to TextIOWrapper with python2.
-_log_fmt = _unicode_decode("%.0f: %s\n")
-
 def emergelog(xterm_titles, mystr, short_msg=None):
 
 	if _disable:
@@ -51,10 +47,10 @@ def emergelog(xterm_titles, mystr, short_msg=None):
 				mode=0o660)
 		mylock = portage.locks.lockfile(file_path)
 		try:
-			mylogfile.write(_log_fmt % (time.time(), mystr))
+			mylogfile.write("%.0f: %s\n" % (time.time(), mystr))
 			mylogfile.close()
 		finally:
 			portage.locks.unlockfile(mylock)
 	except (IOError,OSError,portage.exception.PortageException) as e:
 		if secpass >= 1:
-			print("emergelog():",e, file=sys.stderr)
+			portage.util.writemsg("emergelog(): %s\n" % (e,), noiselevel=-1)

diff --git a/pym/_emerge/resolver/circular_dependency.py b/pym/_emerge/resolver/circular_dependency.py
index 5256123..6380b22 100644
--- a/pym/_emerge/resolver/circular_dependency.py
+++ b/pym/_emerge/resolver/circular_dependency.py
@@ -1,7 +1,7 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 from itertools import chain, product
 import logging

diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py
index 3d6af66..651a4f7 100644
--- a/pym/_emerge/resolver/output.py
+++ b/pym/_emerge/resolver/output.py
@@ -1,9 +1,11 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 """Resolver output display operation.
 """
 
+from __future__ import unicode_literals
+
 __all__ = (
 	"Display",
 	)
@@ -11,7 +13,6 @@ __all__ = (
 import sys
 
 from portage import os
-from portage import _unicode_decode
 from portage.dbapi.dep_expand import dep_expand
 from portage.dep import cpvequal, _repo_separator, _slot_separator
 from portage.eapi import _get_eapi_attrs
@@ -567,9 +568,9 @@ class Display(object):
 		"""
 		writemsg_stdout('\n%s\n' % (self.counters,), noiselevel=-1)
 		if show_repos:
-			# Use _unicode_decode() to force unicode format string so
+			# Use unicode_literals to force unicode format string so
 			# that RepoDisplay.__unicode__() is called in python2.
-			writemsg_stdout(_unicode_decode("%s") % (self.conf.repo_display,),
+			writemsg_stdout("%s" % (self.conf.repo_display,),
 				noiselevel=-1)
 		return
 

diff --git a/pym/_emerge/resolver/output_helpers.py b/pym/_emerge/resolver/output_helpers.py
index 1fc083a..ccaa0f2 100644
--- a/pym/_emerge/resolver/output_helpers.py
+++ b/pym/_emerge/resolver/output_helpers.py
@@ -1,9 +1,12 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 """Contains private support functions for the Display class
 in output.py
 """
+
+from __future__ import unicode_literals
+
 __all__ = (
 	)
 

diff --git a/pym/_emerge/resolver/slot_collision.py b/pym/_emerge/resolver/slot_collision.py
index 8b2f4b8..f07b01a 100644
--- a/pym/_emerge/resolver/slot_collision.py
+++ b/pym/_emerge/resolver/slot_collision.py
@@ -1,10 +1,11 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 import sys
 
+from portage import _encodings, _unicode_encode
 from _emerge.AtomArg import AtomArg
 from _emerge.Package import Package
 from _emerge.PackageArg import PackageArg
@@ -150,7 +151,7 @@ class slot_conflict_handler(object):
 			if self.debug:
 				writemsg("\nNew configuration:\n", noiselevel=-1)
 				for pkg in config:
-					writemsg("   " + str(pkg) + "\n", noiselevel=-1)
+					writemsg("   %s\n" % (pkg,), noiselevel=-1)
 				writemsg("\n", noiselevel=-1)
 
 			new_solutions = self._check_configuration(config, all_conflict_atoms_by_slotatom, conflict_nodes)
@@ -249,14 +250,14 @@ class slot_conflict_handler(object):
 
 		for (slot_atom, root), pkgs \
 			in self.slot_collision_info.items():
-			msg.append(str(slot_atom))
+			msg.append("%s" % (slot_atom,))
 			if root != self.depgraph._frozen_config._running_root.root:
 				msg.append(" for %s" % (root,))
 			msg.append("\n\n")
 
 			for pkg in pkgs:
 				msg.append(indent)
-				msg.append(str(pkg))
+				msg.append("%s" % (pkg,))
 				parent_atoms = self.all_parents.get(pkg)
 				if parent_atoms:
 					#Create a list of collision reasons and map them to sets
@@ -394,7 +395,7 @@ class slot_conflict_handler(object):
 
 					def highlight_violations(atom, version, use=[]):
 						"""Colorize parts of an atom"""
-						atom_str = str(atom)
+						atom_str = "%s" % (atom,)
 						if version:
 							op = atom.operator
 							ver = None
@@ -449,7 +450,7 @@ class slot_conflict_handler(object):
 							(PackageArg, AtomArg)):
 							# For PackageArg and AtomArg types, it's
 							# redundant to display the atom attribute.
-							msg.append(str(parent))
+							msg.append("%s" % (parent,))
 						else:
 							# Display the specific atom from SetArg or
 							# Package types.
@@ -567,7 +568,9 @@ class slot_conflict_handler(object):
 					if pkg.iuse.all.symmetric_difference(other_pkg.iuse.all) \
 						or _pkg_use_enabled(pkg).symmetric_difference(_pkg_use_enabled(other_pkg)):
 						if self.debug:
-							writemsg(str(pkg) + " has pending USE changes. Rejecting configuration.\n", noiselevel=-1)
+							writemsg(("%s has pending USE changes. "
+								"Rejecting configuration.\n") % (pkg,),
+								noiselevel=-1)
 						return False
 
 		#A list of dicts. Keeps one dict per slot conflict. [ { flag1: "enabled" }, { flag2: "disabled" } ]
@@ -590,16 +593,18 @@ class slot_conflict_handler(object):
 				if not i.findAtomForPackage(pkg, modified_use=_pkg_use_enabled(pkg)):
 					#Version range does not match.
 					if self.debug:
-						writemsg(str(pkg) + " does not satify all version requirements." + \
-							" Rejecting configuration.\n", noiselevel=-1)
+						writemsg(("%s does not satify all version "
+							"requirements. Rejecting configuration.\n") %
+							(pkg,), noiselevel=-1)
 					return False
 
 				if not pkg.iuse.is_valid_flag(atom.unevaluated_atom.use.required):
 					#Missing IUSE.
 					#FIXME: This needs to support use dep defaults.
 					if self.debug:
-						writemsg(str(pkg) + " misses needed flags from IUSE." + \
-							" Rejecting configuration.\n", noiselevel=-1)
+						writemsg(("%s misses needed flags from IUSE."
+							" Rejecting configuration.\n") % (pkg,),
+							noiselevel=-1)
 					return False
 
 				if not isinstance(ppkg, Package) or ppkg.installed:
@@ -624,8 +629,9 @@ class slot_conflict_handler(object):
 					#We can't change USE of an installed package (only of an ebuild, but that is already
 					#part of the conflict, isn't it?
 					if self.debug:
-						writemsg(str(pkg) + ": installed package would need USE changes." + \
-							" Rejecting configuration.\n", noiselevel=-1)
+						writemsg(("%s: installed package would need USE"
+							" changes. Rejecting configuration.\n") % (pkg,),
+							noiselevel=-1)
 					return False
 
 				#Compute the required USE changes. A flag can be forced to "enabled" or "disabled",
@@ -679,7 +685,7 @@ class slot_conflict_handler(object):
 		if self.debug:
 			writemsg("All involved flags:\n", noiselevel=-1)
 			for id, involved_flags in enumerate(all_involved_flags):
-				writemsg("   " + str(config[id]) + "\n", noiselevel=-1)
+				writemsg("   %s\n" % (config[id],), noiselevel=-1)
 				for flag, state in involved_flags.items():
 					writemsg("     " + flag + ": " + state + "\n", noiselevel=-1)
 
@@ -762,7 +768,7 @@ class slot_conflict_handler(object):
 						inner_first = False
 					else:
 						msg += ", "
-					msg += flag + ": " + str(state)
+					msg += flag + ": %s" % (state,)
 				msg += "}"
 			msg += "]\n"
 			writemsg(msg, noiselevel=-1)
@@ -866,8 +872,9 @@ class slot_conflict_handler(object):
 					#We managed to create a new problem with our changes.
 					is_valid_solution = False
 					if self.debug:
-						writemsg("new conflict introduced: " + str(pkg) + \
-							" does not match " + new_atom + " from " + str(ppkg) + "\n", noiselevel=-1)
+						writemsg(("new conflict introduced: %s"
+							" does not match %s from %s\n") %
+							(pkg, new_atom, ppkg), noiselevel=-1)
 					break
 
 			if not is_valid_solution:
@@ -954,8 +961,16 @@ class _solution_candidate_generator(object):
 			else:
 				return self.value == other.value
 		def __str__(self):
-			return str(self.value)
-	
+			return "%s" % (self.value,)
+
+		if sys.hexversion < 0x3000000:
+
+			__unicode__ = __str__
+
+			def __str__(self):
+				return _unicode_encode(self.__unicode__(),
+					encoding=_encodings['content'], errors='backslashreplace')
+
 	def __init__(self, all_involved_flags):
 		#A copy of all_involved_flags with all "cond" values
 		#replaced by a _value_helper object.

diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 6d7b101..3bae4de 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -2,6 +2,8 @@
 # Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 VERSION="HEAD"
 
 # ===========================================================================

diff --git a/pym/portage/const.py b/pym/portage/const.py
index 8c5bbf3..3859a16 100644
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@ -1,7 +1,9 @@
 # portage: Constants
-# Copyright 1998-2012 Gentoo Foundation
+# Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import os
 
 # ===========================================================================

diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index 49b7293..5828bca 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -1,6 +1,8 @@
-# Copyright 1998-2012 Gentoo Foundation
+# Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ["dbapi"]
 
 import re

diff --git a/pym/portage/dbapi/_expand_new_virt.py b/pym/portage/dbapi/_expand_new_virt.py
index 95b2c28..9aa603d 100644
--- a/pym/portage/dbapi/_expand_new_virt.py
+++ b/pym/portage/dbapi/_expand_new_virt.py
@@ -1,6 +1,8 @@
-# Copyright 2011-2012 Gentoo Foundation
+# Copyright 2011-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import portage
 from portage.dep import Atom, _get_useflag_re
 from portage.eapi import _get_eapi_attrs

diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index f6fc114..875e955 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -1,6 +1,8 @@
-# Copyright 1998-2012 Gentoo Foundation
+# Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ["bindbapi", "binarytree"]
 
 import portage
@@ -138,15 +140,15 @@ class bindbapi(fakedbapi):
 			if myval:
 				mydata[x] = " ".join(myval.split())
 
-		if not mydata.setdefault('EAPI', _unicode_decode('0')):
-			mydata['EAPI'] = _unicode_decode('0')
+		if not mydata.setdefault('EAPI', '0'):
+			mydata['EAPI'] = '0'
 
 		if cache_me:
 			aux_cache = self._aux_cache_slot_dict()
 			for x in self._aux_cache_keys:
-				aux_cache[x] = mydata.get(x, _unicode_decode(''))
+				aux_cache[x] = mydata.get(x, '')
 			self._aux_cache[mycpv] = aux_cache
-		return [mydata.get(x, _unicode_decode('')) for x in wants]
+		return [mydata.get(x, '') for x in wants]
 
 	def aux_update(self, cpv, values):
 		if not self.bintree.populated:

diff --git a/pym/portage/dbapi/cpv_expand.py b/pym/portage/dbapi/cpv_expand.py
index 947194c..70ee782 100644
--- a/pym/portage/dbapi/cpv_expand.py
+++ b/pym/portage/dbapi/cpv_expand.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2011 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ["cpv_expand"]
 
 import portage

diff --git a/pym/portage/dbapi/dep_expand.py b/pym/portage/dbapi/dep_expand.py
index bb211c7..3de5d8f 100644
--- a/pym/portage/dbapi/dep_expand.py
+++ b/pym/portage/dbapi/dep_expand.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ["dep_expand"]
 
 import re

diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index cf4b142..321b675 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -1,6 +1,8 @@
 # Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = [
 	"close_portdbapi_caches", "FetchlistDict", "portagetree", "portdbapi"
 ]

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 09130fb..30add8a 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -1,6 +1,8 @@
 # Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = [
 	"vardbapi", "vartree", "dblink"] + \
 	["write_contents", "tar_contents"]
@@ -594,7 +596,7 @@ class vardbapi(dbapi):
 				getattr(e, 'errno', None) in (errno.ENOENT, errno.EACCES):
 				pass
 			else:
-				writemsg(_unicode_decode(_("!!! Error loading '%s': %s\n")) % \
+				writemsg(_("!!! Error loading '%s': %s\n") % \
 					(self._aux_cache_filename, e), noiselevel=-1)
 			del e
 
@@ -714,7 +716,7 @@ class vardbapi(dbapi):
 		if _get_slot_re(eapi_attrs).match(mydata['SLOT']) is None:
 			# Empty or invalid slot triggers InvalidAtom exceptions when
 			# generating slot atoms for packages, so translate it to '0' here.
-			mydata['SLOT'] = _unicode_decode('0')
+			mydata['SLOT'] = '0'
 
 		return [mydata[x] for x in wants]
 
@@ -750,7 +752,7 @@ class vardbapi(dbapi):
 					self._aux_cache_keys_re.match(x) is None:
 					env_keys.append(x)
 					continue
-				myd = _unicode_decode('')
+				myd = ''
 
 			# Preserve \n for metadata that is known to
 			# contain multiple lines.
@@ -764,13 +766,13 @@ class vardbapi(dbapi):
 			for k in env_keys:
 				v = env_results.get(k)
 				if v is None:
-					v = _unicode_decode('')
+					v = ''
 				if self._aux_multi_line_re.match(k) is None:
 					v = " ".join(v.split())
 				results[k] = v
 
 		if results.get("EAPI") == "":
-			results[_unicode_decode("EAPI")] = _unicode_decode('0')
+			results["EAPI"] = '0'
 
 		return results
 
@@ -1607,7 +1609,7 @@ class dblink(object):
 		if myroot == os.path.sep:
 			myroot = None
 		# used to generate parent dir entries
-		dir_entry = (_unicode_decode("dir"),)
+		dir_entry = ("dir",)
 		eroot_split_len = len(self.settings["EROOT"].split(os.sep)) - 1
 		pos = 0
 		errors = []
@@ -1896,7 +1898,7 @@ class dblink(object):
 				showMessage(_("!!! FAILED prerm: %s\n") % \
 					os.path.join(self.dbdir, "EAPI"),
 					level=logging.ERROR, noiselevel=-1)
-				showMessage(_unicode_decode("%s\n") % (eapi_unsupported,),
+				showMessage("%s\n" % (eapi_unsupported,),
 					level=logging.ERROR, noiselevel=-1)
 			elif os.path.isfile(myebuildpath):
 				phase = EbuildPhase(background=background,
@@ -3963,7 +3965,7 @@ class dblink(object):
 			encoding=_encodings['fs'], errors='strict'),
 			mode='w', encoding=_encodings['repo.content'],
 			errors='backslashreplace') as f:
-			f.write(_unicode_decode(str(counter)))
+			f.write("%s" % counter)
 
 		self.updateprotect()
 
@@ -4859,7 +4861,7 @@ class dblink(object):
 			mode='w', encoding=_encodings['repo.content'],
 			errors='backslashreplace') as f:
 			for x in mylist:
-				f.write(_unicode_decode(x + "\n"))
+				f.write("%s\n" % x)
 
 	def isregular(self):
 		"Is this a regular package (does it have a CATEGORY file?  A dblink can be virtual *and* regular)"

diff --git a/pym/portage/dbapi/virtual.py b/pym/portage/dbapi/virtual.py
index 30d6c22..ba9745c 100644
--- a/pym/portage/dbapi/virtual.py
+++ b/pym/portage/dbapi/virtual.py
@@ -1,6 +1,7 @@
-# Copyright 1998-2012 Gentoo Foundation
+# Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
 
 from portage.dbapi import dbapi
 from portage.dbapi.dep_expand import dep_expand

diff --git a/pym/portage/dep/__init__.py b/pym/portage/dep/__init__.py
index 67383e8..5117531 100644
--- a/pym/portage/dep/__init__.py
+++ b/pym/portage/dep/__init__.py
@@ -2,6 +2,8 @@
 # Copyright 2003-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = [
 	'Atom', 'best_match_to_list', 'cpvequal',
 	'dep_getcpv', 'dep_getkey', 'dep_getslot',

diff --git a/pym/portage/dep/_slot_operator.py b/pym/portage/dep/_slot_operator.py
index 2fcfb48..7b64444 100644
--- a/pym/portage/dep/_slot_operator.py
+++ b/pym/portage/dep/_slot_operator.py
@@ -1,6 +1,8 @@
-# Copyright 2012 Gentoo Foundation
+# Copyright 2012-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 from portage.dep import Atom, paren_enclose, use_reduce
 from portage.eapi import _get_eapi_attrs
 from portage.exception import InvalidData

diff --git a/pym/portage/dep/dep_check.py b/pym/portage/dep/dep_check.py
index b5f8d0d..6e3d086 100644
--- a/pym/portage/dep/dep_check.py
+++ b/pym/portage/dep/dep_check.py
@@ -1,12 +1,13 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['dep_check', 'dep_eval', 'dep_wordreduce', 'dep_zapdeps']
 
 import logging
 
 import portage
-from portage import _unicode_decode
 from portage.dep import Atom, match_from_list, use_reduce
 from portage.exception import InvalidDependString, ParseError
 from portage.localization import _
@@ -183,7 +184,7 @@ def _expand_new_virtuals(mysplit, edebug, mydbapi, mysettings, myroot="/",
 					del mytrees["virt_parent"]
 
 			if not mycheck[0]:
-				raise ParseError(_unicode_decode("%s: %s '%s'") % \
+				raise ParseError("%s: %s '%s'" % \
 					(pkg, mycheck[1], depstring))
 
 			# pull in the new-style virtual
@@ -605,7 +606,7 @@ def dep_check(depstring, mydbapi, mysettings, use="yes", mode=None, myuse=None,
 			masklist=mymasks, matchall=(use=="all"), excludeall=useforce,
 			opconvert=True, token_class=Atom, eapi=eapi)
 		except InvalidDependString as e:
-			return [0, _unicode_decode("%s") % (e,)]
+			return [0, "%s" % (e,)]
 
 	if mysplit == []:
 		#dependencies were reduced to nothing
@@ -619,7 +620,7 @@ def dep_check(depstring, mydbapi, mysettings, use="yes", mode=None, myuse=None,
 			use_force=useforce, use_mask=mymasks, use_cache=use_cache,
 			use_binaries=use_binaries, myroot=myroot, trees=trees)
 	except ParseError as e:
-		return [0, _unicode_decode("%s") % (e,)]
+		return [0, "%s" % (e,)]
 
 	mysplit2=mysplit[:]
 	mysplit2=dep_wordreduce(mysplit2,mysettings,mydbapi,mode,use_cache=use_cache)

diff --git a/pym/portage/elog/mod_save_summary.py b/pym/portage/elog/mod_save_summary.py
index 3ad1dd3..786f894 100644
--- a/pym/portage/elog/mod_save_summary.py
+++ b/pym/portage/elog/mod_save_summary.py
@@ -1,9 +1,12 @@
 # elog/mod_save_summary.py - elog dispatch module
-# Copyright 2006-2012 Gentoo Foundation
+# Copyright 2006-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import errno
 import io
+import sys
 import time
 import portage
 from portage import os
@@ -71,17 +74,19 @@ def process(mysettings, key, logentries, fulltext):
 	apply_permissions(elogfilename, uid=logfile_uid, gid=elogdir_gid,
 		mode=elogdir_grp_mode, mask=0)
 
-	time_str = time.strftime("%Y-%m-%d %H:%M:%S %Z",
-		time.localtime(time.time()))
-	# Avoid potential UnicodeDecodeError later.
+	time_fmt = "%Y-%m-%d %H:%M:%S %Z"
+	if sys.hexversion < 0x3000000:
+		time_fmt = _unicode_encode(time_fmt)
+	time_str = time.strftime(time_fmt, time.localtime(time.time()))
+	# Avoid potential UnicodeDecodeError in Python 2, since strftime
+	# returns bytes in Python 2, and %Z may contain non-ascii chars.
 	time_str = _unicode_decode(time_str,
 		encoding=_encodings['content'], errors='replace')
-	elogfile.write(_unicode_decode(
-		_(">>> Messages generated by process " +
+	elogfile.write(_(">>> Messages generated by process "
 		"%(pid)d on %(time)s for package %(pkg)s:\n\n") %
-		{"pid": os.getpid(), "time": time_str, "pkg": key}))
+		{"pid": os.getpid(), "time": time_str, "pkg": key})
 	elogfile.write(_unicode_decode(fulltext))
-	elogfile.write(_unicode_decode("\n"))
+	elogfile.write("\n")
 	elogfile.close()
 
 	return elogfilename

diff --git a/pym/portage/getbinpkg.py b/pym/portage/getbinpkg.py
index 947bd3e..77c1c8f 100644
--- a/pym/portage/getbinpkg.py
+++ b/pym/portage/getbinpkg.py
@@ -1,7 +1,9 @@
 # getbinpkg.py -- Portage binary-package helper functions
-# Copyright 2003-2012 Gentoo Foundation
+# Copyright 2003-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 from portage.output import colorize
 from portage.cache.mappings import slot_dict_class
 from portage.localization import _

diff --git a/pym/portage/manifest.py b/pym/portage/manifest.py
index 71837e0..513f1ca 100644
--- a/pym/portage/manifest.py
+++ b/pym/portage/manifest.py
@@ -1,6 +1,8 @@
 # Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import errno
 import io
 import re

diff --git a/pym/portage/news.py b/pym/portage/news.py
index bbd9325..94ec8f1 100644
--- a/pym/portage/news.py
+++ b/pym/portage/news.py
@@ -1,8 +1,8 @@
 # portage: news management code
-# Copyright 2006-2011 Gentoo Foundation
+# Copyright 2006-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 __all__ = ["NewsManager", "NewsItem", "DisplayRestriction",
 	"DisplayProfileRestriction", "DisplayKeywordRestriction",
@@ -388,7 +388,7 @@ def count_unread_news(portdb, vardb, repos=None, update=True):
 			# NOTE: The NewsManager typically handles permission errors by
 			# returning silently, so PermissionDenied won't necessarily be
 			# raised even if we do trigger a permission error above.
-			msg = _unicode_decode("Permission denied: '%s'\n") % (e,)
+			msg = "Permission denied: '%s'\n" % (e,)
 			if msg in permission_msgs:
 				pass
 			else:

diff --git a/pym/portage/package/ebuild/_config/special_env_vars.py b/pym/portage/package/ebuild/_config/special_env_vars.py
index 93bb98a..98e68d2 100644
--- a/pym/portage/package/ebuild/_config/special_env_vars.py
+++ b/pym/portage/package/ebuild/_config/special_env_vars.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = (
 	'case_insensitive_vars', 'default_globals', 'env_blacklist', \
 	'environ_filter', 'environ_whitelist', 'environ_whitelist_re',

diff --git a/pym/portage/package/ebuild/_ipc/QueryCommand.py b/pym/portage/package/ebuild/_ipc/QueryCommand.py
index fa8b506..351c956 100644
--- a/pym/portage/package/ebuild/_ipc/QueryCommand.py
+++ b/pym/portage/package/ebuild/_ipc/QueryCommand.py
@@ -1,11 +1,12 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import io
 
 import portage
 from portage import os
-from portage import _unicode_decode
 from portage.dep import Atom, _repo_name_re
 from portage.eapi import eapi_has_repo_deps
 from portage.elog import messages as elog_messages
@@ -65,7 +66,7 @@ class QueryCommand(IpcCommand):
 			try:
 				atom = Atom(args[0], allow_repo=allow_repo, eapi=eapi)
 			except InvalidAtom as e:
-				warnings.append(_unicode_decode("QA Notice: %s: %s") % (cmd, e))
+				warnings.append("QA Notice: %s: %s" % (cmd, e))
 
 			use = self.settings.get('PORTAGE_BUILT_USE')
 			if use is None:

diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index 1364a3d..4df3c96 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -1,6 +1,8 @@
 # Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = [
 	'autouse', 'best_from_dict', 'check_config_instance', 'config',
 ]
@@ -2378,7 +2380,7 @@ class config(object):
 				return portage._pym_path
 
 			elif mykey == "PORTAGE_GID":
-				return _unicode_decode(str(portage_gid))
+				return "%s" % portage_gid
 
 		for d in self.lookuplist:
 			try:

diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py
index bef1989..3e8ff01 100644
--- a/pym/portage/package/ebuild/doebuild.py
+++ b/pym/portage/package/ebuild/doebuild.py
@@ -1,6 +1,8 @@
 # Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['doebuild', 'doebuild_environment', 'spawn', 'spawnebuild']
 
 import grp
@@ -1742,7 +1744,7 @@ def _post_src_install_write_metadata(settings):
 		'BUILD_TIME'), encoding=_encodings['fs'], errors='strict'),
 		mode='w', encoding=_encodings['repo.content'],
 		errors='strict') as f:
-		f.write(_unicode_decode("%.0f\n" % (time.time(),)))
+		f.write("%.0f\n" % (time.time(),))
 
 	use = frozenset(settings['PORTAGE_USE'].split())
 	for k in _vdb_use_conditional_keys:
@@ -1774,7 +1776,7 @@ def _post_src_install_write_metadata(settings):
 			k), encoding=_encodings['fs'], errors='strict'),
 			mode='w', encoding=_encodings['repo.content'],
 			errors='strict') as f:
-			f.write(_unicode_decode(v + '\n'))
+			f.write('%s\n' % v)
 
 	if eapi_attrs.slot_operator:
 		deps = evaluate_slot_operator_equal_deps(settings, use, QueryCommand.get_db())
@@ -1790,7 +1792,7 @@ def _post_src_install_write_metadata(settings):
 				k), encoding=_encodings['fs'], errors='strict'),
 				mode='w', encoding=_encodings['repo.content'],
 				errors='strict') as f:
-				f.write(_unicode_decode(v + '\n'))
+				f.write('%s\n' % v)
 
 def _preinst_bsdflags(mysettings):
 	if bsd_chflags:
@@ -1999,7 +2001,7 @@ def _post_src_install_uid_fix(mysettings, out):
 		'SIZE'), encoding=_encodings['fs'], errors='strict'),
 		mode='w', encoding=_encodings['repo.content'],
 		errors='strict')
-	f.write(_unicode_decode(str(size) + '\n'))
+	f.write('%d\n' % size)
 	f.close()
 
 	_reapply_bsdflags_to_image(mysettings)

diff --git a/pym/portage/package/ebuild/prepare_build_dirs.py b/pym/portage/package/ebuild/prepare_build_dirs.py
index b8fbdc5..6782160 100644
--- a/pym/portage/package/ebuild/prepare_build_dirs.py
+++ b/pym/portage/package/ebuild/prepare_build_dirs.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2011 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['prepare_build_dirs']
 
 import errno
@@ -338,12 +340,12 @@ def _prepare_workdir(mysettings):
 			try:
 				_ensure_log_subdirs(logdir, log_subdir)
 			except PortageException as e:
-				writemsg(_unicode_decode("!!! %s\n") % (e,), noiselevel=-1)
+				writemsg("!!! %s\n" % (e,), noiselevel=-1)
 
 			if os.access(log_subdir, os.W_OK):
 				logdir_subdir_ok = True
 			else:
-				writemsg(_unicode_decode("!!! %s: %s\n") %
+				writemsg("!!! %s: %s\n" %
 					(_("Permission Denied"), log_subdir), noiselevel=-1)
 
 	tmpdir_log_path = os.path.join(

diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 3d29fd9..a1c1f79 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import io
 import logging
 import warnings
@@ -320,7 +322,7 @@ class RepoConfig(object):
 		d = {}
 		for k in self.__slots__:
 			d[k] = getattr(self, k, None)
-		return _unicode_decode("%s") % (d,)
+		return "%s" % (d,)
 
 	if sys.hexversion < 0x3000000:
 
@@ -431,9 +433,9 @@ class RepoConfigLoader(object):
 				try:
 					read_file(f)
 				except ParsingError as e:
-					writemsg(_unicode_decode(
-						_("!!! Error while reading repo config file: %s\n")
-						) % e, noiselevel=-1)
+					writemsg(
+						_("!!! Error while reading repo config file: %s\n") % e,
+						noiselevel=-1)
 			finally:
 				if f is not None:
 					f.close()

diff --git a/pym/portage/update.py b/pym/portage/update.py
index 3f76030..f518510 100644
--- a/pym/portage/update.py
+++ b/pym/portage/update.py
@@ -1,6 +1,8 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import errno
 import io
 import re

diff --git a/pym/portage/util/__init__.py b/pym/portage/util/__init__.py
index c148a73..8b750ad 100644
--- a/pym/portage/util/__init__.py
+++ b/pym/portage/util/__init__.py
@@ -1,6 +1,8 @@
-# Copyright 2004-2012 Gentoo Foundation
+# Copyright 2004-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['apply_permissions', 'apply_recursive_permissions',
 	'apply_secpass_permissions', 'apply_stat_permissions', 'atomic_ofstream',
 	'cmp_sort_key', 'ConfigProtect', 'dump_traceback', 'ensure_dirs',
@@ -666,7 +668,7 @@ def getconfig(mycfg, tolerant=0, allow_sourcing=False, expand=True):
 	except Exception as e:
 		if isinstance(e, ParseError) or lex is None:
 			raise
-		msg = _unicode_decode("%s%s") % (lex.error_leader(), e)
+		msg = "%s%s" % (lex.error_leader(), e)
 		writemsg("%s\n" % msg, noiselevel=-1)
 		raise
 
@@ -1415,8 +1417,8 @@ class LazyItemsDict(UserDict):
 			lazy_item = self.lazy_items.get(k)
 			if lazy_item is not None:
 				if not lazy_item.singleton:
-					raise TypeError(_unicode_decode("LazyItemsDict " + \
-						"deepcopy is unsafe with lazy items that are " + \
+					raise TypeError(("LazyItemsDict "
+						"deepcopy is unsafe with lazy items that are "
 						"not singletons: key=%s value=%s") % (k, lazy_item,))
 			UserDict.__setitem__(result, k_copy, deepcopy(self[k], memo))
 		return result

diff --git a/pym/portage/util/digraph.py b/pym/portage/util/digraph.py
index f3ae658..f752e28 100644
--- a/pym/portage/util/digraph.py
+++ b/pym/portage/util/digraph.py
@@ -1,12 +1,13 @@
-# Copyright 2010-2011 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['digraph']
 
 from collections import deque
 import sys
 
-from portage import _unicode_decode
 from portage.util import writemsg
 
 class digraph(object):
@@ -272,18 +273,17 @@ class digraph(object):
 	def debug_print(self):
 		def output(s):
 			writemsg(s, noiselevel=-1)
-		# Use _unicode_decode() to force unicode format
+		# Use unicode_literals to force unicode format
 		# strings for python-2.x safety, ensuring that
 		# node.__unicode__() is used when necessary.
 		for node in self.nodes:
-			output(_unicode_decode("%s ") % (node,))
+			output("%s " % (node,))
 			if self.nodes[node][0]:
 				output("depends on\n")
 			else:
 				output("(no children)\n")
 			for child, priorities in self.nodes[node][0].items():
-				output(_unicode_decode("  %s (%s)\n") % \
-					(child, priorities[-1],))
+				output("  %s (%s)\n" % (child, priorities[-1],))
 
 	def bfs(self, start, ignore_priority=None):
 		if start not in self:

diff --git a/pym/portage/util/movefile.py b/pym/portage/util/movefile.py
index 57375f2..bf95f1a 100644
--- a/pym/portage/util/movefile.py
+++ b/pym/portage/util/movefile.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['movefile']
 
 import errno
@@ -111,7 +113,7 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
 	except Exception as e:
 		writemsg("!!! %s\n" % _("Stating source file failed... movefile()"),
 			noiselevel=-1)
-		writemsg(_unicode_decode("!!! %s\n") % (e,), noiselevel=-1)
+		writemsg("!!! %s\n" % (e,), noiselevel=-1)
 		return None
 
 	destexists=1
@@ -180,7 +182,7 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
 			writemsg("!!! %s\n" % _("failed to properly create symlink:"),
 				noiselevel=-1)
 			writemsg("!!! %s -> %s\n" % (dest, target), noiselevel=-1)
-			writemsg(_unicode_decode("!!! %s\n") % (e,), noiselevel=-1)
+			writemsg("!!! %s\n" % (e,), noiselevel=-1)
 			return None
 
 	hardlinked = False
@@ -232,7 +234,7 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
 				# Some random error.
 				writemsg("!!! %s\n" % _("Failed to move %(src)s to %(dest)s") %
 					{"src": src, "dest": dest}, noiselevel=-1)
-				writemsg(_unicode_decode("!!! %s\n") % (e,), noiselevel=-1)
+				writemsg("!!! %s\n" % (e,), noiselevel=-1)
 				return None
 			# Invalid cross-device-link 'bind' mounted or actually Cross-Device
 	if renamefailed:
@@ -263,7 +265,7 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
 			except Exception as e:
 				writemsg("!!! %s\n" % _('copy %(src)s -> %(dest)s failed.') %
 					{"src": src, "dest": dest}, noiselevel=-1)
-				writemsg(_unicode_decode("!!! %s\n") % (e,), noiselevel=-1)
+				writemsg("!!! %s\n" % (e,), noiselevel=-1)
 				return None
 		else:
 			#we don't yet handle special, so we need to fall back to /bin/mv

diff --git a/pym/portage/versions.py b/pym/portage/versions.py
index a9b7e64..d78873f 100644
--- a/pym/portage/versions.py
+++ b/pym/portage/versions.py
@@ -1,7 +1,9 @@
 # versions.py -- core Portage functionality
-# Copyright 1998-2012 Gentoo Foundation
+# Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = [
 	'best', 'catpkgsplit', 'catsplit',
 	'cpv_getkey', 'cpv_getversion', 'cpv_sort_key', 'pkgcmp',  'pkgsplit',
@@ -79,7 +81,7 @@ def _get_pv_re(eapi_attrs):
 	else:
 		pv_re = _pv['dots_disallowed_in_PN']
 
-	pv_re = re.compile(_unicode_decode('^' + pv_re + '$'), re.VERBOSE | re.UNICODE)
+	pv_re = re.compile(r'^' + pv_re + r'$', re.VERBOSE | re.UNICODE)
 
 	_pv_re_cache[cache_key] = pv_re
 	return pv_re

diff --git a/pym/portage/xml/metadata.py b/pym/portage/xml/metadata.py
index 113b118..fcd9dc0 100644
--- a/pym/portage/xml/metadata.py
+++ b/pym/portage/xml/metadata.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 """Provides an easy-to-use python interface to Gentoo's metadata.xml file.
@@ -28,6 +28,8 @@
 		'Thomas Mills Hinkle'
 """
 
+from __future__ import unicode_literals
+
 __all__ = ('MetaDataXML',)
 
 import sys
@@ -58,7 +60,7 @@ except (ImportError, SystemError, RuntimeError, Exception):
 
 import re
 import xml.etree.ElementTree
-from portage import _encodings, _unicode_encode, _unicode_decode
+from portage import _encodings, _unicode_encode
 from portage.util import unique_everseen
 
 class _MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder):
@@ -208,7 +210,7 @@ class MetaDataXML(object):
 		except ImportError:
 			pass
 		except ExpatError as e:
-			raise SyntaxError(_unicode_decode("%s") % (e,))
+			raise SyntaxError("%s" % (e,))
 
 		if isinstance(herds, etree.ElementTree):
 			herds_etree = herds

diff --git a/pym/repoman/checks.py b/pym/repoman/checks.py
index 36c9863..83ce2ed 100644
--- a/pym/repoman/checks.py
+++ b/pym/repoman/checks.py
@@ -1,10 +1,12 @@
 # repoman: Checks
-# Copyright 2007-2012 Gentoo Foundation
+# Copyright 2007-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 """This module contains functions used in Repoman to ascertain the quality
 and correctness of an ebuild."""
 
+from __future__ import unicode_literals
+
 import codecs
 from itertools import chain
 import re

diff --git a/pym/repoman/errors.py b/pym/repoman/errors.py
index c515502..51ffeb8 100644
--- a/pym/repoman/errors.py
+++ b/pym/repoman/errors.py
@@ -1,7 +1,9 @@
 # repoman: Error Messages
-# Copyright 2007-2011 Gentoo Foundation
+# Copyright 2007-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 COPYRIGHT_ERROR = 'Invalid Gentoo Copyright on line: %d'
 LICENSE_ERROR = 'Invalid Gentoo/GPL License on line: %d'
 CVS_HEADER_ERROR = 'Malformed CVS Header on line: %d'

diff --git a/pym/repoman/herdbase.py b/pym/repoman/herdbase.py
index 4c420d0..c5b88ff 100644
--- a/pym/repoman/herdbase.py
+++ b/pym/repoman/herdbase.py
@@ -1,8 +1,10 @@
 # -*- coding: utf-8 -*-
 # repoman: Herd database analysis
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2 or later
 
+from __future__ import unicode_literals
+
 import errno
 import xml.etree.ElementTree
 try:
@@ -63,7 +65,7 @@ def make_herd_base(filename):
 			parser=xml.etree.ElementTree.XMLParser(
 				target=_HerdsTreeBuilder()))
 	except ExpatError as e:
-		raise ParseError("metadata.xml: " + str(e))
+		raise ParseError("metadata.xml: %s" % (e,))
 	except EnvironmentError as e:
 		func_call = "open('%s')" % filename
 		if e.errno == errno.EACCES:

diff --git a/pym/repoman/utilities.py b/pym/repoman/utilities.py
index b408074..8d24abb 100644
--- a/pym/repoman/utilities.py
+++ b/pym/repoman/utilities.py
@@ -1,11 +1,11 @@
 # repoman: Utilities
-# Copyright 2007-2012 Gentoo Foundation
+# Copyright 2007-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 """This module contains utility functions to help repoman find ebuilds to
 scan"""
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 __all__ = [
 	"detect_vcs_conflicts",
@@ -310,12 +310,12 @@ def format_qa_output(formatter, stats, fails, dofull, dofail, options, qawarning
 	# we only want key value pairs where value > 0 
 	for category, number in \
 		filter(lambda myitem: myitem[1] > 0, iter(stats.items())):
-		formatter.add_literal_data(_unicode_decode("  " + category.ljust(30)))
+		formatter.add_literal_data("  " + category.ljust(30))
 		if category in qawarnings:
 			formatter.push_style("WARN")
 		else:
 			formatter.push_style("BAD")
-		formatter.add_literal_data(_unicode_decode(str(number)))
+		formatter.add_literal_data("%s" % number)
 		formatter.pop_style()
 		formatter.add_line_break()
 		if not dofull:
@@ -326,7 +326,7 @@ def format_qa_output(formatter, stats, fails, dofull, dofail, options, qawarning
 			if not full and len(fails_list) > 12:
 				fails_list = fails_list[:12]
 			for failure in fails_list:
-				formatter.add_literal_data(_unicode_decode("   " + failure))
+				formatter.add_literal_data("   " + failure)
 				formatter.add_line_break()
 
 
@@ -775,7 +775,7 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
 				line = line.replace('<PACKAGE_NAME>', package)
 				line = _update_copyright_year(year, line)
 				header_lines.append(line)
-			header_lines.append(_unicode_decode('\n'))
+			header_lines.append('\n')
 			clskel_file.close()
 
 		# write new ChangeLog entry
@@ -785,10 +785,10 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
 			if not fn.endswith('.ebuild'):
 				continue
 			ebuild = fn.split(os.sep)[-1][0:-7] 
-			clnew_lines.append(_unicode_decode('*%s (%s)\n' % (ebuild, date)))
+			clnew_lines.append('*%s (%s)\n' % (ebuild, date))
 			newebuild = True
 		if newebuild:
-			clnew_lines.append(_unicode_decode('\n'))
+			clnew_lines.append('\n')
 		trivial_files = ('ChangeLog', 'Manifest')
 		display_new = ['+' + elem for elem in new
 			if elem not in trivial_files]
@@ -815,19 +815,19 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
 		for line in textwrap.wrap(mesg, 80, \
 				initial_indent='  ', subsequent_indent='  ', \
 				break_on_hyphens=False):
-			clnew_lines.append(_unicode_decode('%s\n' % line))
+			clnew_lines.append('%s\n' % line)
 		for line in textwrap.wrap(msg, 80, \
 				initial_indent='  ', subsequent_indent='  '):
-			clnew_lines.append(_unicode_decode('%s\n' % line))
+			clnew_lines.append('%s\n' % line)
 		# Don't append a trailing newline if the file is new.
 		if clold_file is not None:
-			clnew_lines.append(_unicode_decode('\n'))
+			clnew_lines.append('\n')
 
 		f = io.open(f, mode='w', encoding=_encodings['repo.content'],
 			errors='backslashreplace')
 
 		for line in clnew_lines:
-			f.write(_unicode_decode(line))
+			f.write(line)
 
 		# append stuff from old ChangeLog
 		if clold_file is not None:


^ permalink raw reply related	[flat|nested] 3+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/repoman/, pym/portage/package/ebuild/_ipc/, pym/_emerge/resolver/, ...
@ 2013-01-18 21:37 Zac Medico
  0 siblings, 0 replies; 3+ messages in thread
From: Zac Medico @ 2013-01-18 21:37 UTC (permalink / raw
  To: gentoo-commits

commit:     71235479ab208318dff391420f9695f5cfaa9594
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 18 21:33:08 2013 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Jan 18 21:36:47 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=71235479

Use unicode_literals more.

This helps to ensure consistent results, regardless of whether we're
using Python 2 or Python 3.

---
 bin/portageq                                       |   10 +---
 bin/repoman                                        |    2 +-
 pym/_emerge/DependencyArg.py                       |   10 ++--
 pym/_emerge/FakeVartree.py                         |    4 +-
 pym/_emerge/JobStatusDisplay.py                    |   41 ++++++++-------
 pym/_emerge/Package.py                             |   23 +++-----
 pym/_emerge/Scheduler.py                           |    8 ++--
 pym/_emerge/UseFlagDisplay.py                      |   10 ++--
 pym/_emerge/actions.py                             |   23 +++++---
 pym/_emerge/depgraph.py                            |   23 ++++-----
 pym/_emerge/emergelog.py                           |   12 ++---
 pym/_emerge/resolver/circular_dependency.py        |    4 +-
 pym/_emerge/resolver/output.py                     |    9 ++--
 pym/_emerge/resolver/output_helpers.py             |    5 ++-
 pym/_emerge/resolver/slot_collision.py             |   55 ++++++++++++-------
 pym/portage/__init__.py                            |    2 +
 pym/portage/const.py                               |    4 +-
 pym/portage/dbapi/__init__.py                      |    4 +-
 pym/portage/dbapi/_expand_new_virt.py              |    4 +-
 pym/portage/dbapi/bintree.py                       |   12 +++--
 pym/portage/dbapi/cpv_expand.py                    |    4 +-
 pym/portage/dbapi/dep_expand.py                    |    4 +-
 pym/portage/dbapi/porttree.py                      |    2 +
 pym/portage/dbapi/vartree.py                       |   20 ++++---
 pym/portage/dbapi/virtual.py                       |    3 +-
 pym/portage/dep/__init__.py                        |    2 +
 pym/portage/dep/_slot_operator.py                  |    4 +-
 pym/portage/dep/dep_check.py                       |   11 ++--
 pym/portage/elog/mod_save_summary.py               |   21 +++++---
 pym/portage/getbinpkg.py                           |    4 +-
 pym/portage/manifest.py                            |    2 +
 pym/portage/news.py                                |    6 +-
 .../package/ebuild/_config/special_env_vars.py     |    4 +-
 pym/portage/package/ebuild/_ipc/QueryCommand.py    |    7 ++-
 pym/portage/package/ebuild/config.py               |    4 +-
 pym/portage/package/ebuild/doebuild.py             |   10 ++--
 pym/portage/package/ebuild/prepare_build_dirs.py   |    8 ++-
 pym/portage/repository/config.py                   |   12 +++--
 pym/portage/update.py                              |    4 +-
 pym/portage/util/digraph.py                        |   12 ++--
 pym/portage/util/movefile.py                       |   12 +++--
 pym/portage/versions.py                            |    6 ++-
 pym/portage/xml/metadata.py                        |    8 ++-
 pym/repoman/checks.py                              |    4 +-
 pym/repoman/errors.py                              |    4 +-
 pym/repoman/herdbase.py                            |    6 ++-
 pym/repoman/utilities.py                           |   24 ++++----
 47 files changed, 273 insertions(+), 200 deletions(-)

diff --git a/bin/portageq b/bin/portageq
index ee776ef..826c92d 100755
--- a/bin/portageq
+++ b/bin/portageq
@@ -2,7 +2,7 @@
 # Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 import signal
 import sys
@@ -101,9 +101,7 @@ def has_version(argv):
 			try:
 				atom = portage.dep.Atom(argv[1], allow_repo=allow_repo, eapi=eapi)
 			except portage.exception.InvalidAtom as e:
-				warnings.append(
-					portage._unicode_decode("QA Notice: %s: %s") % \
-					('has_version', e))
+				warnings.append("QA Notice: %s: %s" % ('has_version', e))
 		atom = eval_atom_use(atom)
 
 	if warnings:
@@ -149,9 +147,7 @@ def best_version(argv):
 			try:
 				atom = portage.dep.Atom(argv[1], allow_repo=allow_repo, eapi=eapi)
 			except portage.exception.InvalidAtom as e:
-				warnings.append(
-					portage._unicode_decode("QA Notice: %s: %s") % \
-					('best_version', e))
+				warnings.append("QA Notice: %s: %s" % ('best_version', e))
 		atom = eval_atom_use(atom)
 
 	if warnings:

diff --git a/bin/repoman b/bin/repoman
index 4c00d5b..11f2b13 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -6,7 +6,7 @@
 # Then, check to make sure deps are satisfiable (to avoid "can't find match for" problems)
 # that last one is tricky because multiple profiles need to be checked.
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 import calendar
 import codecs

diff --git a/pym/_emerge/DependencyArg.py b/pym/_emerge/DependencyArg.py
index 80134c8..29a0072 100644
--- a/pym/_emerge/DependencyArg.py
+++ b/pym/_emerge/DependencyArg.py
@@ -1,9 +1,11 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import sys
 
-from portage import _encodings, _unicode_encode, _unicode_decode
+from portage import _encodings, _unicode_encode
 
 class DependencyArg(object):
 
@@ -31,10 +33,10 @@ class DependencyArg(object):
 		return hash((self.arg, self.root_config.root))
 
 	def __str__(self):
-		# Force unicode format string for python-2.x safety,
+		# Use unicode_literals format string for python-2.x safety,
 		# ensuring that self.arg.__unicode__() is used
 		# when necessary.
-		return _unicode_decode("%s") % (self.arg,)
+		return "%s" % (self.arg,)
 
 	if sys.hexversion < 0x3000000:
 

diff --git a/pym/_emerge/FakeVartree.py b/pym/_emerge/FakeVartree.py
index 058c1c7..fd87f6c 100644
--- a/pym/_emerge/FakeVartree.py
+++ b/pym/_emerge/FakeVartree.py
@@ -1,6 +1,8 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import sys
 import warnings
 

diff --git a/pym/_emerge/JobStatusDisplay.py b/pym/_emerge/JobStatusDisplay.py
index 5b9b221..f48b213 100644
--- a/pym/_emerge/JobStatusDisplay.py
+++ b/pym/_emerge/JobStatusDisplay.py
@@ -1,6 +1,8 @@
-# Copyright 1999-2011 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import formatter
 import io
 import sys
@@ -9,7 +11,6 @@ import time
 import portage
 from portage import os
 from portage import _encodings
-from portage import _unicode_decode
 from portage import _unicode_encode
 from portage.output import xtermTitle
 
@@ -233,10 +234,10 @@ class JobStatusDisplay(object):
 	def _display_status(self):
 		# Don't use len(self._completed_tasks) here since that also
 		# can include uninstall tasks.
-		curval_str = str(self.curval)
-		maxval_str = str(self.maxval)
-		running_str = str(self.running)
-		failed_str = str(self.failed)
+		curval_str = "%s" % (self.curval,)
+		maxval_str = "%s" % (self.maxval,)
+		running_str = "%s" % (self.running,)
+		failed_str = "%s" % (self.failed,)
 		load_avg_str = self._load_avg_str()
 
 		color_output = io.StringIO()
@@ -248,36 +249,36 @@ class JobStatusDisplay(object):
 		f = formatter.AbstractFormatter(style_writer)
 
 		number_style = "INFORM"
-		f.add_literal_data(_unicode_decode("Jobs: "))
+		f.add_literal_data("Jobs: ")
 		f.push_style(number_style)
-		f.add_literal_data(_unicode_decode(curval_str))
+		f.add_literal_data(curval_str)
 		f.pop_style()
-		f.add_literal_data(_unicode_decode(" of "))
+		f.add_literal_data(" of ")
 		f.push_style(number_style)
-		f.add_literal_data(_unicode_decode(maxval_str))
+		f.add_literal_data(maxval_str)
 		f.pop_style()
-		f.add_literal_data(_unicode_decode(" complete"))
+		f.add_literal_data(" complete")
 
 		if self.running:
-			f.add_literal_data(_unicode_decode(", "))
+			f.add_literal_data(", ")
 			f.push_style(number_style)
-			f.add_literal_data(_unicode_decode(running_str))
+			f.add_literal_data(running_str)
 			f.pop_style()
-			f.add_literal_data(_unicode_decode(" running"))
+			f.add_literal_data(" running")
 
 		if self.failed:
-			f.add_literal_data(_unicode_decode(", "))
+			f.add_literal_data(", ")
 			f.push_style(number_style)
-			f.add_literal_data(_unicode_decode(failed_str))
+			f.add_literal_data(failed_str)
 			f.pop_style()
-			f.add_literal_data(_unicode_decode(" failed"))
+			f.add_literal_data(" failed")
 
 		padding = self._jobs_column_width - len(plain_output.getvalue())
 		if padding > 0:
-			f.add_literal_data(padding * _unicode_decode(" "))
+			f.add_literal_data(padding * " ")
 
-		f.add_literal_data(_unicode_decode("Load avg: "))
-		f.add_literal_data(_unicode_decode(load_avg_str))
+		f.add_literal_data("Load avg: ")
+		f.add_literal_data(load_avg_str)
 
 		# Truncate to fit width, to avoid making the terminal scroll if the
 		# line overflows (happens when the load average is large).

diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index f3be19b..09d8b93 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -1,6 +1,8 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import sys
 from itertools import chain
 import warnings
@@ -259,8 +261,7 @@ class Package(Task):
 				use_reduce(v, eapi=dep_eapi, matchall=True,
 					is_valid_flag=dep_valid_flag, token_class=Atom)
 			except InvalidDependString as e:
-				self._invalid_metadata("PROVIDE.syntax",
-					_unicode_decode("%s: %s") % (k, e))
+				self._invalid_metadata("PROVIDE.syntax", "%s: %s" % (k, e))
 
 		for k in self._use_conditional_misc_keys:
 			v = self._metadata.get(k)
@@ -283,11 +284,7 @@ class Package(Task):
 					check_required_use(v, (),
 						self.iuse.is_valid_flag, eapi=eapi)
 				except InvalidDependString as e:
-					# Force unicode format string for python-2.x safety,
-					# ensuring that PortageException.__unicode__() is used
-					# when necessary.
-					self._invalid_metadata(k + ".syntax",
-						_unicode_decode("%s: %s") % (k, e))
+					self._invalid_metadata(k + ".syntax", "%s: %s" % (k, e))
 
 		k = 'SRC_URI'
 		v = self._metadata.get(k)
@@ -416,7 +413,7 @@ class Package(Task):
 		# format string, since that will result in the
 		# PortageException.__str__() method being invoked,
 		# followed by unsafe decoding that may result in a
-		# UnicodeDecodeError. Therefore, use _unicode_decode()
+		# UnicodeDecodeError. Therefore, use unicode_literals
 		# to ensure that format strings are unicode, so that
 		# PortageException.__unicode__() is used when necessary
 		# in python-2.x.
@@ -428,19 +425,17 @@ class Package(Task):
 						continue
 					categorized_error = True
 					self._invalid_metadata(error.category,
-						_unicode_decode("%s: %s") % (k, error))
+						"%s: %s" % (k, error))
 
 			if not categorized_error:
-				self._invalid_metadata(qacat,
-					_unicode_decode("%s: %s") % (k, e))
+				self._invalid_metadata(qacat,"%s: %s" % (k, e))
 		else:
 			# For installed packages, show the path of the file
 			# containing the invalid metadata, since the user may
 			# want to fix the deps by hand.
 			vardb = self.root_config.trees['vartree'].dbapi
 			path = vardb.getpath(self.cpv, filename=k)
-			self._invalid_metadata(qacat,
-				_unicode_decode("%s: %s in '%s'") % (k, e, path))
+			self._invalid_metadata(qacat, "%s: %s in '%s'" % (k, e, path))
 
 	def _invalid_metadata(self, msg_type, msg):
 		if self._invalid is None:

diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py
index c2f2459..c495ae0 100644
--- a/pym/_emerge/Scheduler.py
+++ b/pym/_emerge/Scheduler.py
@@ -1,7 +1,7 @@
 # Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 from collections import deque
 import gc
@@ -18,7 +18,7 @@ import zlib
 import portage
 from portage import os
 from portage import _encodings
-from portage import _unicode_decode, _unicode_encode
+from portage import _unicode_encode
 from portage.cache.mappings import slot_dict_class
 from portage.elog.messages import eerror
 from portage.localization import _
@@ -1145,9 +1145,9 @@ class Scheduler(PollScheduler):
 				printer.eerror(line)
 			printer.eerror("")
 			for failed_pkg in self._failed_pkgs_all:
-				# Use _unicode_decode() to force unicode format string so
+				# Use unicode_literals to force unicode format string so
 				# that Package.__unicode__() is called in python2.
-				msg = _unicode_decode(" %s") % (failed_pkg.pkg,)
+				msg = " %s" % (failed_pkg.pkg,)
 				log_path = self._locate_failure_log(failed_pkg)
 				if log_path is not None:
 					msg += ", Log file:"

diff --git a/pym/_emerge/UseFlagDisplay.py b/pym/_emerge/UseFlagDisplay.py
index 3daca19..f460474 100644
--- a/pym/_emerge/UseFlagDisplay.py
+++ b/pym/_emerge/UseFlagDisplay.py
@@ -1,10 +1,12 @@
-# Copyright 1999-2011 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 from itertools import chain
 import sys
 
-from portage import _encodings, _unicode_decode, _unicode_encode
+from portage import _encodings, _unicode_encode
 from portage.output import red
 from portage.util import cmp_sort_key
 from portage.output import blue
@@ -114,9 +116,9 @@ def pkg_use_display(pkg, opts, modified_use=None):
 			flags.sort(key=UseFlagDisplay.sort_combined)
 		else:
 			flags.sort(key=UseFlagDisplay.sort_separated)
-		# Use _unicode_decode() to force unicode format string so
+		# Use unicode_literals to force unicode format string so
 		# that UseFlagDisplay.__unicode__() is called in python2.
 		flag_displays.append('%s="%s"' % (varname,
-			' '.join(_unicode_decode("%s") % (f,) for f in flags)))
+			' '.join("%s" % (f,) for f in flags)))
 
 	return ' '.join(flag_displays)

diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 589680a..a95d7a1 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1,7 +1,7 @@
 # Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 import errno
 import logging
@@ -1207,11 +1207,11 @@ def calc_depclean(settings, trees, ldpath_mtimes,
 				priority = priority_map[dep_type]
 
 				if debug:
-					writemsg_level(_unicode_decode("\nParent:    %s\n") \
+					writemsg_level("\nParent:    %s\n"
 						% (node,), noiselevel=-1, level=logging.DEBUG)
-					writemsg_level(_unicode_decode(  "Depstring: %s\n") \
+					writemsg_level(  "Depstring: %s\n"
 						% (depstr,), noiselevel=-1, level=logging.DEBUG)
-					writemsg_level(_unicode_decode(  "Priority:  %s\n") \
+					writemsg_level(  "Priority:  %s\n"
 						% (priority,), noiselevel=-1, level=logging.DEBUG)
 
 				try:
@@ -1225,7 +1225,7 @@ def calc_depclean(settings, trees, ldpath_mtimes,
 
 				if debug:
 					writemsg_level("Candidates: [%s]\n" % \
-						', '.join(_unicode_decode("'%s'") % (x,) for x in atoms),
+						', '.join("'%s'" % (x,) for x in atoms),
 						noiselevel=-1, level=logging.DEBUG)
 
 				for atom in atoms:
@@ -3750,10 +3750,15 @@ def run_action(settings, trees, mtimedb, myaction, myopts, myfiles,
 			portage.util.ensure_dirs(_emerge.emergelog._emerge_log_dir)
 
 	if not "--pretend" in myopts:
-		emergelog(xterm_titles, "Started emerge on: "+\
-			_unicode_decode(
-				time.strftime("%b %d, %Y %H:%M:%S", time.localtime()),
-				encoding=_encodings['content'], errors='replace'))
+		time_fmt = "%b %d, %Y %H:%M:%S"
+		if sys.hexversion < 0x3000000:
+			time_fmt = portage._unicode_encode(time_fmt)
+		time_str = time.strftime(time_fmt, time.localtime(time.time()))
+		# Avoid potential UnicodeDecodeError in Python 2, since strftime
+		# returns bytes in Python 2, and %b may contain non-ascii chars.
+		time_str = _unicode_decode(time_str,
+			encoding=_encodings['content'], errors='replace')
+		emergelog(xterm_titles, "Started emerge on: %s" % time_str)
 		myelogstr=""
 		if myopts:
 			opt_list = []

diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 92e3b1c..b5dba31 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -1,7 +1,7 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 import errno
 import io
@@ -3187,7 +3187,7 @@ class depgraph(object):
 					if not node.installed:
 						raise
 			affecting_use.difference_update(node.use.mask, node.use.force)
-			pkg_name = _unicode_decode("%s") % (node.cpv,)
+			pkg_name = "%s" % (node.cpv,)
 			if affecting_use:
 				usedep = []
 				for flag in affecting_use:
@@ -3242,7 +3242,7 @@ class depgraph(object):
 					node_type = "set"
 				else:
 					node_type = "argument"
-				dep_chain.append((_unicode_decode("%s") % (node,), node_type))
+				dep_chain.append(("%s" % (node,), node_type))
 
 			elif node is not start_node:
 				for ppkg, patom in all_parents[child]:
@@ -3284,7 +3284,7 @@ class depgraph(object):
 				affecting_use.difference_update(node.use.mask, \
 					node.use.force)
 
-				pkg_name = _unicode_decode("%s") % (node.cpv,)
+				pkg_name = "%s" % (node.cpv,)
 				if affecting_use:
 					usedep = []
 					for flag in affecting_use:
@@ -3336,8 +3336,7 @@ class depgraph(object):
 				if self._dynamic_config.digraph.parent_nodes(parent_arg):
 					selected_parent = parent_arg
 				else:
-					dep_chain.append(
-						(_unicode_decode("%s") % (parent_arg,), "argument"))
+					dep_chain.append(("%s" % (parent_arg,), "argument"))
 					selected_parent = None
 
 			node = selected_parent
@@ -3373,7 +3372,7 @@ class depgraph(object):
 		if arg:
 			xinfo='"%s"' % arg
 		if isinstance(myparent, AtomArg):
-			xinfo = _unicode_decode('"%s"') % (myparent,)
+			xinfo = '"%s"' % (myparent,)
 		# Discard null/ from failed cpv_expand category expansion.
 		xinfo = xinfo.replace("null/", "")
 		if root != self._frozen_config._running_root.root:
@@ -3751,8 +3750,7 @@ class depgraph(object):
 			dep_chain = self._get_dep_chain(myparent, atom)
 			for node, node_type in dep_chain:
 				msg.append('(dependency required by "%s" [%s])' % \
-						(colorize('INFORM', _unicode_decode("%s") % \
-						(node)), node_type))
+						(colorize('INFORM', "%s" % (node)), node_type))
 
 		if msg:
 			writemsg("\n".join(msg), noiselevel=-1)
@@ -5039,7 +5037,7 @@ class depgraph(object):
 							# matches (this can happen if an atom lacks a
 							# category).
 							show_invalid_depstring_notice(
-								pkg, depstr, _unicode_decode("%s") % (e,))
+								pkg, depstr, "%s" % (e,))
 							del e
 							raise
 						if not success:
@@ -5069,8 +5067,7 @@ class depgraph(object):
 						except portage.exception.InvalidAtom as e:
 							depstr = " ".join(vardb.aux_get(pkg.cpv, dep_keys))
 							show_invalid_depstring_notice(
-								pkg, depstr,
-								_unicode_decode("Invalid Atom: %s") % (e,))
+								pkg, depstr, "Invalid Atom: %s" % (e,))
 							return False
 				for cpv in stale_cache:
 					del blocker_cache[cpv]

diff --git a/pym/_emerge/emergelog.py b/pym/_emerge/emergelog.py
index b1b093f..aea94f7 100644
--- a/pym/_emerge/emergelog.py
+++ b/pym/_emerge/emergelog.py
@@ -1,7 +1,7 @@
-# Copyright 1999-2011 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import unicode_literals
 
 import io
 import sys
@@ -20,10 +20,6 @@ from portage.output import xtermTitle
 _disable = True
 _emerge_log_dir = '/var/log'
 
-# Coerce to unicode, in order to prevent TypeError when writing
-# raw bytes to TextIOWrapper with python2.
-_log_fmt = _unicode_decode("%.0f: %s\n")
-
 def emergelog(xterm_titles, mystr, short_msg=None):
 
 	if _disable:
@@ -51,10 +47,10 @@ def emergelog(xterm_titles, mystr, short_msg=None):
 				mode=0o660)
 		mylock = portage.locks.lockfile(file_path)
 		try:
-			mylogfile.write(_log_fmt % (time.time(), mystr))
+			mylogfile.write("%.0f: %s\n" % (time.time(), mystr))
 			mylogfile.close()
 		finally:
 			portage.locks.unlockfile(mylock)
 	except (IOError,OSError,portage.exception.PortageException) as e:
 		if secpass >= 1:
-			print("emergelog():",e, file=sys.stderr)
+			portage.util.writemsg("emergelog(): %s\n" % (e,), noiselevel=-1)

diff --git a/pym/_emerge/resolver/circular_dependency.py b/pym/_emerge/resolver/circular_dependency.py
index 5256123..6380b22 100644
--- a/pym/_emerge/resolver/circular_dependency.py
+++ b/pym/_emerge/resolver/circular_dependency.py
@@ -1,7 +1,7 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 from itertools import chain, product
 import logging

diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py
index 3d6af66..651a4f7 100644
--- a/pym/_emerge/resolver/output.py
+++ b/pym/_emerge/resolver/output.py
@@ -1,9 +1,11 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 """Resolver output display operation.
 """
 
+from __future__ import unicode_literals
+
 __all__ = (
 	"Display",
 	)
@@ -11,7 +13,6 @@ __all__ = (
 import sys
 
 from portage import os
-from portage import _unicode_decode
 from portage.dbapi.dep_expand import dep_expand
 from portage.dep import cpvequal, _repo_separator, _slot_separator
 from portage.eapi import _get_eapi_attrs
@@ -567,9 +568,9 @@ class Display(object):
 		"""
 		writemsg_stdout('\n%s\n' % (self.counters,), noiselevel=-1)
 		if show_repos:
-			# Use _unicode_decode() to force unicode format string so
+			# Use unicode_literals to force unicode format string so
 			# that RepoDisplay.__unicode__() is called in python2.
-			writemsg_stdout(_unicode_decode("%s") % (self.conf.repo_display,),
+			writemsg_stdout("%s" % (self.conf.repo_display,),
 				noiselevel=-1)
 		return
 

diff --git a/pym/_emerge/resolver/output_helpers.py b/pym/_emerge/resolver/output_helpers.py
index 1fc083a..ccaa0f2 100644
--- a/pym/_emerge/resolver/output_helpers.py
+++ b/pym/_emerge/resolver/output_helpers.py
@@ -1,9 +1,12 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 """Contains private support functions for the Display class
 in output.py
 """
+
+from __future__ import unicode_literals
+
 __all__ = (
 	)
 

diff --git a/pym/_emerge/resolver/slot_collision.py b/pym/_emerge/resolver/slot_collision.py
index 8b2f4b8..f07b01a 100644
--- a/pym/_emerge/resolver/slot_collision.py
+++ b/pym/_emerge/resolver/slot_collision.py
@@ -1,10 +1,11 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 import sys
 
+from portage import _encodings, _unicode_encode
 from _emerge.AtomArg import AtomArg
 from _emerge.Package import Package
 from _emerge.PackageArg import PackageArg
@@ -150,7 +151,7 @@ class slot_conflict_handler(object):
 			if self.debug:
 				writemsg("\nNew configuration:\n", noiselevel=-1)
 				for pkg in config:
-					writemsg("   " + str(pkg) + "\n", noiselevel=-1)
+					writemsg("   %s\n" % (pkg,), noiselevel=-1)
 				writemsg("\n", noiselevel=-1)
 
 			new_solutions = self._check_configuration(config, all_conflict_atoms_by_slotatom, conflict_nodes)
@@ -249,14 +250,14 @@ class slot_conflict_handler(object):
 
 		for (slot_atom, root), pkgs \
 			in self.slot_collision_info.items():
-			msg.append(str(slot_atom))
+			msg.append("%s" % (slot_atom,))
 			if root != self.depgraph._frozen_config._running_root.root:
 				msg.append(" for %s" % (root,))
 			msg.append("\n\n")
 
 			for pkg in pkgs:
 				msg.append(indent)
-				msg.append(str(pkg))
+				msg.append("%s" % (pkg,))
 				parent_atoms = self.all_parents.get(pkg)
 				if parent_atoms:
 					#Create a list of collision reasons and map them to sets
@@ -394,7 +395,7 @@ class slot_conflict_handler(object):
 
 					def highlight_violations(atom, version, use=[]):
 						"""Colorize parts of an atom"""
-						atom_str = str(atom)
+						atom_str = "%s" % (atom,)
 						if version:
 							op = atom.operator
 							ver = None
@@ -449,7 +450,7 @@ class slot_conflict_handler(object):
 							(PackageArg, AtomArg)):
 							# For PackageArg and AtomArg types, it's
 							# redundant to display the atom attribute.
-							msg.append(str(parent))
+							msg.append("%s" % (parent,))
 						else:
 							# Display the specific atom from SetArg or
 							# Package types.
@@ -567,7 +568,9 @@ class slot_conflict_handler(object):
 					if pkg.iuse.all.symmetric_difference(other_pkg.iuse.all) \
 						or _pkg_use_enabled(pkg).symmetric_difference(_pkg_use_enabled(other_pkg)):
 						if self.debug:
-							writemsg(str(pkg) + " has pending USE changes. Rejecting configuration.\n", noiselevel=-1)
+							writemsg(("%s has pending USE changes. "
+								"Rejecting configuration.\n") % (pkg,),
+								noiselevel=-1)
 						return False
 
 		#A list of dicts. Keeps one dict per slot conflict. [ { flag1: "enabled" }, { flag2: "disabled" } ]
@@ -590,16 +593,18 @@ class slot_conflict_handler(object):
 				if not i.findAtomForPackage(pkg, modified_use=_pkg_use_enabled(pkg)):
 					#Version range does not match.
 					if self.debug:
-						writemsg(str(pkg) + " does not satify all version requirements." + \
-							" Rejecting configuration.\n", noiselevel=-1)
+						writemsg(("%s does not satify all version "
+							"requirements. Rejecting configuration.\n") %
+							(pkg,), noiselevel=-1)
 					return False
 
 				if not pkg.iuse.is_valid_flag(atom.unevaluated_atom.use.required):
 					#Missing IUSE.
 					#FIXME: This needs to support use dep defaults.
 					if self.debug:
-						writemsg(str(pkg) + " misses needed flags from IUSE." + \
-							" Rejecting configuration.\n", noiselevel=-1)
+						writemsg(("%s misses needed flags from IUSE."
+							" Rejecting configuration.\n") % (pkg,),
+							noiselevel=-1)
 					return False
 
 				if not isinstance(ppkg, Package) or ppkg.installed:
@@ -624,8 +629,9 @@ class slot_conflict_handler(object):
 					#We can't change USE of an installed package (only of an ebuild, but that is already
 					#part of the conflict, isn't it?
 					if self.debug:
-						writemsg(str(pkg) + ": installed package would need USE changes." + \
-							" Rejecting configuration.\n", noiselevel=-1)
+						writemsg(("%s: installed package would need USE"
+							" changes. Rejecting configuration.\n") % (pkg,),
+							noiselevel=-1)
 					return False
 
 				#Compute the required USE changes. A flag can be forced to "enabled" or "disabled",
@@ -679,7 +685,7 @@ class slot_conflict_handler(object):
 		if self.debug:
 			writemsg("All involved flags:\n", noiselevel=-1)
 			for id, involved_flags in enumerate(all_involved_flags):
-				writemsg("   " + str(config[id]) + "\n", noiselevel=-1)
+				writemsg("   %s\n" % (config[id],), noiselevel=-1)
 				for flag, state in involved_flags.items():
 					writemsg("     " + flag + ": " + state + "\n", noiselevel=-1)
 
@@ -762,7 +768,7 @@ class slot_conflict_handler(object):
 						inner_first = False
 					else:
 						msg += ", "
-					msg += flag + ": " + str(state)
+					msg += flag + ": %s" % (state,)
 				msg += "}"
 			msg += "]\n"
 			writemsg(msg, noiselevel=-1)
@@ -866,8 +872,9 @@ class slot_conflict_handler(object):
 					#We managed to create a new problem with our changes.
 					is_valid_solution = False
 					if self.debug:
-						writemsg("new conflict introduced: " + str(pkg) + \
-							" does not match " + new_atom + " from " + str(ppkg) + "\n", noiselevel=-1)
+						writemsg(("new conflict introduced: %s"
+							" does not match %s from %s\n") %
+							(pkg, new_atom, ppkg), noiselevel=-1)
 					break
 
 			if not is_valid_solution:
@@ -954,8 +961,16 @@ class _solution_candidate_generator(object):
 			else:
 				return self.value == other.value
 		def __str__(self):
-			return str(self.value)
-	
+			return "%s" % (self.value,)
+
+		if sys.hexversion < 0x3000000:
+
+			__unicode__ = __str__
+
+			def __str__(self):
+				return _unicode_encode(self.__unicode__(),
+					encoding=_encodings['content'], errors='backslashreplace')
+
 	def __init__(self, all_involved_flags):
 		#A copy of all_involved_flags with all "cond" values
 		#replaced by a _value_helper object.

diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 6d7b101..3bae4de 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -2,6 +2,8 @@
 # Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 VERSION="HEAD"
 
 # ===========================================================================

diff --git a/pym/portage/const.py b/pym/portage/const.py
index 8c5bbf3..3859a16 100644
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@ -1,7 +1,9 @@
 # portage: Constants
-# Copyright 1998-2012 Gentoo Foundation
+# Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import os
 
 # ===========================================================================

diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index 49b7293..5828bca 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -1,6 +1,8 @@
-# Copyright 1998-2012 Gentoo Foundation
+# Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ["dbapi"]
 
 import re

diff --git a/pym/portage/dbapi/_expand_new_virt.py b/pym/portage/dbapi/_expand_new_virt.py
index 95b2c28..9aa603d 100644
--- a/pym/portage/dbapi/_expand_new_virt.py
+++ b/pym/portage/dbapi/_expand_new_virt.py
@@ -1,6 +1,8 @@
-# Copyright 2011-2012 Gentoo Foundation
+# Copyright 2011-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import portage
 from portage.dep import Atom, _get_useflag_re
 from portage.eapi import _get_eapi_attrs

diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index f6fc114..875e955 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -1,6 +1,8 @@
-# Copyright 1998-2012 Gentoo Foundation
+# Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ["bindbapi", "binarytree"]
 
 import portage
@@ -138,15 +140,15 @@ class bindbapi(fakedbapi):
 			if myval:
 				mydata[x] = " ".join(myval.split())
 
-		if not mydata.setdefault('EAPI', _unicode_decode('0')):
-			mydata['EAPI'] = _unicode_decode('0')
+		if not mydata.setdefault('EAPI', '0'):
+			mydata['EAPI'] = '0'
 
 		if cache_me:
 			aux_cache = self._aux_cache_slot_dict()
 			for x in self._aux_cache_keys:
-				aux_cache[x] = mydata.get(x, _unicode_decode(''))
+				aux_cache[x] = mydata.get(x, '')
 			self._aux_cache[mycpv] = aux_cache
-		return [mydata.get(x, _unicode_decode('')) for x in wants]
+		return [mydata.get(x, '') for x in wants]
 
 	def aux_update(self, cpv, values):
 		if not self.bintree.populated:

diff --git a/pym/portage/dbapi/cpv_expand.py b/pym/portage/dbapi/cpv_expand.py
index 947194c..70ee782 100644
--- a/pym/portage/dbapi/cpv_expand.py
+++ b/pym/portage/dbapi/cpv_expand.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2011 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ["cpv_expand"]
 
 import portage

diff --git a/pym/portage/dbapi/dep_expand.py b/pym/portage/dbapi/dep_expand.py
index bb211c7..3de5d8f 100644
--- a/pym/portage/dbapi/dep_expand.py
+++ b/pym/portage/dbapi/dep_expand.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ["dep_expand"]
 
 import re

diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index cf4b142..321b675 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -1,6 +1,8 @@
 # Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = [
 	"close_portdbapi_caches", "FetchlistDict", "portagetree", "portdbapi"
 ]

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 09130fb..30add8a 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -1,6 +1,8 @@
 # Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = [
 	"vardbapi", "vartree", "dblink"] + \
 	["write_contents", "tar_contents"]
@@ -594,7 +596,7 @@ class vardbapi(dbapi):
 				getattr(e, 'errno', None) in (errno.ENOENT, errno.EACCES):
 				pass
 			else:
-				writemsg(_unicode_decode(_("!!! Error loading '%s': %s\n")) % \
+				writemsg(_("!!! Error loading '%s': %s\n") % \
 					(self._aux_cache_filename, e), noiselevel=-1)
 			del e
 
@@ -714,7 +716,7 @@ class vardbapi(dbapi):
 		if _get_slot_re(eapi_attrs).match(mydata['SLOT']) is None:
 			# Empty or invalid slot triggers InvalidAtom exceptions when
 			# generating slot atoms for packages, so translate it to '0' here.
-			mydata['SLOT'] = _unicode_decode('0')
+			mydata['SLOT'] = '0'
 
 		return [mydata[x] for x in wants]
 
@@ -750,7 +752,7 @@ class vardbapi(dbapi):
 					self._aux_cache_keys_re.match(x) is None:
 					env_keys.append(x)
 					continue
-				myd = _unicode_decode('')
+				myd = ''
 
 			# Preserve \n for metadata that is known to
 			# contain multiple lines.
@@ -764,13 +766,13 @@ class vardbapi(dbapi):
 			for k in env_keys:
 				v = env_results.get(k)
 				if v is None:
-					v = _unicode_decode('')
+					v = ''
 				if self._aux_multi_line_re.match(k) is None:
 					v = " ".join(v.split())
 				results[k] = v
 
 		if results.get("EAPI") == "":
-			results[_unicode_decode("EAPI")] = _unicode_decode('0')
+			results["EAPI"] = '0'
 
 		return results
 
@@ -1607,7 +1609,7 @@ class dblink(object):
 		if myroot == os.path.sep:
 			myroot = None
 		# used to generate parent dir entries
-		dir_entry = (_unicode_decode("dir"),)
+		dir_entry = ("dir",)
 		eroot_split_len = len(self.settings["EROOT"].split(os.sep)) - 1
 		pos = 0
 		errors = []
@@ -1896,7 +1898,7 @@ class dblink(object):
 				showMessage(_("!!! FAILED prerm: %s\n") % \
 					os.path.join(self.dbdir, "EAPI"),
 					level=logging.ERROR, noiselevel=-1)
-				showMessage(_unicode_decode("%s\n") % (eapi_unsupported,),
+				showMessage("%s\n" % (eapi_unsupported,),
 					level=logging.ERROR, noiselevel=-1)
 			elif os.path.isfile(myebuildpath):
 				phase = EbuildPhase(background=background,
@@ -3963,7 +3965,7 @@ class dblink(object):
 			encoding=_encodings['fs'], errors='strict'),
 			mode='w', encoding=_encodings['repo.content'],
 			errors='backslashreplace') as f:
-			f.write(_unicode_decode(str(counter)))
+			f.write("%s" % counter)
 
 		self.updateprotect()
 
@@ -4859,7 +4861,7 @@ class dblink(object):
 			mode='w', encoding=_encodings['repo.content'],
 			errors='backslashreplace') as f:
 			for x in mylist:
-				f.write(_unicode_decode(x + "\n"))
+				f.write("%s\n" % x)
 
 	def isregular(self):
 		"Is this a regular package (does it have a CATEGORY file?  A dblink can be virtual *and* regular)"

diff --git a/pym/portage/dbapi/virtual.py b/pym/portage/dbapi/virtual.py
index 30d6c22..ba9745c 100644
--- a/pym/portage/dbapi/virtual.py
+++ b/pym/portage/dbapi/virtual.py
@@ -1,6 +1,7 @@
-# Copyright 1998-2012 Gentoo Foundation
+# Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
 
 from portage.dbapi import dbapi
 from portage.dbapi.dep_expand import dep_expand

diff --git a/pym/portage/dep/__init__.py b/pym/portage/dep/__init__.py
index 67383e8..5117531 100644
--- a/pym/portage/dep/__init__.py
+++ b/pym/portage/dep/__init__.py
@@ -2,6 +2,8 @@
 # Copyright 2003-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = [
 	'Atom', 'best_match_to_list', 'cpvequal',
 	'dep_getcpv', 'dep_getkey', 'dep_getslot',

diff --git a/pym/portage/dep/_slot_operator.py b/pym/portage/dep/_slot_operator.py
index 2fcfb48..7b64444 100644
--- a/pym/portage/dep/_slot_operator.py
+++ b/pym/portage/dep/_slot_operator.py
@@ -1,6 +1,8 @@
-# Copyright 2012 Gentoo Foundation
+# Copyright 2012-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 from portage.dep import Atom, paren_enclose, use_reduce
 from portage.eapi import _get_eapi_attrs
 from portage.exception import InvalidData

diff --git a/pym/portage/dep/dep_check.py b/pym/portage/dep/dep_check.py
index b5f8d0d..6e3d086 100644
--- a/pym/portage/dep/dep_check.py
+++ b/pym/portage/dep/dep_check.py
@@ -1,12 +1,13 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['dep_check', 'dep_eval', 'dep_wordreduce', 'dep_zapdeps']
 
 import logging
 
 import portage
-from portage import _unicode_decode
 from portage.dep import Atom, match_from_list, use_reduce
 from portage.exception import InvalidDependString, ParseError
 from portage.localization import _
@@ -183,7 +184,7 @@ def _expand_new_virtuals(mysplit, edebug, mydbapi, mysettings, myroot="/",
 					del mytrees["virt_parent"]
 
 			if not mycheck[0]:
-				raise ParseError(_unicode_decode("%s: %s '%s'") % \
+				raise ParseError("%s: %s '%s'" % \
 					(pkg, mycheck[1], depstring))
 
 			# pull in the new-style virtual
@@ -605,7 +606,7 @@ def dep_check(depstring, mydbapi, mysettings, use="yes", mode=None, myuse=None,
 			masklist=mymasks, matchall=(use=="all"), excludeall=useforce,
 			opconvert=True, token_class=Atom, eapi=eapi)
 		except InvalidDependString as e:
-			return [0, _unicode_decode("%s") % (e,)]
+			return [0, "%s" % (e,)]
 
 	if mysplit == []:
 		#dependencies were reduced to nothing
@@ -619,7 +620,7 @@ def dep_check(depstring, mydbapi, mysettings, use="yes", mode=None, myuse=None,
 			use_force=useforce, use_mask=mymasks, use_cache=use_cache,
 			use_binaries=use_binaries, myroot=myroot, trees=trees)
 	except ParseError as e:
-		return [0, _unicode_decode("%s") % (e,)]
+		return [0, "%s" % (e,)]
 
 	mysplit2=mysplit[:]
 	mysplit2=dep_wordreduce(mysplit2,mysettings,mydbapi,mode,use_cache=use_cache)

diff --git a/pym/portage/elog/mod_save_summary.py b/pym/portage/elog/mod_save_summary.py
index 3ad1dd3..786f894 100644
--- a/pym/portage/elog/mod_save_summary.py
+++ b/pym/portage/elog/mod_save_summary.py
@@ -1,9 +1,12 @@
 # elog/mod_save_summary.py - elog dispatch module
-# Copyright 2006-2012 Gentoo Foundation
+# Copyright 2006-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import errno
 import io
+import sys
 import time
 import portage
 from portage import os
@@ -71,17 +74,19 @@ def process(mysettings, key, logentries, fulltext):
 	apply_permissions(elogfilename, uid=logfile_uid, gid=elogdir_gid,
 		mode=elogdir_grp_mode, mask=0)
 
-	time_str = time.strftime("%Y-%m-%d %H:%M:%S %Z",
-		time.localtime(time.time()))
-	# Avoid potential UnicodeDecodeError later.
+	time_fmt = "%Y-%m-%d %H:%M:%S %Z"
+	if sys.hexversion < 0x3000000:
+		time_fmt = _unicode_encode(time_fmt)
+	time_str = time.strftime(time_fmt, time.localtime(time.time()))
+	# Avoid potential UnicodeDecodeError in Python 2, since strftime
+	# returns bytes in Python 2, and %Z may contain non-ascii chars.
 	time_str = _unicode_decode(time_str,
 		encoding=_encodings['content'], errors='replace')
-	elogfile.write(_unicode_decode(
-		_(">>> Messages generated by process " +
+	elogfile.write(_(">>> Messages generated by process "
 		"%(pid)d on %(time)s for package %(pkg)s:\n\n") %
-		{"pid": os.getpid(), "time": time_str, "pkg": key}))
+		{"pid": os.getpid(), "time": time_str, "pkg": key})
 	elogfile.write(_unicode_decode(fulltext))
-	elogfile.write(_unicode_decode("\n"))
+	elogfile.write("\n")
 	elogfile.close()
 
 	return elogfilename

diff --git a/pym/portage/getbinpkg.py b/pym/portage/getbinpkg.py
index 947bd3e..77c1c8f 100644
--- a/pym/portage/getbinpkg.py
+++ b/pym/portage/getbinpkg.py
@@ -1,7 +1,9 @@
 # getbinpkg.py -- Portage binary-package helper functions
-# Copyright 2003-2012 Gentoo Foundation
+# Copyright 2003-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 from portage.output import colorize
 from portage.cache.mappings import slot_dict_class
 from portage.localization import _

diff --git a/pym/portage/manifest.py b/pym/portage/manifest.py
index 71837e0..513f1ca 100644
--- a/pym/portage/manifest.py
+++ b/pym/portage/manifest.py
@@ -1,6 +1,8 @@
 # Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import errno
 import io
 import re

diff --git a/pym/portage/news.py b/pym/portage/news.py
index bbd9325..94ec8f1 100644
--- a/pym/portage/news.py
+++ b/pym/portage/news.py
@@ -1,8 +1,8 @@
 # portage: news management code
-# Copyright 2006-2011 Gentoo Foundation
+# Copyright 2006-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 __all__ = ["NewsManager", "NewsItem", "DisplayRestriction",
 	"DisplayProfileRestriction", "DisplayKeywordRestriction",
@@ -388,7 +388,7 @@ def count_unread_news(portdb, vardb, repos=None, update=True):
 			# NOTE: The NewsManager typically handles permission errors by
 			# returning silently, so PermissionDenied won't necessarily be
 			# raised even if we do trigger a permission error above.
-			msg = _unicode_decode("Permission denied: '%s'\n") % (e,)
+			msg = "Permission denied: '%s'\n" % (e,)
 			if msg in permission_msgs:
 				pass
 			else:

diff --git a/pym/portage/package/ebuild/_config/special_env_vars.py b/pym/portage/package/ebuild/_config/special_env_vars.py
index 93bb98a..98e68d2 100644
--- a/pym/portage/package/ebuild/_config/special_env_vars.py
+++ b/pym/portage/package/ebuild/_config/special_env_vars.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = (
 	'case_insensitive_vars', 'default_globals', 'env_blacklist', \
 	'environ_filter', 'environ_whitelist', 'environ_whitelist_re',

diff --git a/pym/portage/package/ebuild/_ipc/QueryCommand.py b/pym/portage/package/ebuild/_ipc/QueryCommand.py
index fa8b506..351c956 100644
--- a/pym/portage/package/ebuild/_ipc/QueryCommand.py
+++ b/pym/portage/package/ebuild/_ipc/QueryCommand.py
@@ -1,11 +1,12 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import io
 
 import portage
 from portage import os
-from portage import _unicode_decode
 from portage.dep import Atom, _repo_name_re
 from portage.eapi import eapi_has_repo_deps
 from portage.elog import messages as elog_messages
@@ -65,7 +66,7 @@ class QueryCommand(IpcCommand):
 			try:
 				atom = Atom(args[0], allow_repo=allow_repo, eapi=eapi)
 			except InvalidAtom as e:
-				warnings.append(_unicode_decode("QA Notice: %s: %s") % (cmd, e))
+				warnings.append("QA Notice: %s: %s" % (cmd, e))
 
 			use = self.settings.get('PORTAGE_BUILT_USE')
 			if use is None:

diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index 1364a3d..4df3c96 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -1,6 +1,8 @@
 # Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = [
 	'autouse', 'best_from_dict', 'check_config_instance', 'config',
 ]
@@ -2378,7 +2380,7 @@ class config(object):
 				return portage._pym_path
 
 			elif mykey == "PORTAGE_GID":
-				return _unicode_decode(str(portage_gid))
+				return "%s" % portage_gid
 
 		for d in self.lookuplist:
 			try:

diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py
index bef1989..3e8ff01 100644
--- a/pym/portage/package/ebuild/doebuild.py
+++ b/pym/portage/package/ebuild/doebuild.py
@@ -1,6 +1,8 @@
 # Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['doebuild', 'doebuild_environment', 'spawn', 'spawnebuild']
 
 import grp
@@ -1742,7 +1744,7 @@ def _post_src_install_write_metadata(settings):
 		'BUILD_TIME'), encoding=_encodings['fs'], errors='strict'),
 		mode='w', encoding=_encodings['repo.content'],
 		errors='strict') as f:
-		f.write(_unicode_decode("%.0f\n" % (time.time(),)))
+		f.write("%.0f\n" % (time.time(),))
 
 	use = frozenset(settings['PORTAGE_USE'].split())
 	for k in _vdb_use_conditional_keys:
@@ -1774,7 +1776,7 @@ def _post_src_install_write_metadata(settings):
 			k), encoding=_encodings['fs'], errors='strict'),
 			mode='w', encoding=_encodings['repo.content'],
 			errors='strict') as f:
-			f.write(_unicode_decode(v + '\n'))
+			f.write('%s\n' % v)
 
 	if eapi_attrs.slot_operator:
 		deps = evaluate_slot_operator_equal_deps(settings, use, QueryCommand.get_db())
@@ -1790,7 +1792,7 @@ def _post_src_install_write_metadata(settings):
 				k), encoding=_encodings['fs'], errors='strict'),
 				mode='w', encoding=_encodings['repo.content'],
 				errors='strict') as f:
-				f.write(_unicode_decode(v + '\n'))
+				f.write('%s\n' % v)
 
 def _preinst_bsdflags(mysettings):
 	if bsd_chflags:
@@ -1999,7 +2001,7 @@ def _post_src_install_uid_fix(mysettings, out):
 		'SIZE'), encoding=_encodings['fs'], errors='strict'),
 		mode='w', encoding=_encodings['repo.content'],
 		errors='strict')
-	f.write(_unicode_decode(str(size) + '\n'))
+	f.write('%d\n' % size)
 	f.close()
 
 	_reapply_bsdflags_to_image(mysettings)

diff --git a/pym/portage/package/ebuild/prepare_build_dirs.py b/pym/portage/package/ebuild/prepare_build_dirs.py
index b8fbdc5..6782160 100644
--- a/pym/portage/package/ebuild/prepare_build_dirs.py
+++ b/pym/portage/package/ebuild/prepare_build_dirs.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2011 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['prepare_build_dirs']
 
 import errno
@@ -338,12 +340,12 @@ def _prepare_workdir(mysettings):
 			try:
 				_ensure_log_subdirs(logdir, log_subdir)
 			except PortageException as e:
-				writemsg(_unicode_decode("!!! %s\n") % (e,), noiselevel=-1)
+				writemsg("!!! %s\n" % (e,), noiselevel=-1)
 
 			if os.access(log_subdir, os.W_OK):
 				logdir_subdir_ok = True
 			else:
-				writemsg(_unicode_decode("!!! %s: %s\n") %
+				writemsg("!!! %s: %s\n" %
 					(_("Permission Denied"), log_subdir), noiselevel=-1)
 
 	tmpdir_log_path = os.path.join(

diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 3d29fd9..a1c1f79 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import io
 import logging
 import warnings
@@ -320,7 +322,7 @@ class RepoConfig(object):
 		d = {}
 		for k in self.__slots__:
 			d[k] = getattr(self, k, None)
-		return _unicode_decode("%s") % (d,)
+		return "%s" % (d,)
 
 	if sys.hexversion < 0x3000000:
 
@@ -431,9 +433,9 @@ class RepoConfigLoader(object):
 				try:
 					read_file(f)
 				except ParsingError as e:
-					writemsg(_unicode_decode(
-						_("!!! Error while reading repo config file: %s\n")
-						) % e, noiselevel=-1)
+					writemsg(
+						_("!!! Error while reading repo config file: %s\n") % e,
+						noiselevel=-1)
 			finally:
 				if f is not None:
 					f.close()

diff --git a/pym/portage/update.py b/pym/portage/update.py
index 3f76030..f518510 100644
--- a/pym/portage/update.py
+++ b/pym/portage/update.py
@@ -1,6 +1,8 @@
-# Copyright 1999-2012 Gentoo Foundation
+# Copyright 1999-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 import errno
 import io
 import re

diff --git a/pym/portage/util/digraph.py b/pym/portage/util/digraph.py
index f3ae658..f752e28 100644
--- a/pym/portage/util/digraph.py
+++ b/pym/portage/util/digraph.py
@@ -1,12 +1,13 @@
-# Copyright 2010-2011 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['digraph']
 
 from collections import deque
 import sys
 
-from portage import _unicode_decode
 from portage.util import writemsg
 
 class digraph(object):
@@ -272,18 +273,17 @@ class digraph(object):
 	def debug_print(self):
 		def output(s):
 			writemsg(s, noiselevel=-1)
-		# Use _unicode_decode() to force unicode format
+		# Use unicode_literals to force unicode format
 		# strings for python-2.x safety, ensuring that
 		# node.__unicode__() is used when necessary.
 		for node in self.nodes:
-			output(_unicode_decode("%s ") % (node,))
+			output("%s " % (node,))
 			if self.nodes[node][0]:
 				output("depends on\n")
 			else:
 				output("(no children)\n")
 			for child, priorities in self.nodes[node][0].items():
-				output(_unicode_decode("  %s (%s)\n") % \
-					(child, priorities[-1],))
+				output("  %s (%s)\n" % (child, priorities[-1],))
 
 	def bfs(self, start, ignore_priority=None):
 		if start not in self:

diff --git a/pym/portage/util/movefile.py b/pym/portage/util/movefile.py
index 57375f2..bf95f1a 100644
--- a/pym/portage/util/movefile.py
+++ b/pym/portage/util/movefile.py
@@ -1,6 +1,8 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = ['movefile']
 
 import errno
@@ -111,7 +113,7 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
 	except Exception as e:
 		writemsg("!!! %s\n" % _("Stating source file failed... movefile()"),
 			noiselevel=-1)
-		writemsg(_unicode_decode("!!! %s\n") % (e,), noiselevel=-1)
+		writemsg("!!! %s\n" % (e,), noiselevel=-1)
 		return None
 
 	destexists=1
@@ -180,7 +182,7 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
 			writemsg("!!! %s\n" % _("failed to properly create symlink:"),
 				noiselevel=-1)
 			writemsg("!!! %s -> %s\n" % (dest, target), noiselevel=-1)
-			writemsg(_unicode_decode("!!! %s\n") % (e,), noiselevel=-1)
+			writemsg("!!! %s\n" % (e,), noiselevel=-1)
 			return None
 
 	hardlinked = False
@@ -232,7 +234,7 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
 				# Some random error.
 				writemsg("!!! %s\n" % _("Failed to move %(src)s to %(dest)s") %
 					{"src": src, "dest": dest}, noiselevel=-1)
-				writemsg(_unicode_decode("!!! %s\n") % (e,), noiselevel=-1)
+				writemsg("!!! %s\n" % (e,), noiselevel=-1)
 				return None
 			# Invalid cross-device-link 'bind' mounted or actually Cross-Device
 	if renamefailed:
@@ -263,7 +265,7 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
 			except Exception as e:
 				writemsg("!!! %s\n" % _('copy %(src)s -> %(dest)s failed.') %
 					{"src": src, "dest": dest}, noiselevel=-1)
-				writemsg(_unicode_decode("!!! %s\n") % (e,), noiselevel=-1)
+				writemsg("!!! %s\n" % (e,), noiselevel=-1)
 				return None
 		else:
 			#we don't yet handle special, so we need to fall back to /bin/mv

diff --git a/pym/portage/versions.py b/pym/portage/versions.py
index a9b7e64..d78873f 100644
--- a/pym/portage/versions.py
+++ b/pym/portage/versions.py
@@ -1,7 +1,9 @@
 # versions.py -- core Portage functionality
-# Copyright 1998-2012 Gentoo Foundation
+# Copyright 1998-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 __all__ = [
 	'best', 'catpkgsplit', 'catsplit',
 	'cpv_getkey', 'cpv_getversion', 'cpv_sort_key', 'pkgcmp',  'pkgsplit',
@@ -79,7 +81,7 @@ def _get_pv_re(eapi_attrs):
 	else:
 		pv_re = _pv['dots_disallowed_in_PN']
 
-	pv_re = re.compile(_unicode_decode('^' + pv_re + '$'), re.VERBOSE | re.UNICODE)
+	pv_re = re.compile(r'^' + pv_re + r'$', re.VERBOSE | re.UNICODE)
 
 	_pv_re_cache[cache_key] = pv_re
 	return pv_re

diff --git a/pym/portage/xml/metadata.py b/pym/portage/xml/metadata.py
index 113b118..fcd9dc0 100644
--- a/pym/portage/xml/metadata.py
+++ b/pym/portage/xml/metadata.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 """Provides an easy-to-use python interface to Gentoo's metadata.xml file.
@@ -28,6 +28,8 @@
 		'Thomas Mills Hinkle'
 """
 
+from __future__ import unicode_literals
+
 __all__ = ('MetaDataXML',)
 
 import sys
@@ -58,7 +60,7 @@ except (ImportError, SystemError, RuntimeError, Exception):
 
 import re
 import xml.etree.ElementTree
-from portage import _encodings, _unicode_encode, _unicode_decode
+from portage import _encodings, _unicode_encode
 from portage.util import unique_everseen
 
 class _MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder):
@@ -208,7 +210,7 @@ class MetaDataXML(object):
 		except ImportError:
 			pass
 		except ExpatError as e:
-			raise SyntaxError(_unicode_decode("%s") % (e,))
+			raise SyntaxError("%s" % (e,))
 
 		if isinstance(herds, etree.ElementTree):
 			herds_etree = herds

diff --git a/pym/repoman/checks.py b/pym/repoman/checks.py
index 36c9863..83ce2ed 100644
--- a/pym/repoman/checks.py
+++ b/pym/repoman/checks.py
@@ -1,10 +1,12 @@
 # repoman: Checks
-# Copyright 2007-2012 Gentoo Foundation
+# Copyright 2007-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 """This module contains functions used in Repoman to ascertain the quality
 and correctness of an ebuild."""
 
+from __future__ import unicode_literals
+
 import codecs
 from itertools import chain
 import re

diff --git a/pym/repoman/errors.py b/pym/repoman/errors.py
index c515502..51ffeb8 100644
--- a/pym/repoman/errors.py
+++ b/pym/repoman/errors.py
@@ -1,7 +1,9 @@
 # repoman: Error Messages
-# Copyright 2007-2011 Gentoo Foundation
+# Copyright 2007-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+from __future__ import unicode_literals
+
 COPYRIGHT_ERROR = 'Invalid Gentoo Copyright on line: %d'
 LICENSE_ERROR = 'Invalid Gentoo/GPL License on line: %d'
 CVS_HEADER_ERROR = 'Malformed CVS Header on line: %d'

diff --git a/pym/repoman/herdbase.py b/pym/repoman/herdbase.py
index 4c420d0..c5b88ff 100644
--- a/pym/repoman/herdbase.py
+++ b/pym/repoman/herdbase.py
@@ -1,8 +1,10 @@
 # -*- coding: utf-8 -*-
 # repoman: Herd database analysis
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2 or later
 
+from __future__ import unicode_literals
+
 import errno
 import xml.etree.ElementTree
 try:
@@ -63,7 +65,7 @@ def make_herd_base(filename):
 			parser=xml.etree.ElementTree.XMLParser(
 				target=_HerdsTreeBuilder()))
 	except ExpatError as e:
-		raise ParseError("metadata.xml: " + str(e))
+		raise ParseError("metadata.xml: %s" % (e,))
 	except EnvironmentError as e:
 		func_call = "open('%s')" % filename
 		if e.errno == errno.EACCES:

diff --git a/pym/repoman/utilities.py b/pym/repoman/utilities.py
index b408074..8d24abb 100644
--- a/pym/repoman/utilities.py
+++ b/pym/repoman/utilities.py
@@ -1,11 +1,11 @@
 # repoman: Utilities
-# Copyright 2007-2012 Gentoo Foundation
+# Copyright 2007-2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 """This module contains utility functions to help repoman find ebuilds to
 scan"""
 
-from __future__ import print_function
+from __future__ import print_function, unicode_literals
 
 __all__ = [
 	"detect_vcs_conflicts",
@@ -310,12 +310,12 @@ def format_qa_output(formatter, stats, fails, dofull, dofail, options, qawarning
 	# we only want key value pairs where value > 0 
 	for category, number in \
 		filter(lambda myitem: myitem[1] > 0, iter(stats.items())):
-		formatter.add_literal_data(_unicode_decode("  " + category.ljust(30)))
+		formatter.add_literal_data("  " + category.ljust(30))
 		if category in qawarnings:
 			formatter.push_style("WARN")
 		else:
 			formatter.push_style("BAD")
-		formatter.add_literal_data(_unicode_decode(str(number)))
+		formatter.add_literal_data("%s" % number)
 		formatter.pop_style()
 		formatter.add_line_break()
 		if not dofull:
@@ -326,7 +326,7 @@ def format_qa_output(formatter, stats, fails, dofull, dofail, options, qawarning
 			if not full and len(fails_list) > 12:
 				fails_list = fails_list[:12]
 			for failure in fails_list:
-				formatter.add_literal_data(_unicode_decode("   " + failure))
+				formatter.add_literal_data("   " + failure)
 				formatter.add_line_break()
 
 
@@ -775,7 +775,7 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
 				line = line.replace('<PACKAGE_NAME>', package)
 				line = _update_copyright_year(year, line)
 				header_lines.append(line)
-			header_lines.append(_unicode_decode('\n'))
+			header_lines.append('\n')
 			clskel_file.close()
 
 		# write new ChangeLog entry
@@ -785,10 +785,10 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
 			if not fn.endswith('.ebuild'):
 				continue
 			ebuild = fn.split(os.sep)[-1][0:-7] 
-			clnew_lines.append(_unicode_decode('*%s (%s)\n' % (ebuild, date)))
+			clnew_lines.append('*%s (%s)\n' % (ebuild, date))
 			newebuild = True
 		if newebuild:
-			clnew_lines.append(_unicode_decode('\n'))
+			clnew_lines.append('\n')
 		trivial_files = ('ChangeLog', 'Manifest')
 		display_new = ['+' + elem for elem in new
 			if elem not in trivial_files]
@@ -815,19 +815,19 @@ def UpdateChangeLog(pkgdir, user, msg, skel_path, category, package,
 		for line in textwrap.wrap(mesg, 80, \
 				initial_indent='  ', subsequent_indent='  ', \
 				break_on_hyphens=False):
-			clnew_lines.append(_unicode_decode('%s\n' % line))
+			clnew_lines.append('%s\n' % line)
 		for line in textwrap.wrap(msg, 80, \
 				initial_indent='  ', subsequent_indent='  '):
-			clnew_lines.append(_unicode_decode('%s\n' % line))
+			clnew_lines.append('%s\n' % line)
 		# Don't append a trailing newline if the file is new.
 		if clold_file is not None:
-			clnew_lines.append(_unicode_decode('\n'))
+			clnew_lines.append('\n')
 
 		f = io.open(f, mode='w', encoding=_encodings['repo.content'],
 			errors='backslashreplace')
 
 		for line in clnew_lines:
-			f.write(_unicode_decode(line))
+			f.write(line)
 
 		# append stuff from old ChangeLog
 		if clold_file is not None:


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-01-18 21:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-27 15:52 [gentoo-commits] proj/portage:master commit in: pym/repoman/, pym/portage/package/ebuild/_ipc/, pym/_emerge/resolver/, Zac Medico
  -- strict thread matches above, loose matches on Subject: below --
2013-01-18 21:33 Zac Medico
2013-01-18 21:37 Zac Medico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox