commit:     7cb7196fe8aa668e76437a8a4500a7bcb9fd3c75
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Mon Sep  2 05:32:09 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Sep  2 20:11:26 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7cb7196f

_doebuild_path: Optimize PATH in ebuild environment.

Canonicalize paths of directories in PATH.
Avoid duplicates when some directories (e.g. bin and sbin) are merged.

Bug: https://bugs.gentoo.org/693306
Signed-off-by: Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache.Org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/package/ebuild/doebuild.py | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/lib/portage/package/ebuild/doebuild.py 
b/lib/portage/package/ebuild/doebuild.py
index 584ff798b..66e294d51 100644
--- a/lib/portage/package/ebuild/doebuild.py
+++ b/lib/portage/package/ebuild/doebuild.py
@@ -5,6 +5,7 @@ from __future__ import unicode_literals
 
 __all__ = ['doebuild', 'doebuild_environment', 'spawn', 'spawnebuild']
 
+import collections
 import grp
 import gzip
 import errno
@@ -254,7 +255,14 @@ def _doebuild_path(settings, eapi=None):
                                path.append(x_abs)
 
        path.extend(rootpath)
-       settings["PATH"] = ":".join(path)
+
+       # Canonicalize paths and avoid duplicates when some directories
+       # (e.g. bin and sbin) are merged.
+       real_path = collections.OrderedDict()
+       for x in path:
+               real_path.setdefault(os.path.realpath(x), None)
+
+       settings["PATH"] = ":".join(real_path)
 
 def doebuild_environment(myebuild, mydo, myroot=None, settings=None,
        debug=False, use_cache=None, db=None):

Reply via email to